现在,让我们了解如何创建服务以访问提供的数据模型。
观看视频,了解服务模型。
注意
CAP 支持开箱即用的协议 OData V4 和 REST。此外,还可以使用开源包 @cap-js/graphql 提供 GraphQL。缺省协议为 OData V4。
在本课中,我们将仅限于创建服务定义和自动为公开实体提供所有 CRUD 操作的 OData V4 协议适配器。稍后,我们还将讨论如何实施自定义域逻辑。
Objective
现在,让我们了解如何创建服务以访问提供的数据模型。
观看视频,了解服务模型。
注意
CAP 支持开箱即用的协议 OData V4 和 REST。此外,还可以使用开源包 @cap-js/graphql 提供 GraphQL。缺省协议为 OData V4。
在本课中,我们将仅限于创建服务定义和自动为公开实体提供所有 CRUD 操作的 OData V4 协议适配器。稍后,我们还将讨论如何实施自定义域逻辑。
现在,我们来看看如何使用 CDS(CDS 定义语言)和 CQL(CDS 查询语言)编写服务定义。为此,我们在 CAP 项目的 srv 文件夹中创建扩展名为 .cds 的文件。文件的名称是任意的,在我们的示例中,我们使用 admin-service.cds 作为名称(请参阅图"简单服务定义")。

在服务定义的第 1 行中,使用 using 指令从域模型中导入定义。指定的 from 路径(以 ../ 开头)相对于服务定义所在的 srv 文件夹进行解析。这将从 db/schema.cds 文件导入命名空间前缀为 com.sap.learning 的所有定义。为导入的定义设置本地别名 db。
行 4 到 9 包含一个 service 块,该块将名为 AdminService 的服务接口定义为公开实体的集合。此服务供管理员在应用程序内管理作者和书籍。
默认情况下,公开服务的端点根据其名称构建,遵循某些约定(省略字符串 'Service' 并强制使用 kebab-case)。如果要覆盖缺省路径或将其显式化,可以像示例中一样添加 @path 注释。在此,@path 注释指定可在其下访问此服务的 URL 路径,即 /admin。
服务公开的实体通常是基础数据模型中实体的预测。使用 as select from 或 as projection on 的标准视图定义可用于公开实体。
在管理服务中将两个实体定义为投影:
注意
所示示例中的服务定义允许以 1:1 的方式访问基础数据。
实施服务模型后在终端中运行 cds watch 命令时,除域模型外,还将显示从上述 srv/admin-service.cds 文件加载服务模型。终端还显示 AdminService 通过路径 "/admin" 提供服务。
执行 cds watch 时,SQL DDL 语句基于服务模型生成,并在配置的数据库中执行。也可以使用与域模型相关的已讨论的 cds compile 命令手动创建这些 SQL DDL 语句。
要显示为此处讨论的示例生成的 SQL DDL 语句,请在终端的 CAP 项目的根目录中执行以下命令:
1cds compile srv/admin-service.cds --to sql提示
生成的 SQL DDL 脚本包含上面已针对 com_sap_learning_Authors 和 com_sap_learning_Books 表讨论的 CREATE TABLE 语句。它们属于域模型中的实体。此外,现在还会生成"生成的视图"一图中显示的 CREATE VIEW 语句。这意味着服务模型中的两个投影实体"作者"和"工作簿"在数据库中创建为视图。视图从生成的模型表中读取数据。

示例中提供的 AdminService 是完全实施的 OData V4 服务 - 由 CAP 的通用运行时提供,无需任何实施编码。
如果向服务的根 URL 发送 GET 请求,则将收到服务文档,其中列出了服务提供的资源(请参阅图"服务文档")。

此处讨论的服务包含(基于服务模型)两个实体集"作者"和"工作簿"。它们与两个服务端点 /admin/Authors 和 /admin/Books 相关联。通过这两个端点,支持开箱即用的所有 OData CRUD 操作。创建新作者或工作簿实体时,会自动填充相应的标识代码字段,因为键值字段已使用 UUID 键入。
注意
在练习中,在 SAP Business Application Studio 中自行执行以下演示中的分步说明。
作为练习的起点,如果已成功完成,请使用之前的练习 捕获域模型 的结果。或者,您还可以使用以下 GitHub 资源库中的分支 2_domain_model 作为起点:
https://github.com/SAP-samples/cap-development-learning-journey
可在 GitHub 资源库的 3_service_definition 分支中找到模拟的完整实施。
有关资源库内容及其使用方法的详细信息,可在此处找到。
观看视频,了解如何定义服务。