apijson 初探
本文試著用 5W1H 方式切入,試圖快速建立自己對 apijson 的整體認知,所以這不是一趟快速入門的 demo 之旅,而是顯得比較務虛的探索式知識體系整合程序,
持續更新中...
1、Why
前后端開發程序中各種痛點:
- 開發流程繁瑣、周期長
- 前端/客戶端與后端各種扯皮
- 檔案過時-與介面不同步
- 后端拼裝資料費時費力且重復性勞動價值很低,全部交給前端拼裝又浪費流量帶寬
- 等等
誰應該負責徹底解決這個問題?
后端,
怎么解決?
后端實作一種萬能查詢,并能減少絕大部分重復的常規資料CRUD功能及資料拼裝等開發程序,定義一套統一的規范讓前端來學習掌握,以后后端除了維護好這個 DSL 的運行時,就只需要做好資料物體的定義及權限維護可以了,
這里的前端,不一定只是 Web 前端開發,而是包含了更廣義的 Client 端開發的大前端開發人員,比如安卓客戶端開發人員、甚至包含部分在平臺上做小應用的后端開發人員,
前端是時候 Get 一門新技能了,
2、What
官方:
APIJSON 是一種專為 API 而生的 JSON 網路傳輸協議 以及 基于這套協議實作的 ORM 庫,
據個人理解,它定義了一整套 DSL 作為 API Client 的查詢語言(Query Language)的規范(Specification),同時也是的一款對應的后端具體實作(Implementation for the Spec at server side),
是的,這會讓人想起 GraphQL,如果做一些對比作業的話,會發現他們在 Spec 還是有重疊的部分的, 當然,一般國產的都是精品,APIJSON 也不會例外,APIJSON 在功能、安全、性能、易用性、Java 版生態(繼承 JSON 的相關生態) 等方面都會比 GraphQL 更實用易用,
因此,可以考慮為這種 QL 取個名字,比如 ApijsonQL、或者短一點 apiQL,我選 apiQL,
特性設計:
后端
- 提供萬能通用介面,大部分介面不用再寫(后端統一基于apiQL語言提供服務)
- 零碼CRUD(增刪改查)、跨庫連表、嵌套子查詢等(后端將DAO層開放給前端)
- 自動生成介面檔案,不用再撰寫和維護(借助于生態工具)
- 自動管理權限、校驗引數、防 SQL 注入(達到基本的安全要求)
- 開放 API,無需劃分版本,始終保持兼容(后端根本就沒有具體的API)
前端
- 前端不用再向后端開發同事催介面、求檔案(前端基于apiQL語言直接進行DAO)
- 前端能完全定制資料和結構,要啥有啥(前端自行按需拼裝)
- 前端呼叫介面看請求知結果,所求即所得(前端基于apiQL語言直接進行DAO)
- 前端可以一次性獲取任何資料、任何結構(前端自行按需拼裝)
- 前端能夠去除多余資料,節省流量提高速度(前端自行按需拼裝)
介面工具
- 自動實時生成檔案,清晰可讀永遠最新
- 自動校驗與格式化,支持高亮和收展
- 自動生成各端各種語言代碼,一鍵下載
- 自動管理與測驗各介面用例,一鍵共享
- 自動給 JSON 加注釋和檔案,一鍵切換
DSL Specification
Client 應用使用 apiQL 查詢語言來請求支持 apiQL 的服務,
apiQL 是基于 JSON 資料格式定義的一種 DSL,對于 Cleint 開發人員來說,語法學習成本極低,剩下的,主要是熟悉領域特定的部分,
示例報文
請求:
{
"[]":{
"page":0,
"count":3,
"Moment":{},
"User":{
"id@":"/Moment/userId"
},
"Comment[]":{
"count":3,
"Comment":{
"momentId@":"[]/Moment/id"
}
}
}
}
回應:
{
"[]":[
{
"Moment":{
"id":235,
"content":"xxx",
...
},
"User":{
...
},
"Comment[]":[
...
]
},
{
"Moment":{
"id":301,
"content":"xxx",
...
},
"User":{
...
},
...
},
...
],
"code":200,
"msg":"success"
}
DAO/物體服務
apijson 如官方所述作為一款 ORM,其實質是將原來傳統開發模式中的三層架構中的資料持久化層直接開放給前端,即壓縮了領域層和表現層(很薄,僅做可選的權限校驗,但是可以通過重寫方法來自定義權限),幾乎是讓前端的視線直接穿透到資料持久化層來進行他們的對接開發作業,
前端開發需要建立一種新習慣 - 主動進行資料查詢和拼接,而非像以前那般,等待后端拼接好再給出來,當然,也可以延續傳統的開發習慣,由后端人員整理介面格式和生成檔案,再有前端去呼叫,可以無縫銜接;不同的是,后端開發人員并沒有“開發”的程序,只有寫檔案的程序,
具體如何實踐,可以按團隊實際情況來做選擇,
apiQL 中目前支持的 Query 陳述句
- 查詢陣列
- 匹配選項范圍
- 匹配條件范圍
- 包含選項范圍
- 判斷是否存在
- 遠程呼叫函式
- 存盤程序
- 參考賦值
- 子查詢
- 模糊搜索
- 正則匹配
- 連續范圍
- 新建別名
- 增加 或 擴展
- 減少 或 去除
- 比較運算
- 邏輯運算
- 陣列關鍵詞
- 物件關鍵詞
- 全域關鍵詞
DAO 方法
借鑒 Restful Api 中的 verbs 術語,實際請求時全用HTTP POST請求,
- GET: 普通獲取資料
- HEAD: 普通獲取數量
- GETS: 安全/私密獲取資料,用于獲取錢包等對安全性要求高的資料
- HEADS: 安全/私密獲取數量,用于獲取銀行卡數量等對安全性要求高的資料總數
- POST: 新增資料
- PUT: 修改資料,只修改所傳的欄位
- DELETE: 洗掉資料
實際使用時,最好在前端封裝一套對應的 QueryBuilder,得到更 OO-Style 的體驗,而不是記憶一堆“方言”詞匯, 如 apijson-builder,
3、Who/When/Where
適用場景
非金融類場景;中小型前后端分離的專案,尤其是 初創專案、內部專案、低代碼/零代碼、小程式、BaaS、Serverless 等,
簡易Demo
APIJSON-ToDo-Demo 一個簡單的 todo 示例專案,精簡資料,簡化上手流程,帶自定義鑒權邏輯
管理類系統
apijson-examples APIJSON 的前端、業務后端、管理后端 Demo
4、How
按需依賴
- apijson-orm APIJSON ORM 庫,可通過 Maven, Gradle 等遠程依賴
- apijson-framework APIJSON 服務端框架,通過資料庫表配置角色權限、引數校驗等,簡化使用
- apijson-router APIJSON 的路由插件,可控地對公網暴露類 RESTful 簡單介面,內部轉成 APIJSON 格式請求來執行,
- apijson-column APIJSON 的欄位插件,支持 欄位名映射 和 !key 反選欄位
Quick Start
TODO
Best Practices
檔案
- APIJSON 官方檔案 ,提供排版清晰、搜索方便的檔案內容展示,包括設計規范、圖文教程等
- APIJSON 英文檔案 ,提供排版清晰的檔案內容展示,包括詳細介紹、設計規范、使用方式等
視頻教程
APIJSON 后端教程(1):簡介
https://www.bilibili.com/video/BV1vL411W7yd
APIJSON 后端教程(2):資料庫
https://www.bilibili.com/video/BV1eB4y1N77s
APIJSON 后端教程(3):Demo
https://www.bilibili.com/video/BV1FX4y1c7ug
APIJSON 后端教程(4):Boot
https://www.bilibili.com/video/BV18h411z7FK
APIJSON 后端教程(5):Final
https://www.bilibili.com/video/BV1GM4y1N7XJ
APIJSON 后端教程(6):uliweb_apijson
https://www.bilibili.com/video/BV1yb4y1S79v/
APIJSON 后端教程(7):問題答疑
https://www.bilibili.com/video/BV1dQ4y1h7Df
FAQ
https://hanxu2018.github.io/APIJSON-DOC/md/QA/#q-a-常見問題
5、Other
生態
- APIAuto 敏捷開發最強大易用的 HTTP 介面工具,機器學習零代碼測驗、生成代碼與靜態檢查、生成檔案與游標懸浮注釋
- UnitAuto 機器學習單元測驗平臺,零代碼、全方位、自動化 測驗 方法/函式 的正確性和可用性
- SQLAuto 智能零代碼自動化測驗 SQL 陳述句執行結果的資料庫工具
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523982.html
標籤:架構設計
上一篇:如何在Ruby中每次迭代后遍歷陣列并洗掉第一個元素?
下一篇:apijson 初探
