休息最佳实践:我应该遵循什么标准?
Rest best practices: what standard should I follow?
我在 post 这个问题之前阅读了以下书籍和链接,并且由于这个问题是关于最佳实践的,所以这个问题可能会被关闭。不过我期待一些专家的意见。
https://www.restapitutorial.com/resources.html
来自 oreily 的 REST-API-Design-Rulebook
其他博客post 和 Whosebug 问题。
例如,要获取 ID 为员工的信息,我们使用 uri
,如下所示
http://myapp-name.myorganization.com/employees/employeeid/123456
但以上所有资源都告诉我这样做
http://myapp-name.myorganization.com/employees/123456
同样,如果我想获取有关 ID 为 12345 的员工的信息,我的 uri 如下
http://myapp-name.myorganization.com/countries/country/US/employeeid/12345
相对于
http://myapp-name.myorganization.com/countries/US/12345
这是否意味着我的 uri 不标准?
它们只是指南。您无法在一份 Rest 文档中涵盖您的业务和必需品的所有可能性。
谈到你的例子,
http://myapp-name.myorganization.com/employees/employeeid/123456
和
http://myapp-name.myorganization.com/employees/123456
都正确。但可能会更好(更短)。
通常我更喜欢第二个并且使用第一个作为备选方案。例如,如果我想通过 id("default" 方法来查找员工)或他唯一的公司内部代码来查找员工,我更愿意分别使用:
/employees/123456 # by id
/employees/code/A899123A # by code
Similarly if i want go get information about employee with id 12345,
my uri is as below
http://myapp-name.myorganization.com/countries/country/US/employeeid/12345
这 URL 对我来说意味着你试图在美国国家/地区找到 ID 为 12345 的员工。但如果 US
项是在 API:
上查找国家/地区的默认方法,也可能更短
/countries/US/employees/12345
as opposed to http://myapp-name.myorganization.com/countries/US/12345
这个看起来很混乱。您是否要查找 ID 为 12345 的内容?仅查找 URL 很难回答。所以,/countries/US/employees/12345
更一致。
如果想法是使用某些代码在某个国家/地区找到员工,URL 可以遵循相同的模式:/countries/US/employees/code/A899123A
Does that my uri are not standard?
不,您的 URI 没问题。 REST 不关心您使用什么拼写来表示您的标识符,只要它们与描述“最佳实践”的 RFC 3986. There's also RFC 7320 一致——但您可能会发现那些最佳实践仍然会给您留下很多自由。
想想“变量名”——不同的社区对于变量名的拼写有自己的约定,但没有任何标准。
REST 中的标识符也是如此——它们是不透明的字符串,API 消费者和客户端实际上都不需要解析。 (示例:您最后一次实际查看在向 Google 提交搜索时使用的 URI 是什么时候?)
如果您遵守特定约定,某些路由框架会更易于使用,但这纯粹是服务器上的实现细节,客户端并不关心。
我在 post 这个问题之前阅读了以下书籍和链接,并且由于这个问题是关于最佳实践的,所以这个问题可能会被关闭。不过我期待一些专家的意见。
https://www.restapitutorial.com/resources.html 来自 oreily 的 REST-API-Design-Rulebook 其他博客post 和 Whosebug 问题。
例如,要获取 ID 为员工的信息,我们使用 uri
,如下所示
http://myapp-name.myorganization.com/employees/employeeid/123456
但以上所有资源都告诉我这样做
http://myapp-name.myorganization.com/employees/123456
同样,如果我想获取有关 ID 为 12345 的员工的信息,我的 uri 如下
http://myapp-name.myorganization.com/countries/country/US/employeeid/12345
相对于
http://myapp-name.myorganization.com/countries/US/12345
这是否意味着我的 uri 不标准?
它们只是指南。您无法在一份 Rest 文档中涵盖您的业务和必需品的所有可能性。
谈到你的例子,
http://myapp-name.myorganization.com/employees/employeeid/123456
和
http://myapp-name.myorganization.com/employees/123456
都正确。但可能会更好(更短)。
通常我更喜欢第二个并且使用第一个作为备选方案。例如,如果我想通过 id("default" 方法来查找员工)或他唯一的公司内部代码来查找员工,我更愿意分别使用:
/employees/123456 # by id
/employees/code/A899123A # by code
Similarly if i want go get information about employee with id 12345, my uri is as below http://myapp-name.myorganization.com/countries/country/US/employeeid/12345
这 URL 对我来说意味着你试图在美国国家/地区找到 ID 为 12345 的员工。但如果 US
项是在 API:
/countries/US/employees/12345
as opposed to http://myapp-name.myorganization.com/countries/US/12345
这个看起来很混乱。您是否要查找 ID 为 12345 的内容?仅查找 URL 很难回答。所以,/countries/US/employees/12345
更一致。
如果想法是使用某些代码在某个国家/地区找到员工,URL 可以遵循相同的模式:/countries/US/employees/code/A899123A
Does that my uri are not standard?
不,您的 URI 没问题。 REST 不关心您使用什么拼写来表示您的标识符,只要它们与描述“最佳实践”的 RFC 3986. There's also RFC 7320 一致——但您可能会发现那些最佳实践仍然会给您留下很多自由。
想想“变量名”——不同的社区对于变量名的拼写有自己的约定,但没有任何标准。
REST 中的标识符也是如此——它们是不透明的字符串,API 消费者和客户端实际上都不需要解析。 (示例:您最后一次实际查看在向 Google 提交搜索时使用的 URI 是什么时候?)
如果您遵守特定约定,某些路由框架会更易于使用,但这纯粹是服务器上的实现细节,客户端并不关心。