39

我已经阅读了许多关于版本控制 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: */* 怎么办?

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

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

4

1 回答 1

4

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

关于你的问题:

  1. 您的 MIME 类型应已注册
  2. 我相信每个版本和类型都应该注册,因为它们是唯一的类型
  3. x-如评论中所述,前缀已被弃用
  4. application/json-v2无效
  5. 你可以返回415 Unsupported Media Type或干脆400 Bad Request
于 2014-07-22T14:27:49.477 回答