Статьи

Конечные точки Easy REST с Apache Camel 2.14

Apache Camel имеет новый релиз недавно , и некоторые из новых функций были писали о моем коллеге Клаус Ибсен . Вы действительно должны проверить его запись в блоге и углубиться в детали, но одной из функций, которые я с нетерпением ждал, был новый REST DSL .

Так что же это за новый DSL?

На самом деле, это расширение для DSL маршрутизации Camel , который является мощным доменным языком для декларативного описания интеграционных потоков и доступен во многих вариантах . Это довольно круто и является отличительной чертой между библиотеками интеграции. Если вы не видели DSL Camel, вы должны проверить его. Я упоминал, что DSL Camel — это круто?

Хорошо … вернемся к истории REST здесь …

До выпуска 2.14 создание конечных точек отдыха подразумевало использование camel-cxfrs, что может быть затруднительно для нового пользователя, просто пытающегося предоставить простую конечную точку REST. На самом деле, это очень мощный подход к разработке REST-контракта, но я оставлю это для следующего поста в блоге. Однако в предыдущем посте я углубился в использование camel-cxfrs для конечных точек REST, чтобы вы могли проверить это.

В версии 2.14 DSL был расширен, чтобы упростить создание конечных точек REST. Например:

        rest("/user").description("User rest service")
            .consumes("application/json").produces("application/json")

            .get("/{id}").description("Find user by id").outType(User.class)
                .to("bean:userService?method=getUser(${header.id})")

            .put().description("Updates or create a user").type(User.class)
                .to("bean:userService?method=updateUser")

            .get("/findAll").description("Find all users").outTypeList(User.class)
                .to("bean:userService?method=listUsers");

В этом примере мы видим, что мы используем DSL для определения конечных точек REST, и это понятно, интуитивно понятно и понятно.

Все, что вам нужно сделать, это настроить движок REST с помощью этой строки:

        restConfiguration().component("jetty")
            .bindingMode(RestBindingMode.json)
            .dataFormatProperty("prettyPrint", "true")
            .port(8080);

Или это в вашем весеннем контексте XML:

<camelContext>
  ...
  <restConfiguration bindingMode="auto" component="jetty" port="8080"/>  
  ...
</camelContext>

Крутая часть заключается в том, что вы можете использовать несколько механизмов HTTP / сервлетов с таким подходом, в том числе стиль микросервисов со встроенным причалом ( camel-jetty ) или через существующий контейнер сервлета ( camel-servlet ). Посмотрите документацию REST DSL для полного набора компонентов HTTP / сервлетов, которые вы можете использовать с этим DSL.

Наконец, некоторые могут спросить, как насчет документирования конечной точки REST? Например, WADL?
К счастью, новый REST DSL интегрирован из коробки с потрясающей библиотекой Swagger и механизмом документирования REST ! Таким образом, вы можете автоматически задокументировать ваши конечные точки REST и сгенерировать для вас документацию / интерфейс / спецификацию! Взгляните на документацию по верблюжьему чучелу и camel-example-servlet-rest-tomcatпример, поставляемый с дистрибутивом, чтобы узнать больше.

Попробуйте и дайте нам знать (список рассылки Camel, комментарии, stackoverflow, как-то !!!), как это работает для вас.