Prestación de servicios

Objective

After completing this lesson, you will be able to crear servicios simples sobre la base de modelos de dominio

Introducción - Conceptos básicos

Veamos ahora cómo crear servicios para acceder a un modelo de datos proporcionado.

Vea el vídeo para obtener información sobre los modelos de servicio.

Nota

CAP admite los protocolos OData V4 y REST listos para usar. Además, GraphQL puede ser servido usando el paquete de código abierto @cap-js/graphql. El protocolo por defecto es OData V4.

En esta lección, nos limitaremos a la creación de definiciones de servicio y el adaptador de protocolo OData V4 que sirve automáticamente a todas las operaciones CRUD para las entidades expuestas. Más adelante también analizaremos cómo implementar la lógica de dominio personalizada.

Modelos de servicio

Veamos ahora cómo escribir una definición de servicio con CDS (lenguaje de definición CDS) y CQL (lenguaje de consulta CDS). Para ello, creamos un archivo con la extensión .cds en la carpeta srv del proyecto CAP. El nombre del archivo es arbitrario, en nuestro ejemplo utilizamos admin-service.cds como nombre (véase la figura Una definición de servicio simple).

En la línea 1 de la definición de servicio, la directiva using se emplea para importar las definiciones del modelo de dominio. La ruta from especificada que empieza por ../ se resuelve en relación con la carpeta srv en la que se encuentra la definición de servicio. Esto importa todas las definiciones con el prefijo de área de nombres com.sap.learning desde el archivo db/schema.cds. El alias local db se establece para las definiciones importadas.

Las líneas 4 a 9 contienen un bloque service que define una interfaz de servicio llamada AdminService como una colección de entidades expuestas. Este servicio está pensado para que los administradores gestionen autores y libros dentro de una aplicación.

Por defecto, el punto final de un servicio expuesto se construye en función de su nombre, siguiendo algunas convenciones (la cadena "Servicio" se omite y se aplica kebab-case). Si desea sustituir la vía de acceso predeterminada o hacerla explícita, puede añadir la anotación @path como en el ejemplo. Allí, la anotación @path especifica la vía de acceso de URL bajo la cual se podrá acceder a este servicio, es decir, /admin.

Entidades expuestas

Las entidades expuestas por un servicio suelen ser proyecciones en entidades del modelo de datos subyacente. Las definiciones de vista estándar, utilizando as select from o as projection on, se pueden utilizar para exponer entidades.

Dos entidades se definen como proyecciones dentro del AdminService:

  • La línea 6 declara una entidad llamada Libros dentro del AdminService. Esta es una proyección, es decir, es una vista de la entidad Libros definida en el modelo de dominio importado.
  • De manera similar, en la línea 7, una entidad de Autores se declara como una proyección en la entidad de Autores a partir del modelo de dominio.

Nota

Las proyecciones se utilizan para dar forma a los datos de una manera específica para un servicio particular, limitando potencialmente los campos o modificando la estructura de los datos de la entidad modelo para satisfacer las necesidades del consumidor del servicio.

La definición de servicio en el ejemplo mostrado permite el acceso a los datos subyacentes de una manera 1:1.

Proveedores de servicios genéricos

Cuando ejecutamos el comando cds watch en el terminal después de que se haya implementado el modelo de servicio, se muestra que el modelo de servicio se carga desde el archivo srv/admin-service.cds descrito anteriormente además del modelo de dominio. El terminal también muestra que el AdminService es servido a través de la ruta "/admin".

Vistas de base de datos

Cuando se ejecuta cds watch , las sentencias DDL SQL se generan en función del modelo de servicio y se ejecutan en la base de datos configurada. Estas sentencias SQL DDL también se pueden crear manualmente utilizando el comando cds compile que ya se ha analizado en relación con el modelo de dominio.

Para visualizar las sentencias SQL DDL generadas para el ejemplo descrito aquí, ejecute el siguiente comando en el directorio raíz del proyecto CAP en el terminal:

Code Snippet
1
cds compile srv/admin-service.cds --to sql

Consejo

En lugar de introducir el comando anterior en el terminal, también puede seleccionar la siguiente entrada en el menú contextual del archivo .cds: Vistaprevia CDS como sql. Esto genera la misma salida que el comando de línea de comandos.

La secuencia de comandos DDL SQL generada contiene las sentencias CREATE TABLE ya descritas anteriormente para las tablas com_sap_learning_Authors y com_sap_learning_Books. Pertenecen a las entidades del modelo de dominio. Además, ahora también se generan las sentencias CREATE VIEW que se muestran en la figura Vistas generadas. Esto significa que las dos entidades proyectadas Autores y Libros del modelo de servicio se crean como vistas en la base de datos. Las vistas leen sus datos de las tablas de modelo generadas.

Servicio OData

El AdminService servido en el ejemplo es un servicio OData V4 totalmente implementado, servido por los tiempos de ejecución genéricos de CAP, sin necesidad de codificación de implementación.

Si envía una solicitud GET a la URL raíz del servicio, recibirá el documento de servicio de vuelta, que enumera los recursos ofrecidos por el servicio (véase la figura Documento de servicio).

El servicio analizado aquí contiene, según el modelo de servicio, los dos conjuntos de entidades Autores y Libros. Están asociados con los dos puntos de acceso de servicio /admin/Authors y /admin/Books. Todas las operaciones CRUD de OData se admiten listas para usar a través de estos dos puntos finales. Al crear nuevas entidades de autores o libros, el campo clave de ID correspondiente se rellena automáticamente, ya que los campos clave se han escrito con UUID.

Demostración y ejercicio: Definir un servicio

Nota

Como ejercicio, lleve a cabo las instrucciones paso a paso en la siguiente demostración en SAP Business Application Studio.

Como punto de partida para el ejercicio, utilice el resultado del ejercicio anterior Capturar un Domain Model si lo ha completado correctamente. Como alternativa, también puede utilizar la rama 2_domain_model del siguiente repositorio GitHub como punto de partida:

https://github.com/SAP-samples/cap-development-learning-journey

La implementación completa de la simulación se puede encontrar en la rama 3_service_Definition del repository GitHub.

Puede encontrar información detallada sobre el contenido del repositorio y cómo utilizarlo aquí.

Vea el vídeo para ver cómo definir un servicio.