TypeScript SDK 和 REST API (2)

      该功能会创建所有的 SDK 类。甚至能基于 ReactJS 直接生成一个简单的 UI,这样客户能立即使用基于 CUBA 的应用程序。虽然生成的 UI 非常基础,但是由于集成了 CUBA,所有 CUBA 的功能都可以使用,包括身份验证、基于角色的数据访问、实体图的查询等等。

      下面我们看看 SDK 里面到底包含了什么。

数据模型

      应用程序的数据模型在 SDK 中是一组 TypeScript 的类。以快速开始中的 Session Planner 为例,Java 中有一个实体:

TypeScript SDK 和 REST API

      然后在 SDK 中,会生成一个对应的类:

TypeScript SDK 和 REST API

      所有的数据关联关系和组合关系也都会保留,因此可以直接获取实体关系图而不需要调用多个 API 一个一个的获取各个实体了。

      另外,这里也没有 DTO,获取到的数据跟后台描述的一样。

业务逻辑服务

      在 SDK 中,所有开放的 CUBA REST 服务都会在 TypeScript 中得到体现。比如,如果我们用 REST API 开放了 Session Service 的接口,TypeScript 中的代码会是这样:

TypeScript SDK 和 REST API

      可以在前端代码中这样调用:

      很方便吧?繁杂的 routine 工作都通过生成的代码完成了。

通用 API

      如果自定义逻辑只需要在前端实现的话,可以直接使用在核心 CUBA 平台 REST 库中定义的一组功能,例如:

            loadEntities<T>(entityName: string, options?: EntitiesLoadOptions, fetchOptions?: FetchOptions): Promise<Array<SerializedEntity<T>>>;

            deleteEntity(entityName: string, id: any, fetchOptions?: FetchOptions): Promise<void>;

      这些方法提供了对应用程序中实体 CRUD 粒度的访问操作。访问的安全性也依然存在,CUBA会在服务器端验证所有非匿名调用,并防止用户获取不符合其角色的实体或属性:

            cubaREST.loadEntities<Speaker>(Speaker.NAME).then( (result => {

               //Result handling

            }));

      通过使用这些通用的 API,开发人员可以用 JS 在基于实体 CRUD 之上创建自定义的 API 层应用程序,并将其部署至 Node.js,以实现“服务于前端的后端”架构模式。而且,用这种方式创建的 API 层可以是多个,比如我们可以为不同的客户端创建不同的 API 层:ReactJS,原生 iOS等等。这种用例场景下,自动生成的 SDK 是最理想的工具。

      一般情况下,通用 API 的不足之处在于,获取的属性超过了所需的属性或者API描述符中的属性不足时,可能会导致数据获取不足或获取过多的风险。 但是,CUBA 的实体视图在后端解决了这个问题,我们为前端开发人员也提供了同样的方法! 对于每个生成的TypeScript类,我们创建能反映视图的类型:

TypeScript SDK 和 REST API

      因此,可以从后端获取实体并且只获取后端视图指定的属性。这样的话,不需要去猜测到底拿到了哪些属性,IDE 会自动帮你补全:

TypeScript SDK 和 REST API

API 更新

      如之前所述,代码生成只是开发过程中的很小一部分。代码改动和持续的支持才是耗费时间的地方。CUBA 的 TypeScript SDK 生成器在随后的运行期间会分析代码,跟踪改动并进行增量更新。 如果您将 TypeScript 作为前端的主要开发语言,TypeScript 编译器也会确保您不会忘记更新使用 SDK 的自定义代码。

总结

      除了基于 Vaadin 的通用 UI 之外,如果您还想为 CUBA 应用程序开发基于 JS 的客户端(React / React Native,Angular 或 Vue 等),则可以使用 REST API 扩展插件和 TypeScript SDK。通过使用 TypeScript SDK,不论使用何种前端技术,您都可以只关注设计或者性能,以便提供最佳的用户体验,而不需要做重复冗余的工作。并且几乎可以肯定 JS 和 Java 之间的通信以及支持 API 变化将会是您开发过程中最小的问题。

      了解 CUBA 平台,请访问 CUBA 中文官网。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgpjx.html