我讀了(其中包括)以下關於API設計的博客:https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling。它幫助我更好地理解了很多方面,但我仍然有一個問題:REST API:如何處理處理邏輯
如何處理處理某些數據並直接給出響應的功能。想想,像翻譯,計算或豐富的動詞。他們應該使用哪個名詞,並且應該使用GET,PUT還是POST進行調用?
P.S.如果它應該是GET,如何處理GET請求的最大長度
我讀了(其中包括)以下關於API設計的博客:https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling。它幫助我更好地理解了很多方面,但我仍然有一個問題:REST API:如何處理處理邏輯
如何處理處理某些數據並直接給出響應的功能。想想,像翻譯,計算或豐富的動詞。他們應該使用哪個名詞,並且應該使用GET,PUT還是POST進行調用?
P.S.如果它應該是GET,如何處理GET請求的最大長度
那麼,我可以告訴你,我知道這件事。
GET // Returns, JUST return
DELETE // Delete
POST // Send information that will be processed on server
PUT // Update a information
該模式適用於laravel框架。將最有趣的是,你在閱讀參考鏈接
編號: https://rafaell-lycan.com/2015/construindo-restful-api-laravel-parte-1/
你應該用以下步驟開始:
讓我們拿你的翻譯例子。你可以決定源語言中的每一個單詞都是一種資源。這將使:
http://example.com/translations/en-fr/hello
可能返回:
Content-Type: text/plain
Content-Language: fr
bonjour
如果你的過程是長期運行的,你應該創建一個客戶端可以張貼到請求隊列,併爲他們提供另一個(新)資源,他們可以查詢該過程是否已完成。
這實際上是關於命名的討論,而不是功能。它很可能在你的API中處理邏輯,你只需要小心地命名它。
假想的API時間。它有這個資源:/v1/probe/{ID}
它響應GET,POST和DELETE。假設我們想要開始探測,然後想要探測器將計算得到的通量變化給予我們觀測(完全組成物體)。雖然這不是一件真實的事情,但我們假設這必須在飛行中進行計算。我的一個勇敢的隊友決定在GET /v1/1324/calculateflux
上進行計算。
如果我們遵循真正的REST-ful做法......糟糕。突然間我們沒有處理名詞,是嗎?如果我們有GET /v1/probe/1324/calculateflux
,我們已經破壞了RESTful實踐,因爲我們現在要求一個動詞 - calculateflux
。
那麼,我們該如何處理呢?您需要重新考慮名稱calculateflux
。這並不好 - 它沒有在探測器上命名資源。 **在這種情況下,/v1/probe/1324/fluxvalue
是更好的名稱,而/v1/probe/1324/flux
也可以。
爲什麼?
RESTFUL APIs幾乎在它們的URI中專門使用名詞 - 記住每個URI都需要描述一個特定的事情,你可以獲得POST PUT或DELETE等等。 這意味着,任何時候有一個處理值,我們應該給這個資源處理(或計算)的值的名稱。這樣,我們通過始終保持當前數據(我們可以隨時重新計算Flux值)並保持RESTful,並且我們沒有改變探測器的狀態(我們沒有使用GET保存任何值)。
翻譯是一個動詞(好的我可以使用翻譯),並且在GET中提交的文本的長度會受到限制。長時間運行的進程不是問題,但是爲了API正確性(+存儲請求的所有邏輯)而進行POST/PUT和GET是過度的,而不是用戶友好的。 – Alfons
@Alfons:如果這個假設的翻譯服務基本上是一本字典,您不需要存儲請求。大約4096個字符(IE6)的GET請求限制綽綽有餘。如果它像Gengo那樣,那麼長文本的翻譯是由人提供的服務,那麼您需要有一個長期運行的過程資源。你能否詳細說明你的實際情況,以便我能提供更詳細的建議。此外,我不同意你的建議,API正確性不是用戶友好的。由於API的「正確性」(RESTfulness),網絡工作得很好。 –