Ejemplo: Servicio REST con Apache Camel

Con el predominio extremo de las aplicaciones móviles, las aplicaciones web y las aplicaciones de escritorio, los servicios REST son más importantes que nunca para proporcionar datos a sus usuarios. Este dato podría...

Con el predominio extremo de las aplicaciones móviles, las aplicaciones web y las aplicaciones de escritorio, los servicios REST son más importantes que nunca para proporcionar datos a sus usuarios. Estos datos podrían usarse para la aplicación nativa o para que los desarrolladores de terceros amplíen el alcance de su servicio a otras aplicaciones. De cualquier manera, el servicio REST debe ser fácil de usar y modificar fácilmente para mantenerse al día con la demanda en constante cambio de los usuarios finales.

Java proporciona muchas opciones para crear servicios REST, incluidos JAX-RS, camello apache y Primavera MVC. Todos son buenos marcos y serían suficientes para casi cualquier proyecto, pero personalmente prefiero usar Apache Camel. Es tan flexible y fácil de usar que es imposible dejarlo pasar.

El código de ejemplo proporcionado aquí está diseñado para autenticar a un usuario a través de una ruta REST (tenga en cuenta que puede haber problemas de seguridad que no se abordan en esta ruta). Usando Embarcadero, exponemos una ruta en la ruta 'api/v1.0/auth', que pasa una instancia de HttpServletRequest a nuestro authenticationProcessor frijol. Desde aquí, podemos extraer toda la información requerida para determinar si las credenciales son válidas. Si son válidos, establecemos el encabezado autenticado en verdadero en el mensaje y luego devolvemos un token único para que lo use el cliente. De lo contrario, devolvemos JSON para notificar al cliente que la autenticación ha fallado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
}

Este ejemplo simple pretende mostrar cuán fácilmente podemos usar Camel para servicios REST. Claro, otros marcos pueden requerir incluso menos código para que la autenticación funcione, pero el poder de Camel se realiza cuando comenzamos a utilizar otros componentes de Camel en nuestra ruta. Tal vez, por ejemplo, luego decidamos que preferimos que nuestros clientes se autentiquen usando el servicio OAuth de Google. En este caso, simplemente reemplazaríamos .process(authenticationProcessor) con el componente Gauth de Camel: .to("gauth:authorize?callback=" + encodedCallback + "&scope=" + encodedScope);, donde encodedCallback y encodedScope son URL de devolución de llamada para manejar completamente el servicio de autenticación de Google. Consulte la [página de calibre] de Camel (http://camel.apache.org/gauth.html#gauth-Usage) para ver un ejemplo completo.

Dado que Camel funciona bien con más de 100 fuentes de información diferentes, y mezcla de servicios, Debería ser obvio que con solo unas pocas líneas de código podremos agregar algunas funciones bastante útiles a nuestro servicio REST.

Recursos