我正在使用 Spring 在 Java 中制作 Blackjack 服務,并且我有游戲動作的方法,例如 Hit、Stand 等。
我的問題是,我應該為此使用 GET 還是 PATCH 請求?我以 json 格式詢問游戲的當前狀態,但是當我使用 /hit 時,它也會通過向玩家手中添加一張卡片來改變游戲。但同樣,我仍然在詢問資訊。
我應該使用哪一個?
提前致謝。
uj5u.com熱心網友回復:
GET 方法應該是冪等的:
如果可以連續發出一次或多次相同的請求并產生相同的效果,同時使服務器處于相同狀態,則HTTP 方法是冪等的。換句話說,冪等方法不應該有任何副作用(保留統計資料除外)。正確實作,GET、HEAD、PUT 和 DELETE方法是冪等的
因此,連續呼叫它們兩次不應改變僅呼叫該方法一次的行為。
從我看到的情況來看,您似乎每次呼叫時都會添加一張新卡,因此您在每次呼叫后更改狀態,而不僅僅是在第一次呼叫之后。在這種情況下,我更愿意使用 PATCH。
uj5u.com熱心網友回復:
我的問題是,我應該為此使用 GET 還是 PATCH 請求?我以 json 格式詢問游戲的當前狀態,但是當我使用 /hit 時,它也會通過向玩家手中添加一張卡片來改變游戲。但同樣,我仍然在詢問資訊。
您通常希望避免使用更改資源的 GET 請求,因為 GET 被限制為具有安全語意,這意味著,除其他外,爬蟲可以自由訪問它們,瀏覽器可以“以防萬一”搶先獲取它們。
因此,對于預期會修改服務器上資源的任何操作,您應該期待不安全的請求方法。
POST通常是正確的選擇。當客戶端向服務器發送其自己的本地資源版本的副本時,PUT/PATCH 可用于遠程創作。
POST /game/12345 HTTP/1.1
Content-Type: text/plain
Hit
當然,有效載荷不必是文本/純文本;您還可以使用 application/x-www-form-urlencoded(如網路上的表單)或 application/json(對于現代“apis”更常見)。
對 POST 請求的回應可以是檔案的更新副本...
200 OK
Content-Location: /game/12345
Content-Type: text/plain
22. You Lose!
注意:您通常希望訊息的語意在有效負載中,而不是在請求目標中。所以
POST /game/12345 HTTP/1.1
Content-Type: text/plain
Hit
而不是
POST /game/12345/hit HTTP/1.1
Content-Type: text/plain
Hit
因為我們希望 HTTP 應用程式知道請求更改了哪個資源,以便它可以執行智能操作(例如更新快取)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314012.html
上一篇:硒找不到所有元素
