2 回答
TA贡献2016条经验 获得超9个赞
POST 或 PUT 方法本身并不能解决任何问题。如果您想避免您描述的行为,您应该通过向该方法添加您自己的逻辑来解决该问题。您的实现必须控制数据是否存在。
理想情况下,在 REST API 上,POST 用于创建资源,PUT 用于更新现有资源。
话虽如此,您可以根据谁在调用该端点以及在应用程序的哪个实例中来实现您的逻辑。例如,如果有人两次使用同一资源发送 POST,您可以检查该资源是否存在并发送描述该情况的 HTTP 状态。
编辑:
我将添加一些代码向您展示。它是如何工作的:
假设您想在应用程序中创建和更新用户。其端点可能类似于:http://localhost:8080/api/users/使用 POST 方法并将用户作为 JSON 发送到请求正文中。
您将拥有一个像这样的 UsersController:
public HttpResponseMessage Post([FromBody]UserModel user)
{
SQL.InsertUser(user);
return Request.CreateResponse(HttpStatusCode.OK);
}
然后在数据层你可以做这样的事情:
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 的设计目的是遵循 RESTful 标准。如果您使用 PUT 方法插入数据,那么您可能会遇到架构问题,并且您的 API 根本不是 RESTful。即使它使用 HTTP 方法形成通信等等。
在 RESTful API 上遵循标准非常重要。对于您和使用 API 的人。
在这里,您获得了 RESTful 入门圣经。我通常将此发送给所有希望了解 RESTful 世界的人:https ://blog.octo.com/en/design-a-rest-api/
- 2 回答
- 0 关注
- 302 浏览
添加回答
举报