ADF como publicador/consumidor de servicios REST

Publicado por Alejandro Font el

Modernización FormsOracle ADFREST

Retomamos nuestra línea de posts sobre modernización de Oracle Forms, donde  hemos ido viendo como para cada necesidad se debería buscar el framework y la tecnología adecuada. En este post veremos las capacidades de Oracle ADF para publicar/consumir servicios REST.

En ese camino de la modernización puede que Oracle ADF sea parte clave en nuestra nueva estrategia. En este post trataremos de mostrar como ADF puede tanto publicar parte de nuestras reglas de negocio vía SOAP o REST , como consumir servicios REST sobre los cuales construir pantallas.

Exposición de Business Components a través de REST

Lo primero será crear una primera versión de nuestros servicios a través del fichero adf-config.xml.

A partir de ahi, dentro de cada AM, podremos tener diferentes versiones de nuestros servicios:

Tal como se observa en la siguiente imagen podremos decidir qué View Objects exponer, así como definir la visibilidad de sus atributos, operaciones disponibles, etc.

Haciendo clic sobre cualquiera de los recursos abriremos una ventana en la que podremos realizar diversas acciones:

  • Añadir/eliminar atributos.
  • Añadir/eliminar recursos hijos a través de View Link Accessors.
  • Definir operaciones disponibles, aplicar Rowfinders, etc.
  • Publicar métodos propios (nuestras reglas de negocio).

Cuando creamos el primer recurso REST, JDeveloper genera de forma automática un nuevo  proyecto dentro de nuestra aplicación, RESTWebService. Este proyecto lo podremos desplegar por separado o de forma conjunta con la aplicación, teniendo sus respectivos context-root diferenciados.

Para realizar pruebas de la API REST que hemos creado de la capa de Modelo, arrancamos el proyecto y el propio IDE nos proporciona un cliente sobre el que hacer peticiones:

Es un cliente muy completo y funciona bien, aunque yo personalmente suelo usar VS Code como editor, de modo que normalmente realizo las consultas REST desde el mismo.

Es importante destacar que sobre la URL base siempre se añade el número de versión y el nombre del recurso correspondiente. Ademas si añadimos describe, obtendremos información detallada sobre los recursos:

# obtenemos informacion de lo que tenemos en esa version
http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/describe

# acceso a la colecion de departamentos (esta limitado a 5)
http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest

# obtenemos informacion relativa al servicio de departamentos
http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest/describe

# realizamos consulta con un limit mas elevado
http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest?limit=20

# consultamos por un recurso determinado
http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest/100

# consultamos por un recurso y unos campos determinados
http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest/100?fields=DepartmentId,DepartmentName

# creacion de un departamento nuevo
POST http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest HTTP/1.1  
content-type: application/vnd.oracle.adf.resourceitem+json  
{
    "DepartmentId": "300",
    "DepartmentName": "sample Dept"
}

# modificar un departamento 
PATCH http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest/300 HTTP/1.1  
content-type: application/vnd.oracle.adf.resourceitem+json  
{
    "DepartmentName": "sample Dept modificado"
}

# eliminar un departamento 
DELETE http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest/300 HTTP/1.1

# consulta de un metodo propio definido en el VO
POST http://127.0.0.1:7101/DemoADFREST-RESTWebService-context-root/rest/1.0/DeptsRest HTTP/1.1  
content-type: application/vnd.oracle.adf.action+json  
{
    "name": "hello",
    "parameters": [
        {
              "name": "M83"
        }
    ]
}

Estas son algunas de las llamadas que nos proporciona ADF, pero también podemos acceder a LOVS, Rowfinders, etc. De manera que podamos explotar toda la capa de modelo de una forma cómoda y fácil:

http://server/demo/rest/11.0/Employees/101/lov/JobsLOV?onlyData=true&fields=JobTitle  
Consumo  REST para el desarrollo de pantallas.

Desde nuestra aplicación ADF podemos consumir servicios SOAP/REST con total facilidad.

Para ello contamos con Web Service Datacontrol mediante el cual obtendremos un DataControl (DC) del servicio como cualquier otro DC que tengamos, de forma que podremos arrastrar y soltar y crear nuestras pantallas de servicios como es habitual en ADF:

Si el servicio proviene de otra aplicación ADF la creación del DC y la integración con los componentes a nivel de paginación, etc. es más sencilla.

Conclusiones

En resumen, hemos podido ver como actualmente podemos convertir nuestra aplicación ADF en publicadora o consumidora de servicios REST de una forma muy rápida, creando un mapa de conectividad muy potente con el resto de componentes de nuestra estrategia. Ofreciendo la capacidad de crear una API REST de toda la capa de Modelo de forma cómoda.

De esta forma podremos crear servicios para su consumo en JET, APEX, etc. o consumir los  servicios que nos vengan de ORDS, etc.

Mas información en la documentación oficial:

Si te ha gustado, ¡síguenos en Twitter!

Autor

Alejandro Font

Oracle ACE y Líder Técnico de la Comunidad Oracle Fusion Middleware en knowmad mood. Actualmente con foco en Arquitecturas Ágiles y Contenedores