2 回答

TA貢獻(xiàn)2016條經(jīng)驗 獲得超9個贊
POST 或 PUT 方法本身并不能解決任何問題。如果您想避免您描述的行為,您應(yīng)該通過向該方法添加您自己的邏輯來解決該問題。您的實現(xiàn)必須控制數(shù)據(jù)是否存在。
理想情況下,在 REST API 上,POST 用于創(chuàng)建資源,PUT 用于更新現(xiàn)有資源。
話雖如此,您可以根據(jù)誰在調(diào)用該端點(diǎn)以及在應(yīng)用程序的哪個實例中來實現(xiàn)您的邏輯。例如,如果有人兩次使用同一資源發(fā)送 POST,您可以檢查該資源是否存在并發(fā)送描述該情況的 HTTP 狀態(tài)。
編輯:
我將添加一些代碼向您展示。它是如何工作的:
假設(shè)您想在應(yīng)用程序中創(chuàng)建和更新用戶。其端點(diǎn)可能類似于:http://localhost:8080/api/users/使用 POST 方法并將用戶作為 JSON 發(fā)送到請求正文中。
您將擁有一個像這樣的 UsersController:
public HttpResponseMessage Post([FromBody]UserModel user)
{
SQL.InsertUser(user);
return Request.CreateResponse(HttpStatusCode.OK);
}
然后在數(shù)據(jù)層你可以做這樣的事情:
public static void InsertUser(UserModel user)
{
try
{
using (_conn = new SqlConnection(_connectionString))
{
_conn.Execute(@"IF EXISTS(SELECT * FROM USER WHERE ID = @ID)
BEGIN
/*DO THE UPDATE*/
END
ELSE
BEGIN
/*DO THE INSERT*/
END", user);
}
}
catch (Exception ex)
{
throw ex;
}
}
這不是最佳方法,但我想在這里展示的是您可以在 POST 或 PUT 上插入資源。問題是 RESTful API 的設(shè)計目的是遵循 RESTful 標(biāo)準(zhǔn)。如果您使用 PUT 方法插入數(shù)據(jù),那么您可能會遇到架構(gòu)問題,并且您的 API 根本不是 RESTful。即使它使用 HTTP 方法形成通信等等。
在 RESTful API 上遵循標(biāo)準(zhǔn)非常重要。對于您和使用 API 的人。
在這里,您獲得了 RESTful 入門圣經(jīng)。我通常將此發(fā)送給所有希望了解 RESTful 世界的人:https ://blog.octo.com/en/design-a-rest-api/

TA貢獻(xiàn)1816條經(jīng)驗 獲得超6個贊
我們用 [HttpPost] 屬性修飾的 Post() 方法。
Put() 能夠更新 RESTful 服務(wù)中的某些內(nèi)容
- 2 回答
- 0 關(guān)注
- 355 瀏覽
添加回答
舉報