3 回答

TA貢獻1772條經驗 獲得超5個贊
如果您在GET請求中使用請求正文,那么您將違反REST原則,因為您的GET請求將無法緩存,因為緩存系統僅使用URL。
更糟糕的是,您的URL無法加入書簽,因為該URL不包含將用戶重定向到此頁面所需的所有信息
使用URL或Query參數代替請求正文參數。
例如:
/myapp?var1=xxxx&var2=xxxx/myapp;var1=xxxx/resource;var2=xxxx
事實上,HTTP RFC 7231說:
GET請求消息中的有效負載沒有定義的語義;?在GET請求上發送有效負載主體可能會導致某些現有實現拒絕該請求。

TA貢獻1827條經驗 獲得超8個贊
似乎資源過濾/搜索可以以RESTful方式實現。我們的想法是引入一個名為/filters/
或的新端點/api/filters/
。
使用此端點過濾器可以視為資源,因此通過POST
方法創建。這種方式 - 當然 - 身體可用于攜帶所有參數以及可以創建復雜的搜索/過濾器結構。
創建此類過濾器后,有兩種方法可以獲得搜索/過濾結果。
將返回具有唯一ID的新資源以及
201 Created
狀態代碼。然后使用此IDGET
可以使請求/api/users/
如下:GET /api/users/?filterId=1234-abcd
新的過濾器通過創建后
POST
它將不會與回復201 Created
,但在一次與303 SeeOther
一起Location
頭指向/api/users/?filterId=1234-abcd
。此重定向將通過底層庫自動處理。
在這兩種情況下,需要進行兩次請求以獲取過濾結果 - 這可能被視為一個缺點,尤其是對于移動應用程序。對于移動應用程序,我會使用單個POST
調用/api/users/filter/
。
如何保持創建的過濾器?
它們可以存儲在DB中,以后再使用。它們也可以存儲在一些臨時存儲器中,例如redis,并且有一些TTL,之后它們將過期并將被刪除。
這個想法有什么好處?
過濾器,過濾結果可以緩存,甚至可以加入書簽。
- 3 回答
- 0 關注
- 1615 瀏覽
添加回答
舉報