我想知道我应该如何在 REST API 中做出响应。
有效示例:
http://blah.com/api/v1/dosomething/123
以上是一个有效的请求,目前我的 HTTP 状态为 200,并带有 JSON 响应
{
"dosomething": {
"status": "OK",
"results": "123"
}
}
现在我的问题是,如果传递的参数无效(我期望一串整数),我是否返回 200 的 HTTP 响应并将错误状态传递回 JSON 响应,或者我应该传递类似 HTTP 的内容400 响应(错误请求)并在 JSON 响应中列出请求的错误/问题?
错误示例:
http://blah.com/api/v1/dosomething/123a
JSON 响应:
{
"dosomething": {
"status": "ERROR",
"errors": [
"Value passed: |123a| must be a integer."
]
}
}
我的问题又是,如果传递的参数不是我所期望的,我是否应该在请求上传递 200 或 400 HTTP 状态?或者当请求正在运行时,这应该始终是 200 响应?
什么被认为是最佳实践?
始终使用 404。 404. 否则就会误解 URI 和资源的本质。如果http://blah.com/api/v1/dosomething/
识别资源,并且123a
只是它的一个参数,然后其他代码才有意义。但它没有:http://blah.com/api/v1/dosomething/123
标识资源。如果不存在这样的资源,则返回404 Not Found
.
您可能拥有一些实现细节handles两种资源http://blah.com/api/v1/dosomething/123
and http://blah.com/api/v1/dosomething/123a
,但它不是资源。来自罗伊·菲尔丁的论文 http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_2_3:
“资源不是存储对象。资源不是
服务器用来处理存储对象的机制。这
资源是一个概念映射——服务器接收标识符
(标识映射)并将其应用于当前映射
实现(通常是集合特定的深度树的组合
遍历和/或哈希表)来找到当前负责的
处理程序实现然后处理程序实现选择
根据请求内容适当的操作+响应。所有这些
特定于实现的问题隐藏在 Web 界面后面;
仅具有访问权限的客户端无法假定它们的性质
通过网络界面。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)