miércoles, 20 de mayo de 2020

WSO2 Data services: Generación automática de servicios CRUD

Ya estuvimos aquí haciendo un post sobre como hacer servicios REST con WSO2. Hoy veremos los OData. O lo que es lo mismo, la generación automática de estos web services. OData hace referencia a Open Data Protocol, un standard de OASIS. Este estándar define las buenas practicas para construir y consumir una API RESTful. Es algo bastante sencillo de realizar pero creo que es una característica de WSO2 que no mucha gente conoce. 

Para poder generar automaticamente estos web services, debemos seguir los siguientes pasos desde la consola de administración:
  • Crear un nuevo data service
  • Asociar un datasource, con la diferencia de que debemos marcar la opción de habilitar OData.
  • Salvar el data source y dar por terminada la edición del data service. 
Si vemos el código podemos verificar que es un data services muy sencillo:

<data name="ODataSample" transports="http https local">
   <config enableOData="true" id="ODataDS">
      <property name="driverClassName">com.mysql.jdbc.Driver</property>
      <property name="url">jdbc:mysql://localhost:3306/library_db</property>
      <property name="username">root</property>
      <property name="password">****</property>
   </config>
</data>

Solo con esto WSO2, nos generará un servicio CRUD por cada tabla del data source que hemos indicado. Esto es un punto a tener en cuenta, puesto que si el data source contiene tablas del sistema, fallará la generación del data service. La capacidad de realizar CRUD de vistas de BBDD solo es posible si aplicamos un WUM sobre el Enterprise Integrator. 

Una vez generado, veamos como podemos obtener todos los datos de la tabla BOOK

curl --location --request GET 'https://localhost:8243/odata/ODataSample/ODataDS/BOOK' \
--header 'Accept: application/json'

Si vemos la llamada debemos estar atentos a varios detalles:
  • El puerto para llamadas HTTP sigue siendo 8280 y 8243 para HTTPS
  • El contexto para invocar estos servicios es odata y no services
  • Seguimos necesitando poner el nombre de nuestro data service. En este caso es ODataSample.
  • Después del nombre del data service debemos indicar el nombre del data source que hemos configurado. En este caso ODataDS.
  • Por último debemos indicar el nombre de la tabla. En nuestro ejemplo, BOOK. 
También asociado al método GET podemos realizar las siguientes operaciones:
  • Si no indicamos ninguna tabla. Nos mostrarán la información de las distintas tablas existentes
  • Si no indicamos ninguna tabla y añadimos al path /$metadata e invocamos como application/xml, nos devolverá la información del formato de todas las tablas del data source. 
  • Si queremos obtener sólo determinados campos de una tabla debemos añadir ?$select=fieldName, con el nombre de los campos a obtener separados por comas. Ejemplo: 
curl --location --request GET 'https://localhost:8243/odata/ODataSample/ODataDS/BOOK?$select=NAME,AUTHOR' \
--header 'Accept: application/json'
  • Si queremos un filtrado de los datos de la tabla añadiremos al path ?$filter=fieldName eq 'fieldValue'. Ejemplo:
curl --location --request GET 'https://localhost:8243/odata/ODataSample/ODataDS/BOOK?$filter=NAME%20eq%20%27Hyperion%27' \
--header 'Accept: application/json'

Si queremos borrar un registro realizaremos la siguiente llamada

curl --location --request DELETE 'https://localhost:8243/odata/ODataSample/ODataDS/BOOK(26)'

Para crear un registro debemos utilizar como es normal el método POST e indicar en el cuerpo de la llamada los campos a introducir

curl --location --request POST 'https://localhost:8243/odata/ODataSample/ODataDS/BOOK' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
	"NAME":"Ender's game",
	"AUTHOR": "Orson S. Card"
}'

Y por último para realizar un update, utilizaremos el método PUT indicando aquellos los cuales queremos editar

curl --location --request PUT 'https://localhost:8243/odata/ODataSample/ODataDS/BOOK(28)' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
	"NAME":"Juego de Ender"
}'



No hay comentarios:

Publicar un comentario