在REST中,如何发现可接受的媒体类型?

时间:2014-11-19 07:33:57

标签: web-services rest asp.net-web-api hateoas

给出REST api。 我想了解我可以在Accept标头中设置的媒体类型。 我该怎么办?

我知道我可以做一个随机的

GET http://some.api.com/
Accept:flying/elephants

并希望406的主体具有正确的可接受媒体类型。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

理论上,API可以通过HTTP OPTIONS

指示支持的内容类型

通常,API提供

  1. 文档
  2. 支持的Accept的特定资源 - 标头值。
  3. 另外(您可能知道),Accept - 标头值通常绑定到IANA defined MIME types

答案 1 :(得分:1)

此问题的一个问题是API中的任何URI都可以使用不同的媒体类型进行响应。在API中使用不同的端点返回不同的内容类型是很常见的。

您可以使用多个通配符请求来探测支持。

您可以从Accept: */*开始,然后application/* text/* */json */xml等。您会收到一份非详尽的清单,但您会收到大的和优先的。

还有其他奇怪的边缘情况。例如,OData允许您在URL中指定$ format参数以定义响应类型。这会覆盖接受标头。因此,每种格式都是它自己的URI。

如果API更多地使用备用链接关系(http://www.w3.org/TR/html5/links.html#rel-alternate)会很酷,我认为这是最合适的。结合链接的type属性,可以让您了解所检索的任何资源的所有格式。同样,它将特定于每个URI。