REST服务:格式化请求与响应的最佳做法是什么?

问题描述:

具体而言,情况如下:请求可以包含一个以Content-Type标头中指定的格式格式化的主体(POST或PUT) - 例如application/json。但是,URI包含格式命中格式不同(例如?_format=xmlresource_uri.xml),它通常用于表示响应格式。我在这里看到的三种可能的解决方案:REST服务:格式化请求与响应的最佳做法是什么?

  1. 请求的Content-Type被忽略,请求体被解析,如果是由URI表示的格式。
  2. 将忽略URI标记,并假定请求和响应的格式如Content-Type所定义。
  3. 请求正文根据Content-Type进行解析,响应的格式如URI所暗示。

就我个人而言,我喜欢第3种方法,但对格式的差异有点担心。这里通常的做法是什么?以不同的格式提出请求和响应是否可以接受?如果不是,我宁愿方法#1,而#2似乎完全关闭和不直观。这里有什么建议?

方法#3是三种方法中唯一的一种,也允许请求和响应采用不同的格式。这是一件好事,因为请求通常是一种固定格式,而响应可以以客户喜欢的任何支持格式呈现。

方法#1明显滥用HTTP,绝不应​​该看到白天的光芒。

方法#2也很糟糕,因为有一个不同的标头,表示客户期望的响应格式:Accept。简而言之,您可以按照HTTP预期的方式(使用标头Accept)执行此操作,或者通过允许在URL中内联指定格式来为客户端提供一些便利。您也可以同时执行这两个操作(如果Accept标头指定了一种格式,则使用该格式,否则请检查该URL)。

方法#3是好的,我会说你可以依靠Accept头来确定响应格式。这样,Content-Type标题设置请求格式,并且Accept标题或_format查询参数设置响应格式。