【问题标题】:How to support media type versioning using Camel Rest DSL如何使用 Camel Rest DSL 支持媒体类型版本控制
【发布时间】:2017-03-01 01:42:52
【问题描述】:

我正在寻找在使用媒体类型版本控制我的 REST API 版本时使用 Camel Rest DSL 的解决方案。请参阅https://www.narwhl.com/2015/03/the-ultimate-solution-to-versioning-rest-apis-content-negotiation/ 了解我想要完成的工作的详细信息。

例如,如果我有两个版本的 Store 对象(V1_0 和 V2_0)。

.post('/').description('Create a new store').type(Store_V1_0).outType(Store_V1_0)
    .consumes('application/x.canopy.store+json; version=1.0, application/x.canopy.store+json; version=2.0')
    .produces('application/x.canopy.store+json; version=1.0, application/x.canopy.store+json; version=2.0' )
    .param().name('body').type(body).description('The store to create').endParam()
    .route()
        .to('log:com.acme.api.store?level=INFO&showHeaders=true')
    .endRest()

请注意,我在“consumes”/“produces”中指定了多种媒体类型。但是,我仅限于“type”/“outType”中的单个类。

如果我尝试多行“post('/')”,我会收到“rest-dsl 中检测到重复动词”错误。有没有办法可以将媒体类型绑定到 POJO?

欢迎任何有关如何使用媒体类型处理我的 REST API 版本控制的建议。

编辑:我也在尝试为 Swagger 生成规范,并希望能够根据所选的内容类型在 Swagger UI 中看到不同的“示例值”。

【问题讨论】:

    标签: rest apache-camel


    【解决方案1】:

    consumesproducestypeoutType 仅对生成 swagger 规范有用。您可以在您的休息定义中的 route() 指令之后接受/解组、处理和封送回您想要的任何格式:

    类似的东西:

    .post('/').description('Create a new store')
        .param().name('body').type(body).description('The store to create').endParam()
        .route()
            .to('log:com.acme.api.store?level=INFO&showHeaders=true')
            .choice()
              .when(header(Exchange.CONTENT_TYPE).isEqualTo("application/x.canopy.store+json; version=1.0"))
                .unmarshal(Store_V1_0)
                .process(v1Processor)
              .when(header(Exchange.CONTENT_TYPE).isEqualTo("application/x.canopy.store+json; version=1.2"))
                .unmarshal(Store_V2_0)
                .process(v2Processor)
            .end()
            .process(doSomethingElse)
            .marshal().json()
        .endRest()
    

    【讨论】:

    • 我会修改我的问题,因为我应该包括我也在尝试为 Swagger UI 生成规范。我希望能够根据所选的内容类型在 Swagger UI 中看到不同的“示例值”。你肯定帮助我解决了我的部分问题。 Swagger 方面的任何其他帮助将不胜感激!
    • 看来我应该更仔细地阅读 Swagger 2.0 规范。我试图实现的目标尚未得到支持,但似乎它将在 2.1 中。 github.com/OAI/OpenAPI-Specification/issues/146 将接受 Strelok 的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2021-12-21
    • 2015-10-25
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多