如果我想遵循为我的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
答案 0 :(得分:1)
描述每个数据的内容类型似乎是最安全的解决方案。如果由于某些原因您希望稍后符合HATEOAS,则会更容易。另一方面,为所有内容提供一种内容类型没有多大意义。内容类型描述特定数据的类型。
关于版本控制,您可以通过三种不同的方式向API添加版本控制。首先,您可以在URI中添加版本号,这是一种简单的方法:
/api/v1/users
或者您可以使用新的内容类型:
application/vnd.acme.user-v1+xml
或者您也可以在Accept标头中使用限定符,这样就不会触及您的内容类型:
application/vnd.acme.user+xml;v=1
这完全取决于你。第一种解决方案比其他两种解决方案更简单但更少RESTful。但这些解决方案需要更多智能客户端。