在REST中,为每个资源表示创建单个内容类型或具有单独的内容类型?

时间:2012-08-11 22:42:02

标签: rest

如果我想遵循为我的REST API使用自定义内容类型的做法,我应该为我的整个项目定义一个自定义内容类型,或者为每个资源表示定义自定义内容类型(发送到/的内容)从我的REST API返回)在我的项目上使用?

也就是说,如果我正在构建一个“Bookstore”REST API,其中服务说它位于命名空间com.mycompany.mybookstoreapp中,我是否要创建单个内容类型:

Content-Type: application/com.mycompany.mybookstoreapp+xml

或者我是否可以为可以通过我的Bookstore REST API发布/检索的每种数据类型创建内容类型?

Content-Type: application/com.mycompany.mybookstoreapp.user+xml
Content-Type: application/com.mycompany.mybookstoreapp.order+xml
Content-Type: application/com.mycompany.mybookstoreapp.book+xml

1 个答案:

答案 0 :(得分:1)

描述每个数据的内容类型似乎是最安全的解决方案。如果由于某些原因您希望稍后符合HATEOAS,则会更容易。另一方面,为所有内容提供一种内容类型没有多大意义。内容类型描述特定数据的类型。

关于版本控制,您可以通过三种不同的方式向API添加版本控制。首先,您可以在URI中添加版本号,这是一种简单的方法:

/api/v1/users

或者您可以使用新的内容类型:

application/vnd.acme.user-v1+xml

或者您也可以在Accept标头中使用限定符,这样就不会触及您的内容类型:

application/vnd.acme.user+xml;v=1

这完全取决于你。第一种解决方案比其他两种解决方案更简单但更少RESTful。但这些解决方案需要更多智能客户端。