我正在设计一个REST API并尝试确定哪种方法更准确地返回单个资源:
/resource/{id}
或
/resource/{name}
ID将是不可变的,所以我认为选择它会更好,但名字会更友好。什么是最佳做法?我已经看到两者都在“野外”之前使用过。
答案 0 :(得分:4)
基本上,REST建立在唯一ID之上,因此:
GET /resources/{id}/
应该使用。但是,没有什么可以阻止您使name
字段唯一(现在它表现为普通旧ID)并在此唯一ID之上构建REST。
如果这不是您所需要的,并且name
无法使其唯一,则另一个选项是通过name
实施过滤:
GET /resources?name=<SOME_NAME>
它也应该是resources
(复数),因为它表明会有一个集合。
答案 1 :(得分:2)
是否实际使用名称取决于您的商业案例。
'name'总是是唯一的吗?或者应用程序是否会处理不止一次?
'漂亮'的网址很重要吗?在我工作的大多数应用程序中,查询使用从未向最终用户公开的唯一ID,因为它们没有任何商业意义。它们实际上是代理主键。
答案 2 :(得分:1)
/resource/{id}
在技术上更正确,但如果是我,我会允许两者。假设names
不能包含唯一的数字,并且ids
只能是数字,您可以轻松检测到哪些数字被提供并允许使用。 ;)
答案 3 :(得分:0)
这是一个很好的问题..这取决于商业案例,如果api通过像docker这样的cli使用,那么你可能想要使用用户友好的id,比如名字 但是一旦它成为URL的一部分,它就会有像ASCII这样的限制(以避免网址编码或丢失可读性)仅限char和一些定义的长度,如128个字符等。