是否应在ID或名称字段上选择REST API?

时间:2015-07-19 21:55:29

标签: api rest web

我正在设计一个REST API并尝试确定哪种方法更准确地返回单个资源:

/resource/{id}

/resource/{name}

ID将是不可变的,所以我认为选择它会更好,但名字会更友好。什么是最佳做法?我已经看到两者都在“野外”之前使用过。

4 个答案:

答案 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个字符等。