Symfony2 中的供应商 MIME 类型和 API 版本控制与 FOSRestBundle 和 JMSSeriali



我想使用请求标头"接受"处理资源的不同版本

===>
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,检查"接受"标头并从 MIME 类型中提取请求的版本,但我不知道如何使用此值设置序列化程序......

我还阅读了 FOSRestBundle 文档,我知道您可以在配置中添加新的 mime 类型:

view.mime_types: {'json': ['application/vnd.company.myapp.customer-v1+xml', 'application/vnd.company.myapp.customer-v2+xml']}

我需要在这里添加所有可能的 MIME 类型(具有不同的版本)?

任何帮助将不胜感激!

这暂时不会帮助你,但存在有关 API 版本控制的开放问题。https://github.com/FriendsOfSymfony/FOSRestBundle/pull/632

现在可以这样做,请参阅文档。

您的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']

最新更新