2015-10-16 48 views
2

我知道帖子通常用於告訴網絡服務器存儲的東西,如果我只是想發送一些狀態數據,那麼正確的方法是什麼?說,我正在發佈客戶狀態?使用Http Post發送狀態數據是否是好習慣?

+0

如果您正在更新「客戶端」對象的狀態,則可以使用PUT。如果您要創建一個新的「客戶端狀態」對象,則可以使用POST。 – David

+0

您能否澄清一下「客戶狀態」。 – mahemoff

+0

我的意思是從客戶端應用程序的任意狀態,我需要通知服務器。 – mskw

回答

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的方法,但在列表資源(單一資源用於PUTPATCH特定資源元素) 。下面是一個示例:

PUT /someresource/ 
    Content-Type: application/json 
    { 
     (...) 
     "status": "some status" 
    } 

    204 No content 
    Location: http://.../someresource/newid 

這裏有一些額外的鏈接,可以幫助你:

希望它會幫助你, Thierry

1

如果你沒有更新任何東西,那麼POST是你應該使用它的方法。

+0

我以爲如果你想更新一些東西,也想用一個帖子來使用。或者你的意思是使用補丁更新? – mskw

1

這取決於你的用例。在嚴格的休息環境下,Thierry的回答是正確的。但是,當我每天在金融服務中使用休息時,我必須根據法律保存所有數據而不作任何更改(例如可追溯性)。在我的情況下,我不能使用嚴格的休息,所以我使用POST對整個對象進行一個或多個屬性更改。由於每個新請求都是新資源,因此服務器會以「201 Created」和適當的狀態消息進行響應。

相關問題