我正在构建REST API,但我遇到了一个问题.
似乎在设计REST API时接受的做法是,如果请求的资源不存在,则返回404.
但是,对我来说,这增加了不必要的模糊性.传统上,HTTP 404与错误的URI相关联.所以实际上我们说"要么你到了正确的地方,但那个特定的记录不存在,或者互联网上没有这样的位置!我真的不确定哪一个......"
考虑以下URI:
http://mywebsite/api/user/13
Run Code Online (Sandbox Code Playgroud)
如果我得到404,那是因为用户13不存在吗?或者是因为我的网址应该是:
http://mywebsite/restapi/user/13
Run Code Online (Sandbox Code Playgroud)
过去,HTTP 200 OK如果记录不存在,我只返回带有响应代码的NULL结果.它很简单,在我看来非常干净,即使它不一定是公认的做法.但是有更好的方法吗?
让我们假设有两个资源Binder,并Doc具有关联关系意味着Doc和Binder自己站.Doc可能属于也可能不属于Binder且Binder可能为空.
如果我想设计一个REST API,允许用户发送一个Docs 的集合,在单个请求中,如下所示:
{
"docs": [
{"doc_number": 1, "binder": 1},
{"doc_number": 5, "binder": 8},
{"doc_number": 6, "binder": 3}
]
}
Run Code Online (Sandbox Code Playgroud)
对于每个文档docs,
doc存在则将其分配给Binderdoc不存在,请创建它然后分配它我真的很困惑这应该如何实现:
/binders/docs?我们的团队正在开发RESTFul应用程序......我们正在讨论"最佳实践"方法.
是否应该为类似过滤器的查询返回404状态代码响应?说我的GET URL是
.../1 /服务/ startsWith/a.json
并且它返回在我的数据库中以A开头的所有值...但如果没有找到"a"值,我应该只返回带有空json字符串的状态代码200吗?或状态代码404.
谢谢!
我正在创建RESTful API.我读
http://microformats.org/wiki/rest/urls
但是这个网站在设计我的API方面没有给我足够的"好"做法.具体来说,我将编写一个API(目前只有GET方法),它将提供转换地理坐标的功能.
示例:geohash是坐标的单值表示,因此/convert/geohash/u09tvkx0.json?outputformat=latlong
说得通.另一方面/convert/latlong.xml?lat=65&long=13&outputformat=UTC需要两个输入值.
看到我的"问题"?是什么让一个好的API需要多个输入参数?
(试图通过"分析"twitter和FF来"识别"良好做法,但失败了)
一个最佳实践问题。如果要设计RESTful接口,将如何区分子类型。例如,您的应用程序具有动物(每个动物都由其animalId标识),它们具有狗和鸟的子类型,其中每个子类型都有其特定的子资源。例如,狗的尾巴长而鸟的翅膀长(无论如何)。您会选择哪种方法(或者您有更好的想法)?
1)
/animals/{animalId}/tail-length (400 when animal is bird)
/animals/{animalId}/wings-length (400 when animal is dog)
2)
/dogs/{animalId}/tail-length
/birds/{animalId}/wings-length
3)
/animals?type=dog/{animalId}/tail-length
/animals?type=bird/{animalId}/wings-length
Run Code Online (Sandbox Code Playgroud)