我知道帖子通常用於告訴網絡服務器存儲的東西,如果我只是想發送一些狀態數據,那麼正確的方法是什麼?說,我正在發佈客戶狀態?使用Http Post發送狀態數據是否是好習慣?
2
A
回答
1
如果要更新現有資源的狀態,則必須使用PUT
方法。但後者對應於整個狀態的更新,即您需要發送所有字段。如果你想進行部分更新,你應該考慮PATCH
之一。您只能發送該字段或使用JSON Patch格式。
下面是一些樣本:
完全更新:
PUT /someresource/someid Content-Type: application/json { (...) "status": "some status" }
部分更新:
PATCH /someresource/someid Content-Type: application/json { "status": "some status" } 204 No content
部分更新與補丁JSON:
PATCH /someresource/someid Content-Type: application/json [ { "op": "replace", "path": "/status", "value": "some status" } ] 204 No content
如果「發送一些狀態數據」對應於您的數據存儲添加的東西,你應該考慮使用POST
的方法,但在列表資源(單一資源用於PUT
和PATCH
特定資源元素) 。下面是一個示例:
PUT /someresource/
Content-Type: application/json
{
(...)
"status": "some status"
}
204 No content
Location: http://.../someresource/newid
這裏有一些額外的鏈接,可以幫助你:
- 設計Web API(即RESTful服務):http://restlet.com/blog/2015/03/16/designing-a-web-api/
- 不要像打補丁一個白癡:http://williamdurand.fr/2014/02/14/please-do-not-patch-like-an-idiot/
希望它會幫助你, Thierry
1
1
這取決於你的用例。在嚴格的休息環境下,Thierry的回答是正確的。但是,當我每天在金融服務中使用休息時,我必須根據法律保存所有數據而不作任何更改(例如可追溯性)。在我的情況下,我不能使用嚴格的休息,所以我使用POST對整個對象進行一個或多個屬性更改。由於每個新請求都是新資源,因此服務器會以「201 Created」和適當的狀態消息進行響應。
相關問題
- 1. 使用幻數是好習慣嗎?
- 2. 使用完整的數據集進行預測是否是一個好習慣?
- 3. 使用CRC32來散列字符串是否是好習慣?
- 4. 在$角度使用$ parent是否是一個好習慣?
- 5. 在視圖中使用getter是否是好習慣?
- 6. 使用float來定位元素是否是一個好習慣?
- 7. 使用active_model_serializer和Jbuilder是否是一個好習慣?
- 8. 這是使用iframe的好習慣嗎
- 9. 從PHP/Mysql函數返回HTML是否是一個好習慣?
- 10. 從c中的函數返回指針是否是好習慣?
- 11. 從函數中打印bool值是否是一種好習慣?
- 12. 總是等待任務完成是否是一種好習慣?
- 13. Perl - 將空字符串用作false是否是好習慣?
- 14. 將SharedPreferences用作磁盤緩存是否是好習慣?
- 15. 用戶Fragment.setRetainInstance不處理娛樂是否是一個好習慣?
- 16. 是否應該通過HTTP-POST發送所有數據?
- 17. 在HTTP中,PUT和POST是否發送不同的數據?
- 18. 在發送發佈消息的好習慣之前是否檢查是否爲零?
- 19. 多態的好習慣
- 20. 使用默認參數健康習慣還是壞習慣?
- 21. 擴展Struts框架的FilterDispatcher是否是一個好習慣?
- 22. 在ThreadPoolExecutor中設置allowCoreThreadTimeOut()是否是一個好習慣?
- 23. 爲句柄寫一個getter是否是一個好習慣?
- 24. 構建集合緩存是否是一個好習慣?
- 25. 修改html id是否是一個好習慣?
- 26. 繼承UIViewController的子類是否是一種好習慣?
- 27. 傳遞Ninject內核是否是一個好習慣?
- 28. 在WPF(MVVM)中建立Model是否是一個好習慣?
- 29. 在python中製作嵌套類是否是一個好習慣?
- 30. 重寫ServletContextListener的實現是否是一個好習慣?
如果您正在更新「客戶端」對象的狀態,則可以使用PUT。如果您要創建一個新的「客戶端狀態」對象,則可以使用POST。 – David
您能否澄清一下「客戶狀態」。 – mahemoff
我的意思是從客戶端應用程序的任意狀態,我需要通知服務器。 – mskw