供应商MIME类型和API版本控制在Symfony2中,使用FOSRestBundle和JMSSerializerBundle

供应商MIME类型和API版本控制在Symfony2中,使用FOSRestBundle和JMSSerializerBundle,symfony,fosrestbundle,jmsserializerbundle,Symfony,Fosrestbundle,Jmsserializerbundle,我想处理请求头为“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”的资源的不同版本

===>
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"}
}
我需要在这里添加所有可能的mime类型(不同版本)


任何帮助都将不胜感激

这暂时对您没有帮助,但是在API版本控制方面存在一些公开的问题。

现在这是可能的,请参阅

您的config.yml文件看起来像这样(使用您想要的任何正则表达式)

fos\u rest:
版本控制:
已启用:true
解析程序:
媒体类型:#接受标题
已启用:true
正则表达式:'/v(?P[0-9\.]+)\+(json | xml)/'
猜测顺序:
-媒体类型#如果只有一种,则不需要
format_listener:#必须在Accept标头中启用format_listener进行版本控制
已启用:true
规则:#捕获所有路由以使用此规则
-{path:'*',优先级:['json',xml'],回退\格式:json,首选\扩展名:false}
视图:
mime_类型:#如果有很多版本,可以使其更加动态。检查文档。
json:['application/vnd.company.myapp.customer-v1+xml','application/vnd.company.myapp.customer-v2+xml','application/vnd.company.myapp.customer-v3+json']
view.mime_types: {'json': ['application/vnd.company.myapp.customer-v1+xml', 'application/vnd.company.myapp.customer-v2+xml']}
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']