REST服务:格式化请求与响应的最佳做法是什么?
问题描述:
具体而言,情况如下:请求可以包含一个以Content-Type
标头中指定的格式格式化的主体(POST或PUT) - 例如application/json
。但是,URI包含格式命中格式不同(例如?_format=xml
或resource_uri.xml
),它通常用于表示响应格式。我在这里看到的三种可能的解决方案:REST服务:格式化请求与响应的最佳做法是什么?
- 请求的
Content-Type
被忽略,请求体被解析,如果是由URI表示的格式。 - 将忽略URI标记,并假定请求和响应的格式如
Content-Type
所定义。 - 请求正文根据
Content-Type
进行解析,响应的格式如URI所暗示。
就我个人而言,我喜欢第3种方法,但对格式的差异有点担心。这里通常的做法是什么?以不同的格式提出请求和响应是否可以接受?如果不是,我宁愿方法#1,而#2似乎完全关闭和不直观。这里有什么建议?
答
方法#3是三种方法中唯一的一种,也允许请求和响应采用不同的格式。这是一件好事,因为请求通常是一种固定格式,而响应可以以客户喜欢的任何支持格式呈现。
方法#1明显滥用HTTP,绝不应该看到白天的光芒。
方法#2也很糟糕,因为有一个不同的标头,表示客户期望的响应格式:Accept
。简而言之,您可以按照HTTP预期的方式(使用标头Accept
)执行此操作,或者通过允许在URL中内联指定格式来为客户端提供一些便利。您也可以同时执行这两个操作(如果Accept
标头指定了一种格式,则使用该格式,否则请检查该URL)。
答
方法#3是好的,我会说你可以依靠Accept
头来确定响应格式。这样,Content-Type
标题设置请求格式,并且Accept
标题或_format
查询参数设置响应格式。