apijson 初探

来源:https://www.cnblogs.com/x3d/archive/2022/10/31/apijson-lowcode.html
-Advertisement-
Play Games

apijson 初探 本文試著用 5W1H 方式切入,試圖快速建立自己對 apijson 的整體認知,所以這不是一趟快速入門的 demo 之旅,而是顯得比較務虛的探索式知識體系整合過程。 持續更新中... 1、Why 前後端開發過程中各種痛點: 開發流程繁瑣、周期長 前端/客戶端與後端各種扯皮 文檔 ...


apijson 初探

本文試著用 5W1H 方式切入,試圖快速建立自己對 apijson 的整體認知,所以這不是一趟快速入門的 demo 之旅,而是顯得比較務虛的探索式知識體系整合過程。

持續更新中...

1、Why

前後端開發過程中各種痛點:

  1. 開發流程繁瑣、周期長
  2. 前端/客戶端與後端各種扯皮
  3. 文檔過時-與介面不同步
  4. 後端拼裝數據費時費力且重覆性勞動價值很低,全部交給前端拼裝又浪費流量帶寬
  5. 等等

誰應該負責徹底解決這個問題?

後端。

怎麼解決?

後端實現一種萬能查詢,並能減少絕大部分重覆的常規數據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。

特性設計:

後端

  1. 提供萬能通用介面,大部分介面不用再寫(後端統一基於apiQL語言提供服務)
  2. 零碼CRUD(增刪改查)、跨庫連表、嵌套子查詢等(後端將DAO層開放給前端)
  3. 自動生成介面文檔,不用再編寫和維護(藉助於生態工具)
  4. 自動管理許可權、校驗參數、防 SQL 註入(達到基本的安全要求)
  5. 開放 API,無需劃分版本,始終保持相容(後端根本就沒有具體的API)

前端

  1. 前端不用再向後端開發同事催介面、求文檔(前端基於apiQL語言直接進行DAO)
  2. 前端能完全定製數據和結構,要啥有啥(前端自行按需拼裝)
  3. 前端調用介面看請求知結果,所求即所得(前端基於apiQL語言直接進行DAO)
  4. 前端可以一次性獲取任何數據、任何結構(前端自行按需拼裝)
  5. 前端能夠去除多餘數據,節省流量提高速度(前端自行按需拼裝)

介面工具

  1. 自動實時生成文檔,清晰可讀永遠最新
  2. 自動校驗與格式化,支持高亮和收展
  3. 自動生成各端各種語言代碼,一鍵下載
  4. 自動管理與測試各介面用例,一鍵共用
  5. 自動給 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 語句

  1. 查詢數組
  2. 匹配選項範圍
  3. 匹配條件範圍
  4. 包含選項範圍
  5. 判斷是否存在
  6. 遠程調用函數
  7. 存儲過程
  8. 引用賦值
  9. 子查詢
  10. 模糊搜索
  11. 正則匹配
  12. 連續範圍
  13. 新建別名
  14. 增加 或 擴展
  15. 減少 或 去除
  16. 比較運算
  17. 邏輯運算
  18. 數組關鍵詞
  19. 對象關鍵詞
  20. 全局關鍵詞

DAO 方法

借鑒 Restful Api 中的 verbs 術語,實際請求時全用HTTP POST請求。

  1. GET: 普通獲取數據
  2. HEAD: 普通獲取數量
  3. GETS: 安全/私密獲取數據,用於獲取錢包等對安全性要求高的數據
  4. HEADS: 安全/私密獲取數量,用於獲取銀行卡數量等對安全性要求高的數據總數
  5. POST: 新增數據
  6. PUT: 修改數據,只修改所傳的欄位
  7. DELETE: 刪除數據

實際使用時,最好在前端封裝一套對應的 QueryBuilder,得到更 OO-Style 的體驗,而不是記憶一堆“方言”辭彙, 如 apijson-builder

3、Who/When/Where

適用場景

非金融類場景;中小型前後端分離的項目,尤其是 初創項目、內部項目、低代碼/零代碼、小程式、BaaS、Serverless 等。

簡易Demo

APIJSON-ToDo-Demo 一個簡單的 todo 示例項目,精簡數據,簡化上手流程,帶自定義鑒權邏輯

管理類系統

apijson-examples APIJSON 的前端、業務後端、管理後端 Demo

4、How

按需依賴

  1. apijson-orm APIJSON ORM 庫,可通過 Maven, Gradle 等遠程依賴
  2. apijson-framework APIJSON 服務端框架,通過資料庫表配置角色許可權、參數校驗等,簡化使用
  3. apijson-router APIJSON 的路由插件,可控地對公網暴露類 RESTful 簡單介面,內部轉成 APIJSON 格式請求來執行。
  4. apijson-column APIJSON 的欄位插件,支持 欄位名映射 和 !key 反選欄位

Quick Start

TODO

Best Practices

文檔

  1. APIJSON 官方文檔 ,提供排版清晰、搜索方便的文檔內容展示,包括設計規範、圖文教程等
  2. 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

生態

  1. APIAuto 敏捷開發最強大易用的 HTTP 介面工具,機器學習零代碼測試、生成代碼與靜態檢查、生成文檔與游標懸浮註釋
  2. UnitAuto 機器學習單元測試平臺,零代碼、全方位、自動化 測試 方法/函數 的正確性和可用性
  3. SQLAuto 智能零代碼自動化測試 SQL 語句執行結果的資料庫工具
本文來源:http://www.cnblogs.com/x3d/,轉載請註明。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ①表級鎖:全局鎖,元數據鎖,意向鎖,AUTO-INC鎖 ②行級鎖:兩階段鎖協議,間隙鎖,臨鍵鎖 ③事務隔離級別,ACID特性 ④死鎖:解決方案 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 最近碰到了一個奇葩需求,要用uni-app來實現usb接入設備的時候,讓軟體自動彈出來,這裡給出我製作的過程和參考的各種思路,希望對大家有所幫助 一.插入usb自動彈出app 因為uni-app代碼里並不支持這個行為,我們需要用Andro ...
  • 1 準備 2 申請App ID 2.1 打開[蘋果開發者官網](https://developer.apple.com),點擊Account登陸賬號。 2.2 進入ID申請 3 創建證書請求文件(*.cerSigningRequest文件) 4 添加軟體開發證書和分發證書 並下載(*.CER文件) ...
  • 一、 問題描述: 華為地圖服務“我的位置”能力,在中國大陸地區,向用戶展示他們在地圖上的當前位置與用戶的實際位置存在較大的偏差。 具體差別可以查看下方的圖片: 二、 偏差較大的原因: 華為Map SDK在中國大陸使用的地理坐標系是GCJ02。 點擊“我的位置”控制項,獲取的定位經緯度的地理坐標系是WG ...
  • 一、下載 node.js的下載地址**Download | Node.js (nodejs.org)** 根據使用系統,選擇對應的安裝包 根據點擊如下按鈕可以選擇歷史版本進行下載 二、安裝 下載好之後直接雙擊安裝即可 三、環境配置 安裝完成後,在系統環境變數配置中將node的路徑添加進去 在CMD中 ...
  • 在做一些常規應用的時候,我們往往需要確定條件的內容,以便在後臺進行區分的進行精確查詢,在移動端,由於受限於屏幕界面的情況,一般會對多個指定的條件進行模糊的搜索,而這個搜索的處理,也是和前者強類型的條件查詢處理類似的處理過程,因此本篇隨筆探討兩種不同查詢在前端界面上的展示效果,以及後端基於.netCo... ...
  • 摘要:在Java中提供了synchronized關鍵字來保證只有一個線程能夠訪問同步代碼塊。既然已經提供了synchronized關鍵字,那為何在Java的SDK包中,還會提供Lock介面呢?這是不是重覆造輪子,多此一舉呢? 本文分享自華為雲社區《【高併發】Java中提供了synchronized, ...
  • 在之前的SqlSugar系列隨筆中,介紹了很多我們關於SqlSugar的開發框架的內容,SqlSugar的開發框架的目的是多前端應用場景,因此其中會包含各種不同的前端應用,前面介紹了基於DevExpress的Winform的前端應用,以及基於Vue3+TypeScript+ElementPlus的B... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...