【问题标题】:Vendor MIME types (for API versioning)供应商 MIME 类型(用于 API 版本控制)
【发布时间】:2013-09-28 23:31:32
【问题描述】:

我已经阅读了许多关于版本控制 RESTful 服务的 Stack Overflow(和其他)帖子。 老实说,这有点压倒性。

我决定为我们的(勉强)RESTful 服务使用 Accept: 标头,以便客户端可以请求特定版本的资源。我不清楚的是在 Accept 标头中指定什么。

我经常看到的例子是这样的:

Accept: application/vnd.mycompany.myapp.customer-v2+json

我的问题是:

  1. 必须注册所有 vnd 类型是否正确? (http://www.iana.org/cgi-bin/mediatypes.pl)

  2. 版本和类型(即 -v2+json)是否是类型的一部分,因此每个版本和类型都需要注册?

  3. 是否有任何理由使用 vnd 而不是不需要注册的“x-”子类型?例如:

    Accept: application/x-mycompany.myapp-v2+json
    

    现有 API 仅供内部使用,但将来会向客户公开。

  4. 不确定这是否有意义,但是否可以使用现有类型但添加版本? (当前API返回“application/json”)

    Accept: application/json-v2
    
  5. 附加版本和类型的可接受格式(例如 -v2+json)。

  6. 如果客户要求提供不受支持的版本怎么办?正确的响应是 406 吗?客户可以要求任何版本吗?或者更一般地说,如果客户端没有提供 Accept 标头或 Accept: */* 怎么办?

欢迎提出任何其他建议。当然,目标是允许更改服务为给定资源返回的内容,但不会破坏现有客户端。

以下是我最近查看的资源的简短列表:

【问题讨论】:

  • x- 前缀已​​被弃用。如果它仍在使用中,您实际上需要两者。 “vnd”。是供应商前缀。它仍然有效,并且在使用特定于供应商的 mime 类型时应始终使用。

标签: mime-types rest


【解决方案1】:

由于我决定遵循jsonapi.org 标准,因此我决定按照您的示例进行操作。

关于您的问题:

  1. 应该注册您的 MIME 类型
  2. 我认为每个版本和类型都应该注册,因为它们是唯一的类型
  3. x- 前缀已被弃用,如评论中所述
  4. application/json-v2 无效
  5. 您可以返回415 Unsupported Media Type 或直接返回400 Bad Request

【讨论】:

  • 你考虑过类似application/vnd.mycompany.myapp.customer+json; version=2.0
  • 415 表示请求负载的格式不受服务器支持。 406 更适合 OP 的需要。
  • 为了清楚第 1 点:建议注册它,但这不是严格要求。见stackoverflow.com/questions/29121241/…
猜你喜欢
  • 1970-01-01
  • 2012-10-13
  • 2011-06-12
  • 2013-12-09
  • 2018-06-03
  • 2012-02-27
  • 2014-05-21
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多