在 Symfony2 和 FOSRestBundle 制作的 REST api 中使用 Accept header 的正确方法
Proper way to use Accept header in a REST api made with Symfony2 and FOSRestBundle
我正在尝试使我的 Web 服务 return 在使用接受 header 发送时采用正确的格式。例如,如果我发送 'Accept: application/xml',它应该 return 格式为 xml,如果我发送 'Accept: application/json',它应该 return 格式为 json .
如果我放置扩展名,这会很好用。 http://example.com/api/users.json returns json, and http://example.com/api/users.xml returns XML。但如果我不放扩展名,它 return 总是 json,完全忽略接受 header。
我如何设置它,使其在没有扩展名的情况下,return接受 header 上的任何要求?
我的配置文件:
fos_rest:
format_listener: true
routing_loader:
default_format: json
view:
view_response_listener: 'force'
formats:
json: true
xml: true
templating_formats:
html: true
serializer:
serialize_null: true
sensio_framework_extra:
view: { annotations: false }
router: { annotations: true }
也试过这个:
format_listener:
rules:
- prefer_extension: false
结果出错:
找不到模板"WhateverBundle:Users:getUsers.html.twig"
我能够用这个做我想做的事:
fos_rest:
format_listener:
rules:
- priorities: [ json, xml, html ]
- prefer_extension: false
routing_loader:
default_format: json
view:
view_response_listener: 'force'
formats:
json: true
xml: true
templating_formats:
html: true
serializer:
serialize_null: true
出于某种原因,仅在 format_listener 中配置 prefer_extension 是不够的。
我正在尝试使我的 Web 服务 return 在使用接受 header 发送时采用正确的格式。例如,如果我发送 'Accept: application/xml',它应该 return 格式为 xml,如果我发送 'Accept: application/json',它应该 return 格式为 json .
如果我放置扩展名,这会很好用。 http://example.com/api/users.json returns json, and http://example.com/api/users.xml returns XML。但如果我不放扩展名,它 return 总是 json,完全忽略接受 header。
我如何设置它,使其在没有扩展名的情况下,return接受 header 上的任何要求?
我的配置文件:
fos_rest:
format_listener: true
routing_loader:
default_format: json
view:
view_response_listener: 'force'
formats:
json: true
xml: true
templating_formats:
html: true
serializer:
serialize_null: true
sensio_framework_extra:
view: { annotations: false }
router: { annotations: true }
也试过这个:
format_listener:
rules:
- prefer_extension: false
结果出错:
找不到模板"WhateverBundle:Users:getUsers.html.twig"
我能够用这个做我想做的事:
fos_rest:
format_listener:
rules:
- priorities: [ json, xml, html ]
- prefer_extension: false
routing_loader:
default_format: json
view:
view_response_listener: 'force'
formats:
json: true
xml: true
templating_formats:
html: true
serializer:
serialize_null: true
出于某种原因,仅在 format_listener 中配置 prefer_extension 是不够的。