关于在设计 API 时的一个考虑

2012-04-16 22:57:00 +08:00
 Livid
如果用户请求的时候提交了错误的参数,这个时候服务器端无法满足用户的需求,需要返回一个错误页面。

假设 API 是 JSON 格式的,那么大家做为开发者,会希望服务器端如何通知这个错误呢?

目前考虑的几种做法:

1. 返回 HTTP 400 Bad Request 状态。

2. 在所有的 JSON 反馈中都加入这样的设定:

{
"status" : "error"
}



{
"status" : "ok"
}

期待大家对这个问题的建议。
11602 次点击
所在节点    API
59 条回复
adow
2012-04-16 22:59:12 +08:00
我倾向400 Bad Request
avatasia
2012-04-16 23:00:37 +08:00
不符合规则的参数一律 404
status error 或者 1 表示系统错误
status 0 或者 没有 OK
cjou
2012-04-16 23:02:35 +08:00
我习惯用 responseCode + msg 的方式,显示错误信息对调试或捕捉日志会更直接。
{
"status" : "200"
"msg" : "sth error"
}
lychee
2012-04-16 23:02:40 +08:00
1和2可以同时使用

我觉得可以加个/path/to/api?show_messages=1 来决定是否返回错误信息 可以稍稍省点流量
iandyh
2012-04-16 23:02:44 +08:00
2

这样应用处理异常起来也更方便,每次调 API 后判断一次 status 是否 ok 就可以进行下去。
whtsky
2012-04-16 23:03:27 +08:00
400
Los
2012-04-16 23:09:29 +08:00
返回 HTTP status code,并在有错误出现时返回数据格式中加入 errors
如用户登录出错返回 HTTP status code 为 401 Unauthorized,数据格式为以下

{
"errors":
{"type":"unauthorized","msg":"Login failed. Email or password are incorrect."}
}
whtsky
2012-04-16 23:11:23 +08:00
ls+1.
既然已经有status code了,就没必要再从数据中表示一遍.
zhendi
2012-04-16 23:13:29 +08:00
同3楼, 习惯返回 {"status": "error", "message": "error msg"}
Los
2012-04-16 23:13:49 +08:00
@whtsky 有时候 HTTP status codes 并不能完全的表述出错的类型
fanzeyi
2012-04-16 23:16:05 +08:00
400 + {"status": "error", "message": "error msg"}

如果是 200 就不用再有 status 和 message 了
bjshdq
2012-04-16 23:24:25 +08:00
2
这样更清晰。
clowwindy
2012-04-16 23:25:20 +08:00
用 status code 区分成功和失败,成功和失败返回不同的数据,由不同的 callback 处理。所以成功不需要返回错误信息,出错才需要。
icyflash
2012-04-16 23:26:18 +08:00
客户端通过http status code来判断请求是否成功。

非200的返回error message

可以参考下twitter的嘛,

https://dev.twitter.com/docs/error-codes-responses
DeeCheung
2012-04-16 23:34:50 +08:00
python 的理念 None
darasion
2012-04-16 23:37:26 +08:00
我也挺纠结这个问题的,收藏,看大家有啥高见。
xiaojay
2012-04-16 23:43:13 +08:00
http://wiki.open.t.qq.com/index.php/错误码说明

我觉得 tqq 的api 返回代码,不错
chuck911
2012-04-16 23:50:32 +08:00
只用400太笼统了
401、403、201、404 都很常用
http code和json内容不冲突,
方法2可以与http code同时使用
darcy
2012-04-16 23:53:54 +08:00
@Los +1
HTTP的状态码实在有限,某些情况下需要自定义的字段才能表示一些复杂的异常情况。
cashplk
2012-04-17 00:00:09 +08:00
400比较清晰

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/32414

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX