我有一個休息 api v1/create/order。我需要實作以下
- 客戶端 A -> 呼叫我的創建訂單休息 api。
- 我需要立即向客戶回復確認
- 然后我將在后臺進行一些處理。大約需要 50 到 200 秒)。
- 完成第 3 步后,我需要回傳回應。結果將包含我在第 3 步中所做的一些計算欄位。
我該如何實施?我正在使用 Java 8 和 Spring Boot 框架。我可以在后臺執行緒中執行第 3 步,因為它涉及一些并行操作。
uj5u.com熱心網友回復:
我認為這個“用例”應該面對異步行為。在 REST api 中建模異步場景沒有“標準解決方案”,據我所知,上面列出的兩個是唯一的。
您應該公開兩個休息端點
1. /v1/create/order (or even better POST /v1/order... )
2. /v1/order/{id}
第一個為 ex 回傳一個 id。標識資源服務器端的“123”甚至更好的鏈接(更“REST”),如下所示:
/v1/order/123
請注意,服務器應回傳 HTTP 202 以指示操作已“接受”,并可能添加 Retry-After 標頭以指示客戶端必須在指定時間或日期之前呼叫此 uri(在本例中為 2 秒)
HTTP/1.1 202 (Accepted)
Location /v1/order/123
Retry-After: 2
然后您(2s 后)從您的客戶端定期呼叫:
GET /v1/order/123
直到你得到結果。
另一種解決方案可能是從客戶端 A 公開一個 api(如果可能的話),這樣服務器可以在完成作業時呼叫客戶端 A。(如果客戶端 A 本身就是一個服務,這是可能的)請注意,即使回呼解決方案可以顯著增加系統的復雜性,在某些情況下也是可取的。
uj5u.com熱心網友回復:
您想要的是服務器發送事件的用例。REST 遵循請求-回應周期。在這種情況下,您可以使用長輪詢在初始回應后重新請求并保持連接等待第二個回應。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517880.html
標籤:爪哇春天多线程弹簧靴异步
上一篇:并發字典讀取和洗掉專案并行
下一篇:Asyncio收集差異
