Erbringung von Services

Objective

After completing this lesson, you will be able to einfache Services auf der Grundlage von Domänenmodellen anlegen

Einführung - Kernkonzepte

Sehen wir uns nun an, wie Services angelegt werden, um auf ein bereitgestelltes Datenmodell zuzugreifen.

Sehen Sie sich das Video an, um mehr über Servicemodelle zu erfahren.

Notiz

CAP unterstützt die sofort einsatzbereiten Protokolle OData V4 und REST. Darüber hinaus kann GraphQL über das Open-Source-Paket @cap-js/graphql bedient werden. Das Standardprotokoll ist OData V4.

In dieser Lektion beschränken wir uns auf das Anlegen von Service-Definitionen und den OData-V4-Protokoll-Adapter, der automatisch alle CRUD-Operationen für die exponierten Entitäten bedient. Später wird auch die Implementierung der benutzerdefinierten Domänenlogik besprochen.

Servicemodelle

Sehen wir uns nun an, wie eine Service-Definition mit CDS (CDS Definition Language) und CQL (CDS Query Language) geschrieben wird. Dazu legen wir im Ordner srv des CAP-Projekts eine Datei mit der Erweiterung .cds an. Der Name der Datei ist beliebig, in unserem Beispiel verwenden wir admin-service.cds als Namen (siehe Abbildung A Simple Service Definition).

In Zeile 1 der Service-Definition wird die Richtlinie using verwendet, um die Definitionen aus dem Domänenmodell zu importieren. Der angegebene Pfad from , der mit ../ beginnt, wird relativ zum Ordner srv aufgelöst, in dem sich die Service-Definition befindet. Dadurch werden alle Definitionen mit dem Namensraumpräfix com.sap.learning aus der Datei db/schema.cds importiert. Der lokale Alias db wird für die importierten Definitionen gesetzt.

Die Zeilen 4 bis 9 enthalten einen service -Block, der ein Service-Interface namens AdminService als Sammlung exponierter Entitäten definiert. Dieser Service ist für Administratoren gedacht, um Autoren und Bücher innerhalb einer Anwendung zu verwalten.

Standardmäßig wird der Endpunkt eines exponierten Service basierend auf seinem Namen gemäß einigen Konventionen konstruiert (die Zeichenfolge 'Service' wird ausgelassen und kebab-case wird erzwungen). Wenn Sie den Standardpfad überschreiben oder explizit festlegen möchten, können Sie die Annotation @path wie im Beispiel hinzufügen. Dort gibt die Annotation @path den URL-Pfad an, unter dem auf diesen Service zugegriffen werden kann, nämlich /admin.

Exponierte Entitäten

Die von einem Service exponierten Entitäten sind in der Regel Projektionen auf Entitäten aus dem zugrunde liegenden Datenmodell. Standardansichtsdefinitionen, die as select from oder as projection onverwenden, können zum Exponieren von Entitäten verwendet werden.

Im AdminService sind zwei Entitäten als Projektionen definiert:

  • Zeile 6 deklariert eine Entität namens Dokumentenmappen im AdminService. Hierbei handelt es sich um eine Projektion, d.h. es handelt sich um eine Ansicht auf die im importierten Domänenmodell definierte Dokumentenmappenentität.
  • Ebenso wird in Zeile 7 eine Authors -Entität als Projektion auf die Authors -Entität aus dem Domänenmodell deklariert.

Notiz

Projektionen werden verwendet, um Daten auf eine bestimmte Weise für einen bestimmten Service zu gestalten, wodurch die Felder möglicherweise eingeschränkt oder die Struktur der Daten aus der Modellentität entsprechend den Anforderungen des Service-Consumers geändert werden kann.

Die Service-Definition im gezeigten Beispiel ermöglicht den 1:1-Zugriff auf die zugrundeliegenden Daten.

Generische Service-Provider

Wenn Sie den Befehl cds watch im Terminal ausführen, nachdem das Servicemodell implementiert wurde, wird angezeigt, dass das Servicemodell aus der oben beschriebenen Datei srv/admin-service.cds zusätzlich zum Domänenmodell geladen wird. Das Terminal zeigt auch an, dass der AdminService über den Pfad "/admin" bedient wird.

Datenbank-Views

Wenn cds watch ausgeführt wird, werden SQL-DDL-Anweisungen basierend auf dem Servicemodell generiert und in der konfigurierten Datenbank ausgeführt. Diese SQL-DDL-Anweisungen können auch manuell mit dem Befehl cds compile angelegt werden, der bereits im Zusammenhang mit dem Domänenmodell besprochen wurde.

Um die für das hier besprochene Beispiel generierten SQL-DDL-Anweisungen anzuzeigen, führen Sie im Root-Verzeichnis des CAP-Projekts im Terminal den folgenden Befehl aus:

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

Hinweis

Anstatt den obigen Befehl im Terminal einzugeben, können Sie auch den folgenden Eintrag im Kontextmenü der .cds-Datei auswählen: CDS PreviewPreview as sql. Dies erzeugt die gleiche Ausgabe wie der Kommandozeilenbefehl.

Das generierte SQL-DDL-Skript enthält die bereits oben beschriebenen CREATE TABLE-Anweisungen für die Tabellen com_sap_learning_Authors und com_sap_learning_Books. Sie gehören zu den Entitäten aus dem Domänenmodell. Darüber hinaus werden nun auch die in der Abbildung „Generierte Views" gezeigten CREATE VIEW-Anweisungen generiert. Das bedeutet, dass die beiden projizierten Entitäten Autoren und Dokumentenmappen aus dem Servicemodell als Views in der Datenbank angelegt werden. Die Views lesen ihre Daten aus den generierten Modelltabellen.

OData-Service

Der im Beispiel bereitgestellte AdminService ist ein vollständig implementierter OData-V4-Service, der von den generischen CAP-Laufzeiten bedient wird, ohne dass Implementierungsquelltext erforderlich ist.

Wenn Sie eine GET-Anfrage an die Root-URL des Service senden, erhalten Sie das Servicedokument zurück, das die vom Service angebotenen Ressourcen auflistet (siehe Abbildung Servicedokument).

Der hier besprochene Service enthält - basierend auf dem Servicemodell - die beiden Entitätsmengen Autoren und Dokumentenmappen. Sie sind mit den beiden Service-Endpunkten /admin/Authors und /admin/Books verknüpft. Alle OData-CRUD-Operationen werden sofort über diese beiden Endpunkte unterstützt. Beim Anlegen neuer Autoren oder Dokumentenmappenentitäten wird das entsprechende ID-Schlüsselfeld automatisch gefüllt, da die Schlüsselfelder mit UUID eingegeben wurden.

Demonstration & Übung: Service definieren

Notiz

Führen Sie als Übung die Schritt-für-Schritt-Anleitung in der folgenden Demonstration selbst im SAP Business Application Studio durch.

Verwenden Sie als Ausgangspunkt für die Übung das Ergebnis der vorherigen Übung Domänenmodell erfassen, wenn Sie es erfolgreich abgeschlossen haben. Alternativ können Sie auch den Branch 2_domain_model aus dem folgenden GitHub-Repository als Ausgangspunkt verwenden:

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

Die vollständige Implementierung der Simulation finden Sie im Branch 3_service_definition des GitHub-Repositorys.

Detaillierte Informationen zum Inhalt des Repositorys und dessen Verwendung finden Sie hier.

Sehen Sie sich das Video an, um zu sehen, wie Sie einen Service definieren.