ApiHug 前端解決方案 - M1 內側


背景

ApiHug UI 解決方案 - ApiHug前后端語義化設計,節約80%以上時間https://apihug.github.io/zhCN-docs/ui

現代前端框架日趨SPA(Single Page Application)化,給前后協同都帶來了挑戰,ApiHug試圖減少多人在前后協同帶來的理解難度,和同步的滯后性。 所以采用了:

  1. 前后項目在同工程中不同子模塊
  2. 工具鏈上融合,?gradle?+?vite, 無縫集成,互相可以調用任務
  3. 運行時,java application 靜態代理 + vue 端 proxy

以實現前后端人員協同最大化,上下文切換最低化,開發效率最大化!

這中新開發方式不是 ApiHug 首創,很早如Jhipster?已在嘗試,當然 ApiHug 也從 Jhipster上獲取了很多靈感;

ApiHug 緊緊圍繞 Open Api 標準,使用DSL作為不同角色之間通用語言,讓這一步推進異常的順利!

下面我們從協議層, 到應用層, 再到UI 層一一帶你一步步領略如何借助 ApiHug 快速而又優雅進行全棧開發!

協議

協議,也就是 ProtoBuffer DSL, 這次沒有任何修改,依然是以前的?Proto DSL

前端完整模版尚未正式發布,還在內側中。

?Structure

├─assets (1)
│  ├─styles
│  │  └─transition
│  └─svg-icon
├─components (2)
│  ├─dashboard
│  └─ui
│      ├─accordion
│      ├─alert
├─composables (3)
├─config  (4)
├─directive (5)
├─layouts (6)
│  └─admin
├─lib (7)
├─locales  (8)
│  └─langs
│      ├─en-US
│      └─zh-CN
├─pages (9)
│  ├─dashboard
│  └─example
├─router (10)
│  └─auto
├─service (11)
│  ├─api
│  ├─form
│  ├─model
│  └─table
├─stores (12)
├─types  (13)
└─utils (14)
DirectoryContent
(1)CSS 風格
(2)組件庫
(3)Hook
(4)配置
(5)指令擴展
(6)布局
(7)三方類
(8)國際化
(9)頁面
(10)路由
(11)服務
(12)狀態
(13)d.ts定義
(14)幫助類

?功能

?Vite

  1. Auto-import
  2. Auto-component
  3. Icon

?Component

?Layout

?Router

?Authority

?Style

  1. Theme
  2. Color
  3. Tailwindcss

?Catalog

?Plugin

?packages

?Trivial

  1. lint
  2. prettier
  3. vscode
  4. format/antfu

?Tip

  1. 生成文件可以在文件備注?// hope-no-merger?禁止生成覆蓋,??無法升級更新

配置

角色定義:

  1. proto 定義標準
  2. app 定義應用
  3. ui 定義交互

源泉均來自?proto生成的協議,然后具由此生成應用基礎,應用再鏈接?ui; 所以一般流程:

  1. 編譯 proto 生成協議
  2. 通過協議 stub 生成 應用
  3. 生成應用過程中選擇是否生成 ui

UI 的生成規則,需要配置給 app, app觸發UI生成;

打開 vue 生成標志,?{app}/build.gradle:

hopeStub {enableFrontVue = true
}

{app}/ui.json:

{"projectDir": "../good-app-ui"
}
PropertyComment
projectDirUI 模塊相對路徑
httpVendor@/service/http, useGet/Post Module
noMergerfalse?預留,未用
outputDirsrc/service, API輸出UI模塊內相對目錄
alwaysEraseOldfalse?預留,未用
formTypeRequestItem?form 類型
formModule../type?form 類型引用路徑
columnTypeResponseItem?column 類型
columnModule../type?column 類型引用路徑
pathToUrlimport { pathToUrl } from '@/service/utils'?path 路徑解析幫助函數
langDirsrc/locales/langs?國際化輸出UI模塊內相對目錄
firstLanguagezh-CN?國際化,第一語言
secondLanguageen-US?國際化,第二語言
typessrc/types?類型輸出UI模塊相對目錄

?編譯

普通執行?stub?命令即可生成 UI 內容:

./gradlew.bat {app}:clean stub build -x test -x stubTest

  1. 國際化
  2. Api Stub
  3. Api Model
  4. form/table Stub
  5. type
  6. 其他
├─assets
│....
├─locales
│  │  
│  └─langs
│      ├─en-US
│      │      app.json
│      │
│      └─zh-CN
│              app.json
├─service
│  │  http.ts
│  │  index.ts
│  │  type.ts
│  │  utils.ts
│  │
│  ├─api
│  │      api-example-api.ts
│  │      api-system-system.ts
│  │      index.ts
│  │
│  ├─form
│  │      TemplateExampleRequest.ts
│  │      UploadBookCoverToLocalRequest.ts
│  │
│  ├─model
│  │      api-example-request-example.ts
│  │      api-example-response-example.ts
│  │      index.ts
│  │
│  └─table
│          TemplateExampleResponse.ts
├─types
│      api.d.ts
│      app.d.ts
│      auth.d.ts

?運行

由于現代的框架都是SPA(Single Page Application)架構,給前后協同都帶來了挑戰,ApiHug試圖減少多人在前后協同帶來的理解難度,和同步的滯后性。 所以采用了:

  1. 前后項目在同工程中不同子模塊
  2. 工具鏈上融合,?gradle?+?vite, 無縫集成,互相可以調用任務
  3. 運行時,java application 靜態代理 + vue 端 proxy

以實現前后端人員協同最大化,上下文切換最低化,開發效率最大化!

?App Build Hook

打包資源依賴 UI 項目打包,同時copy UI 資源?dist?到運行時靜態文件目錄:

    //Really Static resource of the UI to Output Dirtasks.register('copyUIResources', Copy) {dependsOn project(':good-app-ui').tasks.named('build')from project(':good-app-ui').layout.projectDirectory.dir('dist')into "${layout.buildDirectory.get()}/resources/main/static"}tasks.named('processResources') {dependsOn 'copyUIResources'}

?SPA Filter

打開?hope.open.api.enable?標志; 將?api?之外目錄反向到?index.html?入口:

SpaPathChecker DEFAULT =path ->!path.startsWith("/api")&& !path.startsWith("/management")&& !path.startsWith("/v3/api-docs")&& !path.startsWith("/hope/meta")&& !path.startsWith("/h2-console")&& !path.contains(".")&& path.matches("/(.*)");if (checker.passToSpa(path)) {request.getRequestDispatcher("/index.html").forward(request, response);return;
}

然后就可以盡情享受和前端一樣絲滑的便捷和體驗!

?Refer

  1. Jhipster
  2. jmix
  3. vaadin

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77305.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【人工智能】DeepSeek 與 RAG 技術:構建知識增強型問答系統的實戰

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 本文深入探討了如何利用 DeepSeek R1 模型結合檢索增強生成(RAG)技術,構建一個高效的知識增強型問答系統。RAG 技術通過結合信息檢索與生…

強大的AI網站推薦(第五集)—— Suno

網站:Suno 號稱:被許多用戶稱為“最強音樂類AI” 博主評價:早在去年1月,我就已經開始使用過了,從小就有一個音樂夢,奈何五音不全,現在用這個來進行創作音樂,有想AI創造音樂的可以試試…

Sigma-Delta ADC(ΣΔ-ADC)中的量化器簡介

Sigma-Delta ADC(ΣΔ-ADC)是一種高精度的模數轉換器,其中的量化器是其核心組件之一。量化器負責將模擬信號轉換為數字信號,并通過獨特的噪聲整形技術實現高分辨率。接下來,我們將深入了解量化器的各個方面&#xff1a…

Oracle日志系統之附加日志

Oracle日志系統之附加日志 在 Oracle 數據庫中,附加日志(Supplemental Log)是一種增強日志記錄的機制,用于在數據庫的 redo log 中記錄更多的變更信息,尤其是在進行數據遷移、復制和同步等任務時,能夠確保…

使用源碼編譯安裝golang的docker版

編譯規則 1.4之前用C寫的&#xff0c;1.4可編譯后續一直到1.9版本&#xff0c;后續版本實現了自舉&#xff0c;后續版本是go寫的&#xff0c;基本上相互低2個版本能編譯出新版本。 Go < 1.4&#xff1a;C 工具鏈。 1.5 < Go < 1.19&#xff1a;Go 1.4 編譯器。 1.20…

Android平臺 Hal AIDL 系列文章目錄

目錄 1. Android Hal AIDL 簡介2. AIDL 語言簡介3. Android 接口定義語言 (AIDL)4. 定義AIDL 接口5. AIDL 中如何傳遞 Parcelable 對象6. 如何使用AIDL 定義的遠程接口進行跨進程通信7. 適用于 HAL 的 AIDL8. Android Hal AIDL 編譯調試9. 高版本Android (AIDL HAL) 沿用HIDL方…

【失敗】Gnome將默認終端設置為 Kitty

起因 一會兒gnome-terminal一會兒kitty終端&#xff0c;實在是受不了&#xff0c;決定取締默認的gnome-terminal。 過程 在 Ubuntu 或 Debian 系統上&#xff1a; 確保 Kitty 已經安裝。如果未安裝&#xff0c;可以在終端中運行命令sudo apt install kitty -y進行安裝。 使用系…

Linux工具學習之【gcc/g++】

&#x1f4d8;前言 書接上文&#xff0c;我們已經學習了 Linux 中的編輯器 vim 的相關使用方法&#xff0c;現在已經能直接在 Linux 中編寫C/C代碼&#xff0c;有了代碼之后就要嘗試去編譯并運行它&#xff0c;此時就可以學習一下 Linux 中的編譯器 gcc/g 了&#xff0c;我們一…

微信小程序文字混合、填充動畫有效果圖

效果圖 .wxml <view class"text" style"--deg:{{deg}}deg;"><view>混合父級顏色</view> </view> <view class"fill {{status?action:}}">文字顏色填充</view> <button bind:tap"setStatus"…

C++:PTA L1-006 連續因子

一個正整數 N 的因子中可能存在若干連續的數字。例如 630 可以分解為 3567&#xff0c;其中 5、6、7 就是 3 個連續的數字。給定任一正整數 N&#xff0c;要求編寫程序求出最長連續因子的個數&#xff0c;并輸出最小的連續因子序列。 輸入格式&#xff1a; 輸入在一行中給出一…

分享:批量提取圖片文字并自動命名文件,ocr識別圖片指定區域并重命名文件名工具,基于WPF和騰訊OCR識別的接口的視線方案

一、項目背景 在處理大量圖片時,常常需要從圖片中提取特定區域的文字信息,并依據這些信息對圖片進行重命名。例如,在檔案管理領域,大量紙質文件被掃描成圖片后,需要從圖片中提取關鍵信息(如文件編號、日期等)來重命名圖片,以便后續的檢索和管理;在電商領域,商家可能…

匯編語言中的數據

在匯編語言中&#xff0c;程序都是由指令流構成的&#xff0c;而指令一般是由操作符和操作數組成的&#xff0c;操作符是CPU用來完成某項功能的操作&#xff0c;而操作數是操作符所處理加工的對象。比如&#xff1a;add eax, 42&#xff0c;add是執行一個加法運算的操作符&…

C++17 信號量模擬實現

C17 信號量模擬實現 一、實現原理 C17 標準庫沒有原生信號量(C20才有)&#xff0c;但可以通過 std::mutex std::condition_variable 模擬實現。以下是核心邏輯&#xff1a; #include <mutex> #include <condition_variable>class CountingSemaphore { private:…

C++ 網絡層接口設計與實現:基于 Socket 編程

在網絡編程中&#xff0c;網絡層是 OSI 七層模型中負責將數據從源節點傳輸到目的節點的關鍵層次。在 C 中&#xff0c;網絡層的功能通常通過 Socket 編程接口來實現。Socket 提供了一種抽象機制&#xff0c;允許應用程序通過網絡發送和接收數據。本文將詳細介紹如何在 C 中使用…

uniapp中uni-easyinput 使用@input 不改變綁定的值

只允許輸入數字和字母 使用input 正則replace后賦值給A 遇到問題: 當輸入任意連續的非法字符時, 輸入框不變. 直到輸入一個合法字符非法字符才成功被過濾. <uni-forms-item label"納稅人識別號" name"number"><uni-easyinput v-model"numb…

Docker安裝hoppscotch

Docker安裝hoppscotch 1 簡介 1.1 Hoppscotch?系統 ?Hoppscotch?是一個輕量、高效的[API開發生態系統&#xff0c;開源于2020年&#xff0c;原名Postwoman&#xff0c;后更名為Hoppscotch。它基于Node.js構建&#xff0c;支持多種HTTP請求方法&#xff0c;包括GET、POST、…

1.Axum 與 Tokio:異步編程的完美結合

摘要 深入解析 Axum 核心架構與 Tokio 異步運行時的集成&#xff0c;掌握關鍵原理與實踐技巧。 一、引言 在當今的軟件開發領域&#xff0c;高并發和高性能是衡量一個系統優劣的重要指標。對于 Web 服務器而言&#xff0c;能夠高效地處理大量并發請求是至關重要的。Rust 語言…

CSS偽元素

偽元素 偽元素 用于在元素的內容前后或特定部分插入虛擬元素&#xff0c;并為其添加樣式&#xff0c;無需修改 HTML 結構。 語法&#xff1a;使用雙冒號 ::&#xff08;現代規范&#xff09; 以下是一些常見的CSS偽元素的示例&#xff1a; 1.::before &#xff1a; 在元素內…

easyexcel使用模板填充excel坑點總結

1.單層map設置值是{屬性}&#xff0c;那使用兩層map進行設置值&#xff0c;是不是可以使用{屬性.屬性}&#xff0c;以為取出map里字段只用{屬性}就可以設置值&#xff0c;那再加個.就可以從里邊map取出對應屬性&#xff0c;沒有兩層map寫法 填充得到的文件打開報錯 was empty (…

在Ubuntu服務器上部署xinference

一、拉取鏡像 docker pull xprobe/xinference:latest二、啟動容器&#xff08;GPU&#xff09; docker run -d --name xinference -e XINFERENCE_MODEL_SRCmodelscope -p 9997:9997 --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0 # 啟動一個新的Docker容…