API应该为已更新但未更改的值返回什么响应代码?

时间:2018-11-30 13:40:35

标签: rest api error-handling server api-design

是否存在通常不会实际更新数据的API调用的通常同意的响应代码?例如,一个文本字段当前为“ blah”,并且用户单击“ edit”和“ save”,即使以前的值没有任何变化,API是否应该返回200?

似乎要发送2xx响应的唯一方法是让用户不知道任何内容已更新,或者首先不发送API调用,那就是完全管理前端的状态,然后允许只有在什么都没有改变的情况下才能通过的呼叫?还是只让后端抛出一个4xx,因为数据与之前的数据一样不是真的有效,这是否合适?

1 个答案:

答案 0 :(得分:0)

这取决于您所取得的成就。如果要更新该值,则可以使用适当的状态码来处理它。而且,如果该值可以正确更新并且不在数据库中进行更新,则您还可以使用状态代码来处理为什么未在数据库中对其进行更新。 您可以执行以下操作:

    [Route("PutData")]
     public HttpResponseMessage PutData(model obj)
     {
        if (ModelState.IsValid)
        {
            try
            {
                model newobj = new model();

                newobj.a = obj.a;
                newobj.b = obj.b;

                DBContex context = new DBContex();

                context.ProcName(newobj.a, newobj.b);
            }
            catch (Exception ex)
            {
                return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
            }

            return Request.CreateResponse(HttpStatusCode.NoContent);
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState);
        }
    }

希望您能理解我在代码中写的内容。当模型状态有效时,请遍历代码,否则返回400(错误请求)。有效且有错误时,状态码将返回500,并且错误将在后端显示给您(否则)(如果没有错误),然后修改204。 现在,如果要在API中执行更新而不更新表,则最好选择存储过程,并以最简单的方式调用它。 希望我回答了你的问题