Rest 供应商MIME类型(用于API版本控制)

Rest 供应商MIME类型(用于API版本控制),rest,mime-types,restapi,Rest,Mime Types,Restapi,我读过许多关于RESTful服务版本控制的堆栈溢出(和其他)文章。 老实说,这有点难以承受 我决定为我们的(略微)RESTful服务使用Accept:header,这样客户机就可以请求特定版本的资源。我不清楚的是在Accept头中指定什么 我经常看到的例子是: Accept: application/vnd.mycompany.myapp.customer-v2+json 我的问题是: 所有vnd类型都必须注册,对吗?() 版本和类型(即-v2+json)是类型的一部分,因此每个版本和类型都需

我读过许多关于RESTful服务版本控制的堆栈溢出(和其他)文章。 老实说,这有点难以承受

我决定为我们的(略微)RESTful服务使用Accept:header,这样客户机就可以请求特定版本的资源。我不清楚的是在Accept头中指定什么

我经常看到的例子是:

Accept: application/vnd.mycompany.myapp.customer-v2+json
我的问题是:

  • 所有vnd类型都必须注册,对吗?()

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

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

    Accept: application/x-mycompany.myapp-v2+json
    
    现有的API只是内部的,但将来它将向客户公开

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

  • 附加版本和类型的可接受格式是什么(例如,-v2+json)

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

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

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


    由于我已决定遵循该标准,因此我决定按照您的示例所示进行操作

    关于你的问题:

  • 应该注册MIME类型
  • 我认为每个版本和类型都应该注册,因为它们是唯一的类型
  • x-
    前缀已被弃用,如注释中所述
  • 应用程序/json-v2
    将无效
  • 您可以返回
    415不支持的媒体类型
    ,或者简单地返回
    400错误请求

  • x前缀已被弃用。如果它仍在使用中,您实际上需要两者。“vnd.”是供应商前缀。它仍然是有效的,并且在使用特定于供应商的MIME类型时应该总是使用。您是否考虑过诸如“代码>应用程序/VND.MyCopy.MyApp.Cuth+JSON之类的东西?version=2.0表示请求有效负载的格式不受服务器支持。更好地满足OP的需要。为了明确第1点:建议注册,但并不严格要求注册。看见
    Accept: application/json-v2