Answers:
您所谓的单个 REST API可能称为REST API的特定资源集或资源。您也可以将其视为REST API的功能。像任何类型的软件一样,整个程序包都是版本化/更新的,而不是单个功能或资源。
在REST API包的资源是模块化的,因此有可能单独开发和版本化的情况下,您的问题会很有意义。
然后,据我所知,建议的资源定位器命名约定的主要缺点是:
构建API时,您的主要目标之一就是使其易于使用...
您可能会找到一种更好的方法来引入重大更改,甚至用HTTP标头对REST API进行版本控制?
要了解有关HTTP标头方法的更多信息,请参见下面的其他答案:https : //www.troyhunt.com/your-api-versioning-is-wrong-which-is/
这是一种更好的方法:使用内容协商使用Content-Type
和Accept
标头对API进行版本控制:
POST /api/accounts
Accept: application/vnd.my-api.account.v1+json
201 Created
Location: /api/accounts/285728
Content-Type: application/vnd.my-api.account.v1+json
{ ... account data here ... }
要获得其他版本,只需在中要求使用其他内容类型Accept
。这样,服务器支持的特定版本完全独立于URL结构。只需根据Accept
标头选择要响应的版本,同一台服务器就可以支持多个版本。或者,如果您要坚持针对不同版本的不同部署,则可以在服务的不同版本之前放置一个代理,该代理根据Accept
标头选择将请求转发给哪个。
这也使您可以在同一端点上支持具有不同语义(不仅是不同版本)的新格式。例如,发布一个帐户列表/api/accounts
可能意味着要创建批处理,而您无需为其构建单独的API端点。
vnd
部分和+
语法的用途:表明这是该application/json
类型的特定于供应商的子类型。这正是内容类型设计的目的。您的资源有多种格式。您要让客户选择他们想要的格式。此外,没有任何理由API请求不能使用标准的HTTP缓存语义。