Рубрики
Без рубрики

Пример: Служба ОТДЫХА с Apache Camel

Автор оригинала: Scott Robinson.

Учитывая крайнюю распространенность мобильных приложений, веб-приложений и настольных приложений, службы REST как никогда важны для предоставления данных своим пользователям. Эти данные могут быть использованы для собственного приложения или для сторонних разработчиков для расширения охвата вашего сервиса другими приложениями. В любом случае, сервис REST должен быть простым в использовании и легко модифицироваться, чтобы соответствовать постоянно меняющимся требованиям конечных пользователей.

Java предоставляет множество возможностей для создания служб REST, включая JAX-RS , Apache Camel и Spring MVC . Все они являются хорошими фреймворками и были бы достаточны практически для любого проекта, но лично я предпочитаю использовать Apache Camel. Он настолько гибок и прост в использовании, что от него невозможно отказаться.

Приведенный здесь пример кода предназначен для аутентификации пользователя по маршруту REST (имейте в виду, что могут возникнуть проблемы с безопасностью, которые не рассматриваются в этом маршруте). Используя Jetty , мы предоставляем маршрут по пути “api/v1.0/auth”, который проходит HttpServletRequest экземпляр нашему процессору аутентификации компоненту. Отсюда мы можем извлечь всю необходимую информацию, чтобы определить, являются ли учетные данные действительными. Если они действительны, то мы устанавливаем в заголовке authenticated значение true в сообщении, а затем возвращаем уникальный токен для использования клиентом. В противном случае мы возвращаем JSON, чтобы уведомить клиента о том, что аутентификация не удалась.

import java.util.UUID;
...
private static final String AUTH_FAILED = "{"
                                           + "\"success\": false,"
                                           + "\"message\": \"Authentication failed.\""
                                           + "\"token\": null"
                                        + "}";
private static final String AUTH_SUCCEEDED = "{"
                                              + "\"success\": true,"
                                              + "\"message\": \"Authentication succeeded.\""
                                              + "\"token\": \"%s\""
                                           + "}";
...
@Override
public void configure() {
    from("jetty:http://localhost:8080/api/v1.0/auth")
    .process(authenticationProcessor)
    .choice()
        .when(header("authenticated").isEqualTo(true))
            .setBody().constant(String.format(AUTH_SUCCEEDED, UUID.randomUUID().toString()))
        .otherwise()
            .setBody().constant(AUTH_FAILED)
    .end();
}

Этот простой пример призван показать, как легко мы можем использовать Camel для услуг ОТДЫХА. Конечно, другим фреймворкам может потребоваться еще меньше кода для работы аутентификации, но мощь Camel становится очевидной, когда мы начинаем использовать другие компоненты Camel в нашем маршруте. Возможно, например, позже мы решим, что предпочли бы, чтобы наши клиенты проходили аутентификацию с помощью сервиса OAuth Google. В этом случае мы бы просто заменили .process(authenticationПроцессор) компонентом Camel gauth: .to("gauth:авторизовать?обратный вызов=" + encodedCallback + "&scope=" + encodedScope); , где encodedCallback и encodedScope являются URL-адресами обратного вызова для полной обработки службы аутентификации Google. Полный пример см. на странице Camel gauth .

Учитывая , что Camel отлично работает с более чем 100 различными источниками информации и ServiceMix , должно быть очевидно, что всего с помощью нескольких строк кода мы сможем добавить некоторые довольно полезные функции в наш сервис REST.

Ресурсы