我想用请求标题'Accept'
处理资源的差异版本===>
GET /customer/123 HTTP/1.1
Accept: application/vnd.company.myapp.customer-v3+json
<===
HTTP/1.1 200 OK
Content-Type: application/vnd.company.myapp-v3+json
{"customer":
{"name":"Neil Armstrong"}
}
我想阅读Accept标头,提取版本并使用此版本初始化序列化程序!
这可以使用FOSRestBundle吗?
我知道我可以监听kernel.request,检查'Accept'标题并从MIME类型中提取所请求的版本,但我不知道如何使用此值设置序列化程序...
我还阅读了FOSRestBundle文档,我知道你可以在config中添加新的mime类型:
view.mime_types: {'json': ['application/vnd.company.myapp.customer-v1+xml', 'application/vnd.company.myapp.customer-v2+xml']}
我需要在这里添加所有可能的mime类型(使用不同的版本)?
任何帮助将不胜感激!
答案 0 :(得分:0)
这暂时无法帮助您,但有关API版本控制的问题已经解决。 https://github.com/FriendsOfSymfony/FOSRestBundle/pull/632
答案 1 :(得分:0)
现在可以了,请参阅the documentation。
你的config.yml文件看起来像这样(使用你喜欢的任何正则表达式)。
fos_rest:
versioning:
enabled: true
resolvers:
media_type: # Accept header
enabled: true
regex: '/v(?P<version>[0-9\.]+)\+(json|xml)/'
guessing_order:
- media_type # Not needed if there's only one
format_listener: # Must enable format_listener for versioning in Accept headers
enabled: true
rules: # Catch all routes to use this rule
- { path: '*', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: false }
view:
mime_types: # If there are lots of versions, can make this more dynamic. Check docs.
json: ['application/vnd.company.myapp.customer-v1+xml', 'application/vnd.company.myapp.customer-v2+xml', 'application/vnd.company.myapp.customer-v3+json']