如何为RESTful Web服务创建自定义媒体类型(application / vnd)?

时间:2013-02-04 11:19:30

标签: rest media restful-architecture hateoas hypermedia

我现在正在玩REST,并认为我正确实施HATEOAS只是为了让所有概念都正确。

为此,我想创建自己的媒体类型(application/vnd[...]+xmlapplication/vnd[...]+json)。

第一个问题:媒体类型是否定义了我的服务器和客户端之间的合同?

媒体类型将定义我的消息格式,因此我需要添加XML模式和JSON模式以配合新的媒体类型(以便REST客户端知道消息中的内容以及要发回的内容)。

我已经在网上做过一些研究,但缺少一个人如何做到这一点的细节。它是否只涉及编写详尽的规范/文档或是否有一些技术步骤来实现? (我不需要在IANA注册吗?)

如何创建新的 - 功能齐全的application/vnd媒体类型?你需要注意什么才能让客户正确使用它?

3 个答案:

答案 0 :(得分:26)

@JohnDoDo

  

第一个问题:媒体类型是否定义了我的服务器和客户端之间的合同?

是的,媒体类型是合同的一部分。与SOAP(即WSDL)不同,REST API中的契约不是静态的。合同由底层协议(即HTTP),URI和媒体类型的组合定义(不禁止一起使用多种媒体类型)。媒体类型定义数据模型,处理模型,超媒体控件(即带注释的链接,输入表单等等),并支持包含由链接关系,元素名称,ID,类名等描述的其他特定于应用程序的信息......

  

媒体类型将定义我的消息格式,因此我需要添加XML模式和JSON模式以配合新的媒体类型(以便REST客户端知道消息中的内容以及要发回的内容)。

您只需要定义涵盖文档结构的通用模式。您不需要为特定消息定义单独的模式。您的消息必须位于媒体类型定义的结构中。

  

如何创建一个全新功能的应用程序/ vnd媒体类型?你需要注意什么才能让客户正确使用它?

  1. 描述它(即写入格式规范);
  2. 向IANA注册:http://www.iana.org/cgi-bin/mediatypes.pl在vnd。*树下注册媒体类型需要将近一周的时间进行注册。

答案 1 :(得分:4)

查看A RESTful Hypermedia API in Three Easy Steps

您的媒体类型应描述数据类型,但我不会使用XML架构。如果您使用XML架构,我强烈建议您使用Loose versioning strategy,否则每次要添加新元素或属性时都会发现需要新的媒体类型。

答案 2 :(得分:2)

  

媒体类型是否定义了我的服务器和客户端之间的合同?

不,媒体类型只定义数据的类型(例如应用程序)和子类型(例如json)

  

如何创建一个全新功能的应用程序/ vnd媒体类型?你需要照顾什么才能让客户正确使用它? (http://www.ietf.org/rfc/rfc2046.txt?number=2046

如果您决定创建自己的自定义媒体子类型并希望它被广泛使用,则应在IANA(http://www.iana.org/assignments/media-types)注册。 这是与潜在客户共享带外信息的标准方式。