Servicio oData (III)

Buenas a todos, vamos a seguir con esta serie de posts para tratar de comprender bien el funcionamiento de los servicios oData.

Como ya hemos comentado anteriormente (Servicio oData (I)) las peticiones a los servicios oData se basan en la estructura de la URI, por lo que en este post vamos a tratar de explicar esta composición para realizar todas las posibles queries al servicio oData, así como llamadas para el resto de operaciones (Create, Update y Delete) y funciones import.

Para todos los ejemplos vamos a utilizar un servicio oData v2 (ya veremos más delante qué nos ofrecen los servicios oData v4) de SAP (http:/services.odata.org/V2/oData/odata.svc) con el siguiente EDM:

Para probar todas las peticiones podéis utilizar Postman o la extensión de Chrome YARC.

La URI está dividida en 3 partes:

  • La raíz del servicio oData: corresponde a la identificación del servicio y haría la llamada al Service Document.
  • La ruta del recurso: identifica con qué entidades del servicio vamos a interactuar.
  • Las opciones de Query: indicamos los parámetros de las funciones import o las variaciones de tipo de query que vamos a realizar.

En la ruta del recurso identificamos el EntitySet sobre el que vamos a realizar la petición, en este ejemplo sería sobre los Productos.

Query Options

Con estas opciones podemos configurar la forma que tendrán las queries que haremos sobre los diferentes recursos. Las Query Options van prefijadas con el símbolo “$”, se indica que empiezan con un “¿” y se pueden ir añadiendo diferentes opciones con el símbolo “&”.

Principales Query Options:

  1. Filtrado (%filter): indicamos una o varias condiciones que deben cumplir las entidades de ese EntitySet que vamos a recuperar. En esas condiciones podemos indicar variables o literales, utilizar diferente tipos de operadores y se pueden anidar condiciones con “and” u “or”.

Ejemplo:

http:/services.odata.org/V2/oData/odata.svc/Products?$filter=Price le 20 and Price gt 5

Nos traerá las entidades Productos cuyo precio esté entre 5 y 20.

  • Selección ($select): podemos añadir diferentes propiedades del EntityType referido, separadas por comas, para indicar cuáles son las propiedades que queremos que nos traiga la llamada de las entidades requeridas.

Ejemplo:

http:/services.odata.org/V2/oData/odata.svc/Products?$select=Price,Name

Nos traerá de las entidades Productos únicamente sus propiedades Price y Name.

  • Ordenar ($orderby): sirve para ordenar de una determinada manera las entidades que va a devolver. Para ello indicamos las propiedades del EntityType y si se va a ordenar ascendente (asc) o descendentemente (desc). Sino indicamos nada se ordenará ascendentemente.

Ejemplo:

http:/services.odata.org/V2/oData/odata.svc/Products?$orderby=Price desc

Nos traerá las entidades Productos ordenadas de precio mayor a precio menor.

  • Paginación ($top y $skip): el top sirve para indicar que nos traiga un número N de entidades y el skip para indicar que nos traiga las entidades a partir de la N+1 entidad. Entonces estas dos query option se utilizan para la paginación, es decir, para ir trayendo las entidades en bloques de N entidades.

Ejemplo:

http:/services.odata.org/V2/oData/odata.svc/Products?$top=2&$skip=4

Nos traerá las entidades colocadas en las posiciones 5 y 6, es decir, 2 entidades desde la posición 4.

  • Expansión ($expand): esta query option sirve para poder obtener todas las entidades relacionadas por una asociación con la entidad correspondiente al entitySet que es objetivo en la ruta del recurso.

Ejemplo:

http:/services.odata.org/V2/oData/odata.svc/Categories?$expand=Products

Nos traerá todas las entidades de Categorías, y de cada entidad de tipo Categoría nos traerá todos los Productos asociados a esa categoría.

Para ir haciendo las llamadas recomiendo el Postman, añadir la opción $format=JSON (para que los datos vengan en formato JSON) y utilizar algún visor de JSON online como por ejemplo https://jsoneditoronline.org/.

Operaciones CUD

Para el resto de operaciones como son el Create, Update y Delete, necesitamos utilizar el método apropiado del protocolo HTTP con los datos necesarios.

  • Create: hay que ejecutar un método POST sobre el EntitySet objetivo, indicando en el body el valor de las propiedades de la entidad nueva a crear.

En la cabecera HTTP indicamos en qué formato vamos a enviar los datos (Content-Type) y en qué formato deseamos que nos responda (Accept).

Si la operación ha sido satisfactoria el servidor devolverá un 201 de código HTTP.

  • Update: al igual que en el create debemos indicar el EntitySet objetivo pero indicando los campos claves que identifican de forma unívoca a una entidad sobre la que deseamos hacer la actualización.

En este caso el método a utilizar es un PUT, indicando también en el body el valor de las propiedades nuevas de la entidad objetivo.

Si la operación ha sido satisfactoria el servidor devolverá un 204 de código HTTP.

  • Delete: en este caso es necesario indicar junto al EntitySet objetivo los campos claves que identifiquen a la entidad que queremos borrar. El body no debe ir relleno, ya que no tenemos que pasarle información extra.

Si la operación ha sido satisfactoria el servidor devolverá un 204 de código HTTP.

Invocar Funciones Import

Y por último vamos a indicar cómo hacer las peticiones a las funciones import. Para ello vamos a indicar en el path del recurso el nombre de la función seguido de los parámetros de entrada necesarios tras el símbolo “?”, como podemos apreciar en la siguiente imagen:

Estas peticiones se pueden emitir invocando los métodos GET o POST HTTP. Como yo dijimos en el anterior post (servicio oData (II)) nos puede devolver diferentes tipos de datos, desde una entidad, una colección, un tipo simple o un tipo complejo.

Ejemplo:

http:/services.odata.org/V2/oData/odata.svc/GetProductsByRating?rating=3

Con esta llamada nos devolverá todos los productos cuya propiedad rating valga 3.

Y con esto terminamos este post, espero que haya servido para aclarar el funcionamiento de las peticiones y respuestas de los servicios oData. En los próximos posts trataremos de crear dichos servicios tanto en el AS ABAP como en SCP.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .

Blog de WordPress.com.

Subir ↑

A %d blogueros les gusta esto: