サービスの提供

Objective

After completing this lesson, you will be able to ドメインモデルに基づく単純なサービスの登録

概要 - コアコンセプト

ここでは、提供されたデータモデルにアクセスするためにサービスを登録する方法について説明します。

サービスモデルの詳細については、ビデオを視聴してください。

注記

CAP では、即座に利用可能なプロトコル OData V4 および REST がサポートされています。また、GraphQLはオープンソースパッケージ@cap-js/graphqlを使用することで対応できる。デフォルトプロトコルは OData V4 です。

このレッスンでは、サービス定義と、公開されたエンティティのすべての CRUD 操作を自動的に提供する OData V4 プロトコルアダプタの作成に限定します。その後、カスタムドメインロジックの実装方法についても説明します。

サービスモデル

ここでは、CDS (CDS 定義言語) および CQL (CDS クエリ言語) を使用してサービス定義を記述する方法について説明します。これを行うには、CAP プロジェクトの srv フォルダに拡張子 .cds のファイルを作成します。ファイル名は任意です。この例では、名前として admin-service.cds を使用します (図 A Simple Service Definition を参照)。

サービス定義の 1 行目では、using ディレクティブを使用してドメインモデルから定義をインポートします。../ で始まる指定された from パスは、サービス定義が存在する srv フォルダに対して相対的に解決されます。これにより、名前空間接頭辞 com.sap.learning のすべての定義が db/schema.cds ファイルからインポートされます。インポートされた定義に対してローカルエイリアス db が設定されます。

4 行目から 9 行目には、公開されたエンティティのコレクションとして AdminService と呼ばれるサービスインタフェースを定義する service ブロックが含まれています。このサービスは、管理者がアプリケーション内で作成者および書籍を管理することを目的としています。

デフォルトでは、公開されたサービスのエンドポイントは、その名称に基づいて、いくつかの規則に従って構築されます (文字列 'Service' は省略され、kebab-case が強制されます)。デフォルトパスを上書きしたり、明示的にしたりする場合は、例のように @path アノテーションを追加できます。そこで、@path アノテーションにより、このサービスにアクセスするための URL パス (/admin) が指定されます。

公開エンティティ

サービスによって公開されるエンティティは、通常、基礎となるデータモデルからのエンティティに対する射影です。as select from または as projection on を使用する標準ビュー定義は、エンティティの公開に使用できます。

AdminService では、2 つのエンティティが射影として定義されます。

  • 行 6 は、AdminService 内で Books というエンティティを宣言します。これは射影です。つまり、インポートされたドメインモデルで定義された Books エンティティのビューです。
  • 同様に、7 行目では、Authors エンティティはドメインモデルの Authors エンティティに対する射影として宣言されます。

注記

射影は、特定のサービスに対して特定の方法でデータを形成するために使用されます。これにより、サービスコンシューマのニーズに合わせて、モデルエンティティからのデータの構造を制限したり、構造を変更したりする可能性があります。

上記の例のサービス定義では、基礎となるデータに 1:1 でアクセスすることができます。

ジェネリックサービスプロバイダ

サービスモデルの実装後にターミナルで cds watch コマンドを実行すると、ドメインモデルに加えて、上記の srv/admin-service.cds ファイルからサービスモデルがロードされることが表示されます。ターミナルでは、AdminService がパス "/admin" で提供されることも示されます。

データベースビュー

cds watch が実行されると、サービスモデルに基づいて SQL DDL 文が生成され、設定されたデータベースで実行されます。これらの SQL DDL 文は、ドメインモデルとの関連ですでに説明されている cds compile コマンドを使用して手動で作成することもできます。

ここで説明した例で生成された SQL DDL 文を表示するには、ターミナルの CAP プロジェクトのルートディレクトリで以下のコマンドを実行します。

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

ヒント

ターミナルで上記のコマンドを入力する代わりに、 .cds ファイルのコンテキストメニューでエントリ CDS PreviewPreview as sql を選択することもできます。これにより、コマンドラインコマンドと同じ出力が生成されます。

生成された SQL DDL スクリプトには、com_sap_learning_Authors テーブルおよび com_sap_learning_Books テーブルについてすでに説明した CREATE TABLE 文が含まれています。これらは、ドメインモデルのエンティティに属しています。また、図 " 生成済ビュー " に示す CREATE VIEW 文も生成されるようになりました。つまり、サービスモデルの 2 つの射影されたエンティティ Authors および Books が、データベースにビューとして作成されます。これらのビューでは、生成されたモデルテーブルからデータが読み込まれます。

OData サービス

この例で提供される AdminService は、完全に実装された OData V4 サービスです。これは、CAP の汎用ランタイムによって提供され、実装コーディングは必要ありません。

サービスのルート URL に GET 要求を送信すると、サービスによって提供されるリソースが一覧表示されるサービス文書が返されます (図 "サービス文書" を参照)。

ここで説明するサービスには、サービスモデルに基づいて、2 つのエンティティセット作成者およびブックが含まれています。これらは、2 つのサービスエンドポイント /admin/Authors および /admin/Books に関連付けられています。すべての OData CRUD 操作は、これらの 2 つのエンドポイントを介して即座に利用可能な状態でサポートされます。新規作成者またはブックエンティティの登録時に、キー項目に UUID が入力されているため、それぞれの ID キー項目が自動的に入力されます。

デモおよび演習: サービスの定義

注記

演習問題として、SAP Business Application Studio で、以下のデモのステップバイステップの手順を実行します。

演習の開始点として、前の演習問題 "ドメインモデルのキャプチャ" の結果を使用します (正常に完了した場合)。または、以下の GitHub リポジトリのブランチ 2_domain_model を開始点として使用することもできます。

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

シミュレーションの完全な実装は、GitHub リポジトリの 3_service_definition ブランチにあります。

リポジトリのコンテンツとその使用方法の詳細については、ここを参照してください。

サービスの定義方法については、ビデオを視聴してください。