Пример: служба REST с Apache Camel

В связи с чрезвычайным распространением мобильных приложений, веб-приложений и настольных приложений службы REST как никогда важны для предоставления данных пользователям. Эти данные могут быть использованы для собственного приложения или для сторонних разработчиков, чтобы расширить охват вашего сервиса другими приложениями. В любом случае, служба REST должна быть простой в использовании и легко изменяемой, чтобы соответствовать постоянно меняющимся запросам конечных пользователей. Java предоставляет множество возможностей для создания служб REST, включая JAX-RS [http: //en.wikipedi

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

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

Приведенный здесь пример кода предназначен для использования для аутентификации пользователя через REST-маршрут (имейте в виду, что могут быть проблемы безопасности, которые не решаются на этом маршруте). Используя Jetty , мы открываем маршрут по пути api / v1.0 / auth, который передает экземпляр HttpServletRequest нашему bean-компоненту authenticationProcessor Отсюда мы можем извлечь всю необходимую информацию, чтобы определить, действительны ли учетные данные. Если они действительны, мы устанавливаем для 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 для служб REST. Конечно, другим фреймворкам может потребоваться еще меньше кода, чтобы аутентификация работала, но сила Camel реализуется, когда мы начинаем использовать другие компоненты Camel в нашем маршруте. Возможно, например, мы позже решим, что предпочтем, чтобы наши клиенты аутентифицировались с помощью службы OAuth Google. В этом случае мы бы просто заменили .process(authenticationProcessor) на компонент Camel gauth: .to("gauth:authorize?callback=" + encodedCallback + "&scope=" + encodedScope); , где encodedCallback и encodedScope - это URL-адреса обратного вызова для полной обработки службы аутентификации Google. См. Полный пример на странице Camel, посвященной gauth.

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

Ресурсы

comments powered by Disqus

Содержание