首页 > 其他分享 >apijson 初探

apijson 初探

时间:2022-10-26 18:58:28浏览次数:50  
标签:apijson ... 前端 接口 文档 初探 数据 apiQL

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 还是有重叠的部分的。

因此,可以考虑为这种 QL 取个名字,比如 ApijsonQL、或者短一点 apiQL。我选 apiQL。

特性:

后端

  1. 提供万能通用接口,大部分接口不用再写
  2. 零码CRUD(增删改查)、跨库连表、嵌套子查询等
  3. 自动生成接口文档,不用再编写和维护
  4. 自动管理权限、校验参数、防 SQL 注入
  5. 开放 API,无需划分版本,始终保持兼容

前端

  1. 前端不用再向后端开发同事催接口、求文档
  2. 前端能完全定制数据和结构,要啥有啥
  3. 前端调用接口看请求知结果,所求即所得
  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 的体验,而不是记忆一堆“方言”词汇。

3、Who/When/Where

适用场景

非金融类场景;中小型前后端分离的项目,尤其是 初创项目、内部项目、低代码/零代码、小程序、BaaS、Serverless 等。

简易Demo

TODO

管理类系统

TODO

4、How

Best Practices

5、Other

生态

  1. APIAuto: HTTP 接口工具,机器学习零代码测试、生成代码与静态检查、生成文档与光标悬浮注释
  2. UnitAuto: 机器学习单元测试平台,零代码、全方位、自动化 测试 方法/函数 的正确性和可用性
  3. SQLAuto: 智能零代码自动化测试 SQL 语句执行结果的数据库工具

标签:apijson,...,前端,接口,文档,初探,数据,apiQL
From: https://www.cnblogs.com/x3d/p/apijson-lowcode.html

相关文章

  • 千万级别mysql 分库分表后表分页查询优化方案初探
    在实际的软件系统开发过程中,随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大。以订单表为例,假如每天的订单量在4万左右,那么一个月的订单量......
  • 产品经理:初探
    产品经理定义      产品经理成长路径         产品经理能力模型          如何提升产品力   ......
  • Android 编译系统初探
    零.从HelloWorld.cpp说起下面是一个最简单的C++程序,我们通过它来引入我们今天要讲解的Android编译系统/****************************************************************......
  • 初探c语言第四天
    循环结构程序设计while语句循环变量初始化在此语句之前完成while(条件){         }条件为真,执行下面的语句。dowhile语句do{       }while(条......
  • Hyperledger Cactus(一):架构初探
    Hyperledgercactus是一个区块链集成框架,能够在多个分布式账本上执行交易,最大的特点是灵活可插拔的架构,官方定义:SDKofSDKs。Cactus现在已经支持的分布式账本有Hyperledg......
  • 从alexnet到resnet,初探深度学习算法玩摄影
    编辑:叶琰简介今天说的是初探,那就是说,目的是为了让大家先有一个比较直观的感受,主要集中在有监督算法上。总体来说,就是指在底层特征的提取上,利用了从Alexnet开始,到最新的模型......
  • Thinkphp5.1应用初探
    直接审计tp的话应该会很有难度,不妨先了解一些tp内置规则和用法,便于在后续的审计中更好的理解代码含义。源码下载链接ThinkPHP5.1开发手册安装没有composer可以去下......
  • 阿里巴巴开源限流组件Sentinel初探之集成Gateway
    1Sentinel主页​​github.com/alibaba/Sen…​​1.1Sentinel介绍随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式服务架构的流量控制组件,......
  • 初探C语言第三天
    选择结构程序设计if语句1.if(判断条件)执行动作;或if(判断条件){执行动作超过一个} 这次没有;​2.if(判断条件)语句1;else 语句2;3.嵌套条件句注意else和上面最接近的if配对,如若有......
  • mongo 初探触发器
    前言mongo作为出名的nosql数据库,随着版本的迭代,被越来越多的开发者所接受,DB-EnginesRanking-popularityrankingofdatabasemanagementsystems而我们今......