如果无法执行操作,API应该返回什么?

时间:2015-08-17 14:17:48

标签: php json api mobile backend

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

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

...给客户更多关于出了什么问题的信息?或者我应该只使用错误代码,就是这样吗?

2 个答案:

答案 0 :(得分:3)

返回http状态422和错误消息

  

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

具体地:

  

422状态代码感觉更合适。服务器了解您要做的事情;它了解您提交的数据;它根本不会让这些数据得到处理。

阅读Ben Nadel的更多内容: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

答案 1 :(得分:0)

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