对于REST请求,将协商哪种`format`?

时间:2018-03-19 12:46:05

标签: django rest django-rest-framework

格式选择有三种变体:

curl -uadmin:admin "http://localhost:8080/alfresco/service/hellouser.json"
curl -uadmin:admin "http://localhost:8080/alfresco/service/hellouser?format=json"
curl -uadmin:admin -H "Accept: text/html" "http://localhost:8080/alfresco/service/hellouser"

但是DOC从下一个查询中选择的格式是不清楚的:

curl -uadmin:admin -H "Accept: text/html" "http://localhost:8080/alfresco/service/hellouser.xml?format=json"

我希望json在这里 有人可以提供相关规范或文档的链接,其中描述了优先级 {格式}如何协商?像Rails

这样描述
  

Rails从查询参数格式中选择预期的格式,如果没有从URL路径后缀中获取,或者从Accept头中没有

UPD
控制器可以处理所有提供的格式:jsonxmlhtml

UPD
另一个角落案例:

curl -uadmin:admin "http://localhost:8080/alfresco/service/hellouser.pl?format=json"
curl -uadmin:admin "http://localhost:8080/alfresco/service/hellouser.pl?format=xml"

1 个答案:

答案 0 :(得分:2)

我相信你不会有200回复​​,只有内容协商错误。

代码显示:

    {li> ?format=jsonformat_query_param.xmlformat_suffixdiscarded
  1. filter available renderers只留下XMLRenderer
  2. 然后它将loop on the accept header,但没有一个匹配text/html
  3. 最后这将归结为exception