为RESTAPI版本控制创建我自己的自定义头

为RESTAPI版本控制创建我自己的自定义头,api,rest,header,Api,Rest,Header,我正在重新设计我上个世纪的应用程序(请注意,它工作得很好),而重新开始的机会让我调查了几个方面。这个问题是重复的。版本控制 该应用程序实际上是交付资源的数据应用程序的集合——查询是http,响应是JSON。现在我想改变其中一个回答。在仔细阅读之后,我决定不通过URI或查询字符串实现版本控制。相反,正如中所建议的,特别是第二个答案(Stackoverflow上没有链接到特定答案的方法吗?),我使用的是标题。但是,我使用的不是Accept:application/vnd.company.myapp.

我正在重新设计我上个世纪的应用程序(请注意,它工作得很好),而重新开始的机会让我调查了几个方面。这个问题是重复的。版本控制

该应用程序实际上是交付资源的数据应用程序的集合——查询是http,响应是JSON。现在我想改变其中一个回答。在仔细阅读之后,我决定通过URI或
查询字符串
实现版本控制。相反,正如中所建议的,特别是第二个答案(Stackoverflow上没有链接到特定答案的方法吗?),我使用的是标题。但是,我使用的不是
Accept:application/vnd.company.myapp.customer-v3+json

Accept: application/json
X-Requested-With:   XMLHttpRequest
X-Version:  2
在服务器端,我可以检查
X-Version
的值。如果不存在,查询将使用最新的API。如果
X-Version
确实存在,则使用请求版本。以上方法很好

我的问题是,有什么我应该注意的地方吗?尤其是,自从我把这个
X版
从屁股里拿出来。据我所知,这不是官方认可的头球

更新:拖动!甚至在发布这篇文章之前,我已经读过了,似乎我不应该使用
X-
前缀。然而,除非我首先进行尽职调查,否则我自己制作的标题有可能与现有标准相冲突。想法?

关于“正确”的方法有很多争论。要了解一些高层次的想法,请查看mnot的:

要进行非常深入的讨论,请查看API Craft的以下帖子:


就我个人而言,我倾向于结合媒体类型版本控制和链接关系版本控制来实现这一点。

我更喜欢自定义标题,尤其是在当前的反向代理趋势下,应用程序版本之间使用微服务和流量管理

X-App: <app_name>:<app_version>
X-App::

您为什么决定不使用媒体类型版本控制?你的X版本(或MyCompany版本)属于什么“范围”?老实说,我没有使用媒体类型版本控制,因为我不知道它是什么以及为什么我应该使用它。我不能回答第二个问题,因为我不理解问题背景下“范围”的含义。也许你是指
X-Version
所指的内容。具体来说,它指的是被请求的资源。换句话说,查询是说,“使用API版本2(仅适用于此资源)获取此URI末尾的资源。”换句话说,其他资源可以继续使用各自的API版本。非常好的阅读,您提供的链接。然而,我仍然需要一些澄清。示例:我有一个URI,返回iOS应用程序已经使用的JSON。现在我想更改返回的JSON的结构,但我不希望现有的应用程序(安装在上帝知道有多少台设备上)崩溃。使用
X-Version
。URI不会改变,但不同版本的应用程序可以获得正确的数据。此外,由于版本控制是按URI进行的,因此应用程序可以使用不同版本的URI。媒体类型和链接关系版本控制如何适应这种情况?您是否试图对格式进行突破性的更改?或者一个额外的?在这种情况下,变化可能不会破坏任何东西,但这是我的猜测。只有应用程序开发人员才能确定。我确实打算遵循,但我必须制定可持续的API设计原则。我无法猜测我的更改是否会破坏其他人的应用程序。我能做的就是提供某种版本控制,这样他们就可以选择使用他们想要的任何版本。