【问题标题】:What response code should an API return for a value that was updated but not changed?对于已更新但未更改的值,API 应返回什么响应代码?
【发布时间】:2018-11-30 13:40:35
【问题描述】:

对于实际上不更新数据的 API 调用,是否存在通常商定的响应代码?例如,一个文本字段当前是“blah”,用户点击“edit”和“save”,API 是否应该返回 200,即使它之前的值没有发生任何变化?

似乎如果要发送 2xx 响应来让用户知道什么都没有更新,或者首先不发送 API 调用,那就是完全管理前端的状态,然后允许只有在没有任何改变的情况下才能通过该呼叫?还是只让后端抛出 4xx 是否合适,因为数据不是真正有效的,因为它与以前相同?

【问题讨论】:

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


    【解决方案1】:

    这取决于您要实现的目标。如果您希望更新该值,您可以使用适当的状态码来处理它。如果值更新正常并且它没有在数据库中更新,您还可以处理状态代码以了解为什么它没有在数据库中更新。 你可以这样做:

        [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 中执行更新而不更新表,最好使用存储过程并以最简单的方式调用它。 希望我能回答你的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多