日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cuba 平台_CUBA平台:TypeScript SDK和REST API

發(fā)布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cuba 平台_CUBA平台:TypeScript SDK和REST API 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

cuba 平臺

在本文中,我們將討論已存在很長時間但尚未廣為人知的CUBA平臺的功能- 前端SDK生成器 ,并了解它如何與CUBA的REST API插件一起使用 。

Java + JavaScript –網(wǎng)絡婚姻

僅八年前,我們Java開發(fā)人員在我們的Web應用程序中使用JavaScript作為“第二等公民”語言。 那時,它的目的是通過JSF,Struts,Tapestry或Thymeleaf等框架向服務器端生成的網(wǎng)頁添加一些動態(tài)。 如今,我們見證了JavaScript的出現(xiàn),它是使用React,Vue或Angular等框架進行客戶端開發(fā)的第一語言,而Node.js甚至可以將其引入服務器端。

實際上,我們開發(fā)的Web應用程序可能在不同的層上使用不同的語言:JavaScript用于客戶端UI,Java用于業(yè)務邏輯處理,SQL用于從數(shù)據(jù)庫中獲取數(shù)據(jù),Python用于數(shù)據(jù)分析,等等。使用各種技術將所有這些語言組合到一個應用程序中。 最常見的示例– REST API。 基于與平臺無關的HTTP協(xié)議和簡單的JSON格式,現(xiàn)在它是拼接客戶端JS和服務器端Java的默認方法。

但是即使是最好的針腳也不能無縫。 API定義始終存在一個問題:要調(diào)用的方法,數(shù)據(jù)模型是什么以及我們應該將街道地址作為結構化對象還是作為字符串傳遞。

我們?nèi)绾尾拍軒椭覀僇avaScript研究員更快地創(chuàng)建代碼并避免溝通不暢?

Swagger是最終答案嗎?

你說“ 招搖 ”,對。 Swagger實際上是用于設計,構建,記錄和使用REST API的工業(yè)標準。 有許多代碼生成器可幫助生成用于不同語言的客戶端SDK。

CUBA Framework支持Swagger,每個帶有REST API插件的應用程序都有一個端點,該端點允許下載.json或.yaml格式的Swagger文檔。 您可以使用這些文件來生成JS客戶端。

請考慮以下事實:Swagger只是一個API文檔工具。 但是,前端開發(fā)人員希望在API中看到什么樣的信息? “經(jīng)典”方法是:將業(yè)務功能映射到服務并構建定義良好的API。 然后將其公開為一組REST服務,添加Swagger文檔并享受。

那么,為什么GraphQL趕上趨勢,在前端開發(fā)人員中引起轟動? 并注意GraphQL在Web API世界中的份額正在增長。 到底是怎么回事? 事實證明,有時為前端開發(fā)人員提供更多“通用” API會更容易,從而避免為可能經(jīng)常更改的用例創(chuàng)建很多小型API。 例如,在Web UI中,對于您的購物籃,您只需要先訂購價格,然后再訂購總額的訂單,依此類推。GraphQL還是一個??很好的工具,可以避免過度獲取和獲取不足,以及一次查詢多個API以獲得一個復雜的數(shù)據(jù)結構。

好的,看起來應用程序不僅應該公開服務,還應該公開一些通用API。 這種方法允許前端開發(fā)人員調(diào)用復雜的業(yè)務功能,并為他們提供一定程度的靈活性,因此,如果他們只需要UI的不同數(shù)據(jù)表示形式,則他們不會請求更改API。

Swagger或GraphQL或OData都無法解決另一個問題-如果更改了某些內(nèi)容,該如何處理生成的客戶端代碼。 直接的一次性代碼生成很簡單,但是支持卻是另一回事。 在刪除實體的屬性后,如何確保前端應用程序不會失敗?

因此,為了加速前端開發(fā)并簡化后端團隊和前端團隊之間的協(xié)作,我們需要:

  • 公開特定于業(yè)務的API和通用API
  • 根據(jù)后端數(shù)據(jù)模型和方法簽名生成前端代碼
  • 以最小的努力和潛在的錯誤修改生成的代碼
  • 我們在REST中使用REST API附加組件和前端SDK生成器來面對所有這些挑戰(zhàn)。

    CUBA TypeScript SDK

    在CUBA中,REST API附加組件提供以下功能:

    • 數(shù)據(jù)模型上的CRUD操作
    • 執(zhí)行預定義的JPQL查詢
    • 執(zhí)行服務方法
    • 獲取元數(shù)據(jù)(實體,視圖,枚舉,數(shù)據(jù)類型)
    • 獲取當前用戶權限(訪問實體,屬性,特定權限)
    • 獲取當前的用戶信息(名稱,語言,時區(qū)等)
    • 處理文件

    因此,我們擁有從任何前端客戶端使用該應用程序所需的一切。 所有這些API都在不拘一格的YAML或JSON文件中進行了描述,因此您可以立即開始實施該應用程序。

    為REST API用戶設置安全規(guī)則對于防止意外的端點暴露給所有用戶非常重要。 首先,拒絕所有用戶的常規(guī)REST API訪問,然后為需要訪問所需功能的角色創(chuàng)建特殊權限。

    但是CUBA不僅提供REST API。 您可以生成一個SDK , 該SDK可以用作任何前端開發(fā)框架的基礎:React,Angular,Vue或其他。

    使用生成器,您可以創(chuàng)建一組TypeScript類,該類允許您從客戶端應用程序調(diào)用CUBA API。

    要生成SDK,您只需運行

    npm install -g @cuba -platform/front-generator

    然后

    gen-cuba-front sdk:all

    所有課程將為您創(chuàng)建。 您甚至可以基于ReactJS生成一個簡單的UI,因此您的客戶將能夠立即開始使用基于CUBA的應用程序。 用戶界面非常基本,但是使用CUBA,您將立即獲得所有功能,包括身份驗證,基于角色的數(shù)據(jù)訪問,實體圖檢索等。

    讓我們仔細看一下SDK的功能。

    資料模型

    應用程序數(shù)據(jù)模型表示為TypeScript類的集合。 如果我們看一下QuickStart中使用的Session Planner應用程序,則那里有一個實體:

    @NamePattern ( "%s %s|firstName,lastName" ) @Table (name = "SESSIONPLANNER_SPEAKER" ) @Entity (name = "sessionplanner_Speaker" ) public class Speaker extends StandardEntity { @NotNull @Column (name = "FIRST_NAME" , nullable = false ) protected String firstName; @Column (name = "LAST_NAME" ) protected String lastName; @Email @NotNull @Column (name = "EMAIL" , nullable = false , unique = true ) protected String email; //Setters and getters here }

    在SDK中,我們將獲得一個類:

    export class Speaker extends StandardEntity { static NAME = "sessionplanner_Speaker" ; firstName?: string | null ; lastName?: string | null ; email?: string | null ; }

    所有關聯(lián)和組成都將被保留,因此您將能夠獲取實體圖,而不必使用多個API調(diào)用一一獲取實體。

    不再需要DTO-您將獲得與后端所述完全相同的數(shù)據(jù)。

    商業(yè)服務

    通過CUBA中的REST公開的所有服務將在SDK中具有TypeScript表示形式。 例如,如果我們使用REST API公開會話服務 ,您將獲得一個如下所示的TypeScript代碼:

    export var restServices = { sessionplanner_SessionService: { rescheduleSession: (cubaApp: CubaApp, fetchOpts?: FetchOptions) => (params: sessionplanner_SessionService_rescheduleSession_params) => { return cubaApp.invokeService( "sessionplanner_SessionService" , "rescheduleSession" , params, fetchOpts); } } };

    因此,您只需編寫以下行就可以從UI調(diào)用它:

    restServices.sessionplanner_SessionService.rescheduleSession(cubaREST)({session, newStartDate}).then( (result) => { //Result handling });

    方便,不是嗎? 所有常規(guī)工作都為您完成。

    通用API

    如果僅需要為前端實現(xiàn)自定義邏輯,則始終可以使用在核心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在服務器端驗證所有非匿名調(diào)用,并防止獲取不符合用戶角色的實體或?qū)傩浴?

    cubaREST.loadEntities<Speaker>(Speaker.NAME).then( (result => { //Result handling }));

    使用此通用API,開發(fā)人員可以使用在通用CRUD上創(chuàng)建的自定義API層創(chuàng)建JS應用程序,并將其部署到實現(xiàn)“ 后端前端 ”架構模式的node.js服務器。 而且,用這種方法可能實現(xiàn)了多個API層,我們可以為不同的客戶端實現(xiàn)一組不同的API:ReactJS,Native iOS等。實際上,生成的SDK是此用例的理想工具。

    通用API的不好之處在于,當您獲取的屬性超出了所需的屬性或者API描述符中的屬性不足時,可能會導致數(shù)據(jù)獲取不足或獲取過多的風險。 CUBA的實體視圖在后端解決了這個問題,我們?yōu)榍岸碎_發(fā)人員提供了相同的選擇! 對于每個生成的TypeScript類,我們創(chuàng)建反映視圖的類型:

    export type SpeakerViewName = "_minimal" | "_local" | "_base" ; export type SpeakerView<V extends SpeakerViewName> = V extends "_minimal" ? Pick<Speaker, ? Pick<Speaker, "id" | "firstName" | "lastName" > : V extends "_local" ? Pick<Speaker, ? Pick<Speaker, "id" | "firstName" | "lastName" | "email" > : V extends "_base" ? Pick<Speaker, ? Pick<Speaker, "id" | "firstName" | "lastName" | "email" > : never;

    因此,您可以從后端獲取實體,并且只會獲取指定的屬性。 因此,您無需猜測提取了哪些屬性。 IDE將幫助您自動完成代碼。

    API更新

    如前所述,代碼生成甚至不占開發(fā)工作的一半。 更改和支持代碼是大多數(shù)工作要做的地方。 CUBA的TypeScript SDK生成器在后續(xù)運行期間分析代碼,跟蹤更改并以增量方式對其進行更新。 如果您將TypeScript用作前端的主要開發(fā)語言,TypeScript編譯器將確保您不會忘記更新使用SDK的自定義代碼。

    結論

    除了通用UI之外,如果您還想為CUBA應用程序開發(fā)基于JS的客戶端UI(React / React Native或Angular或Vue),則可以使用REST API插件和TypeScript SDK。 無論您決定使用哪種技術,都可以專注于設計或性能以提供最佳的用戶體驗,而不必執(zhí)行常規(guī)的編碼任務。 而且,您可以確定JS到Java的通信以及對不斷變化的API的支持將是您遇到的最小問題。

    翻譯自: https://www.javacodegeeks.com/2019/11/cuba-platform-typescript-sdk-and-rest-api.html

    cuba 平臺

    總結

    以上是生活随笔為你收集整理的cuba 平台_CUBA平台:TypeScript SDK和REST API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。