【问题标题】:What should an API return if the operation can't be performed?如果操作无法执行,API 应该返回什么?
【发布时间】:2015-08-17 14:17:48
【问题描述】:

我正在用 PHP 为移动应用程序编写 API。应使用端点之一create-user.php 向用户表添加新记录。如果应用程序试图创建一个副本怎么办?我可以捕捉到这一点并返回一条错误消息(顺便说一句?)。问题是,我是否也应该返回具有如下结构的 JSON:

{
   "status": "The email already exists"
}

...向客户提供有关问题所在的更多信息?还是我应该只使用错误代码就可以了?

【问题讨论】:

  • 这可能是优惠。我会说使用错误代码。 jsonapi.org
  • API应该使用适用的响应代码。 API可能在响应正文中包含您想要的任何其他信息。
  • 正如@David 所说。我要补充的一件事是在 json 中也包含状态代码,例如 {"response_code":400, "message":"Unable to create user - The email already exists"} 所以如果您以后必须在标头中禁止 http 代码(闪存客户端任何人),响应仍然可用

标签: php json api mobile backend


【解决方案1】:

返回http状态422和错误信息

422(Unprocessable Entity)状态码表示服务器理解请求实体的内容类型(因此 415(Unsupported Media Type)状态码是不合适的),并且请求实体的语法是正确的(因此 400 (错误请求)状态代码不合适)但无法处理包含的指令。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会发生这种错误情况。 页面统计

具体来说:

422 状态码感觉更合适。服务器了解您要执行的操作;它了解您提交的数据;它根本不会让这些数据被处理。

阅读本纳德的更多信息:http://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm

此外,Laravel 框架在其请求表单类中还使用“失败规则”的 http 状态 422(例如,电子邮件已存在)。看到这个:http://laravel.com/docs/master/validation

【讨论】:

    【解决方案2】:

    如果你想向用户返回一些东西,我会返回一个简单的错误,就像你在你的例子中那样,然后我也会在服务器上有一个日志文件,我会记录错误、内部异常、日期和时间以及您想知道调试的任何其他信息。这样,如果它是简单的重复用户可以修复问题并继续前进,但如果他们不断收到错误,您可以查看日志文件以找到真正的问题。

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多