簡體   English   中英

“單讀” REST API的適當HTTP方法

[英]Appropriate HTTP Method for 'Single Read' REST API

我們有一個REST API,可以在同一調用中從數據庫中讀取和刪除記錄,並將讀取的值返回給客戶端。 我們已經使用HTTP POST公開了它。 是否應該將其公開為HTTP GET? 如果我們將其公開為GET,那么在緩存方面會有什么意義。

根據以上討論,它看起來像是PUT請求。 您不應使用GET,因為它是冪等的,因為第二次調用無法使用相同的數據。 POST用於創建新資源。 因此,對於這種要求,最好使用PUT http方法。 請參閱下面的鏈接以獲取更多詳細信息。

https://restfulapi.net/http-methods/

首先,您應牢記,我們關心請求安全冪等的原因之一是網絡不可靠 一些非零數量的查詢響應將丟失,對此您要怎么做?

客戶端使用GET請求資源,然后使用DELETE確認接收的協議可能比在單個響應上刻錄資源更可靠。

是否應該將其公開為HTTP GET?

也許。 我不會太擔心第二個GET返回與第一個不同的響應這一事實。 安全/冪等並不保證每次響應都相同,而只是保證第二個請求不會改變效果。

例如, DELETE是冪等的,因為兩次刪除都等同於刪除一次,即使您可能將第一個請求返回200,將第二個請求返回404/410。

HTTP不會嘗試要求GET的結果是安全的。 該操作要求操作的語義是安全的,因此,如果發生任何導致財產損失的后果,則是實現的錯誤,而不是接口或該接口的用戶的錯誤。就此定義而言,被視為屬性)。

我認為這里要注意的是“財產損失”。 如果通用組件認為GET表示GET,會造成什么樣的損害? 並采取相應措施(例如,通過預取資源或抓取API)。

但是您絕對需要考慮語義-我們是否正在閱讀文檔,而刪除數據庫記錄又是一個副作用? 還是我們刪除記錄,並收到最后一個已知的表示作為響應?

POST當然也可以-POST可以表示任何含義。

如果我們將其公開為GET,那么在緩存方面會有什么意義。

RFC 7234-我不認為有任何特別不尋常的含義。 通過指定適當的標頭,您應該能夠獲得所需的緩存行為。

如果我正確地解釋了您的用例,那么您可能想要包括一個private指令 ,例如。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM