Prestation de services

Objective

After completing this lesson, you will be able to créer des services simples sur la base de modèles de domaine

Introduction - Concepts fondamentaux

Voyons maintenant comment créer des services afin d'accéder à un modèle de données fourni.

Regardez la vidéo pour en savoir plus sur les modèles de service.

Remarque

CAP prend en charge les protocoles OData V4 et REST prêts à l'emploi. En outre, GraphQL peut être servi en utilisant le package open source @cap-js/graphql. Le protocole par défaut est OData V4.

Dans cette leçon, nous nous limiterons à la création de définitions de service et de l'adaptateur de protocole OData V4 qui sert automatiquement toutes les opérations CLAS pour les entités exposées. Par la suite, nous aborderons également la manière d'implémenter une logique de domaine personnalisée.

Modèles de service

Voyons maintenant comment écrire une définition de service avec CDS (CDS Definition Language) et CQL (CDS Query Language). Pour ce faire, nous créons un fichier avec l'extension .cds dans le dossier srv du projet CAP. Le nom du fichier est arbitraire, dans notre exemple, nous utilisons admin-service.cds comme nom (voir figure Définition de service simple).

Dans la ligne 1 de la définition de service, la directive using est utilisée pour importer les définitions à partir du modèle de domaine. Le chemin from spécifié commençant par ../ est résolu par rapport au dossier srv dans lequel se trouve la définition de service. Cette action importe toutes les définitions avec le préfixe d'espace nom com.sap.learning du fichier db/schema.cds. La base de données de l'alias local est définie pour les définitions importées.

Les lignes 4 à 9 contiennent un bloc service qui définit une interface de service appelée AdminService comme un ensemble d'entités exposées. Ce service est destiné aux administrateurs pour gérer les auteurs et les livres dans une application.

Par défaut, le point d'extrémité d'un service exposé est construit en fonction de son nom, selon certaines conventions (la chaîne "Service" est omise et le kebab-case est appliqué). Si vous voulez remplacer le chemin par défaut ou le rendre explicite, vous pouvez ajouter l'annotation @path comme dans l'exemple. Là, l'annotation @path spécifie le chemin URL sous lequel ce service sera accessible, à savoir /admin.

Entités exposées

Les entités exposées par un service sont généralement des projections sur les entités du modèle de données sous-jacent. Les définitions de vue standard, à l'aide de as select from ou as projection on, peuvent être utilisées pour exposer des entités.

Deux entités sont définies comme projections dans le service d'administration :

  • La ligne 6 déclare une entité appelée Pages dans le service d'administration. Il s'agit d'une projection, c'est-à-dire d'une vue sur l'entité Dossiers définie dans le modèle de domaine importé.
  • De même, à la ligne 7, une entité Auteurs est déclarée comme projection sur l'entité Auteurs à partir du modèle de domaine.

Remarque

Les projections sont utilisées pour façonner les données d'une manière spécifique pour un service particulier, limitant potentiellement les zones ou modifiant la structure des données de l'entité modèle pour répondre aux besoins du consommateur de services.

La définition de service dans l'exemple illustré permet d'accéder aux données sous-jacentes de manière 1:1.

Prestataires de services génériques

Lorsque nous exécutons la commande cds watch dans le terminal après la mise en oeuvre du modèle de service, il s'affiche que le modèle de service est chargé à partir du fichier srv/admin-service.cds décrit ci-dessus en plus du modèle de domaine. Le terminal montre également que l'AdminService est desservi via le chemin "/admin".

Vues de base de données

Lorsque cds watch est exécuté, les instructions SQL DDL sont générées sur la base du modèle de service et exécutées dans la base de données configurée. Ces instructions SQL DDL peuvent également être créées manuellement à l'aide de la commande cds compile déjà abordée en relation avec le modèle de domaine.

Pour afficher les instructions SQL DDL générées pour l'exemple décrit ici, exécutez la commande suivante dans le répertoire racine du projet CAP dans le terminal:

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

Astuce

Au lieu de saisir la commande ci-dessus dans le terminal, vous pouvez également sélectionner l'entrée suivante dans le menu contextuel du fichier .cds : CDS PreviewPreview as sql. Cela génère la même sortie que la commande de ligne de commande.

Le script DDL SQL généré contient les instructions CREATE TABLE déjà décrites ci-dessus pour les tables com_sap_learning_Authors et com_sap_learning_Books. Ils appartiennent aux entités du modèle de domaine. En outre, les instructions CREATE VIEW présentées dans la figure Vues générées sont désormais également générées. Cela signifie que les deux entités projetées Auteurs et Livres du modèle de service sont créées en tant que vues dans la base de données. Les vues lisent leurs données à partir des tables de modèles générées.

Service OData

Le service d'administration fourni dans l'exemple est un service OData V4 entièrement implémenté - servi par les exécutions génériques de CAP, sans codage d'implémentation requis.

Si vous envoyez une demande GET à l'URL racine du service, vous recevrez le document de service qui répertorie les ressources proposées par le service (voir la figure Document de service).

Le service dont il est question ici contient - sur la base du modèle de service - les deux ensembles d'entités Auteurs et Livres. Ils sont associés aux deux points de terminaison de service /admin/Authors et /admin/Books. Toutes les opérations OData CRUD sont prises en charge prêtes à l'emploi via ces deux points d'extrémité. Lors de la création de nouvelles entités Auteurs ou Livres, la zone de clé d'ID correspondante est renseignée automatiquement, car les zones clés ont été catégorisées avec l'UUID.

Démonstration et exercice : définir un service

Remarque

Dans l'exercice, suivez les instructions étape par étape de la démonstration suivante dans SAP Business Application Studio.

Comme point de départ de l'exercice, utilisez le résultat de l'exercice précédent Capture d'un modèle de domaine si vous avez terminé l'exercice avec succès. Vous pouvez également utiliser la branche 2_domain_model du référentiel GitHub suivant comme point de départ :

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

L'implémentation complète de la simulation se trouve dans la branche 3_service_Definition du référentiel GitHub.

Vous trouverez ici des informations détaillées sur le contenu du référentiel et son utilisation.

Regardez la vidéo pour voir comment définir un service.