35

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

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

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

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

我在网上做了一些研究,但是缺少有关如何做到这一点的详细信息。它是否只涉及编写详尽的规范/文档,还是有一些技术步骤可以实施?(我不需要向 IANA 注册,对吗?)

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

4

3 回答 3

26

@约翰多多

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

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

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

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

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

  1. 描述它(即编写格式规范);
  2. 向 IANA 注册:http : //www.iana.org/cgi-bin/mediatypes.pl 在 vnd.* 树下注册媒体类型需要将近一周的时间来注册。
于 2013-02-12T15:19:59.710 回答
4

通过三个简单的步骤查看RESTful 超媒体 API

您的媒体类型应该描述数据类型,但我不会使用 XML 模式来描述。如果您使用 XML 模式,我强烈建议您使用松散版本控制策略,否则您会发现每次要添加新元素或属性时都需要新的媒体类型。

于 2013-02-04T21:57:41.660 回答
2

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

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

如何创建新的 - 功能齐全的 - 应用程序/vnd 媒体类型?以及您需要注意什么才能让客户正确使用它?(http://www.ietf.org/rfc/rfc2046.txt?number=2046

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

于 2013-02-11T17:02:13.443 回答