本文试着用 5W1H 方式切入,试图快速建立自己对 apijson 的整体认知,所以这不是一趟快速入门的 demo 之旅,而是显得比较务虚的探索式知识体系整合过程。
持续更新中...
后端。
后端实现一种万能查询,并能减少绝大部分重复的常规数据CRUD功能及数据拼装等开发过程,定义一套统一的规范让前端来学习掌握,以后后端除了维护好这个 DSL 的运行时,就只需要做好数据实体的定义及权限维护可以了。
这里的前端,不一定只是 Web 前端开发,而是包含了更广义的 Client 端开发的大前端开发人员,比如安卓客户端开发人员、甚至包含部分在平台上做小应用的后端开发人员。
前端是时候 Get 一门新技能了。
官方:
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。
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"
}
apijson 如官方所述作为一款 ORM,其实质是将原来传统开发模式中的三层架构中的数据持久化层直接开放给前端,即压缩了领域层和表现层(很薄,仅做可选的权限校验,但是可以通过重写方法来自定义权限),几乎是让前端的视线直接穿透到数据持久化层来进行他们的对接开发工作。
前端开发需要建立一种新习惯 - 主动进行数据查询和拼接,而非像以前那般,等待后端拼接好再给出来。当然,也可以延续传统的开发习惯,由后端人员整理接口格式和生成文档,再有前端去调用,可以无缝衔接;不同的是,后端开发人员并没有“开发”的过程,只有写文档的过程。
具体如何实践,可以按团队实际情况来做选择。
借鉴 Restful Api 中的 verbs 术语,实际请求时全用HTTP POST请求。
实际使用时,最好在前端封装一套对应的 QueryBuilder,得到更 OO-Style 的体验,而不是记忆一堆“方言”词汇, 如 apijson-builder。
非金融类场景;中小型前后端分离的项目,尤其是 初创项目、内部项目、低代码/零代码、小程序、BaaS、Serverless 等。
APIJSON-ToDo-Demo 一个简单的 todo 示例项目,精简数据,简化上手流程,带自定义鉴权逻辑
apijson-examples APIJSON 的前端、业务后端、管理后端 Demo
TODO
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
https://hanxu2018.github.io/APIJSON-DOC/md/QA/#q-a-常见问题
0.引言在日常学习和工作中,我们经常需要进行写作,而写作不仅需要语言技巧和文学知识,还需要丰富的素材和思维的深度。随着人工智能技术的发展,ChatGPT等工具已经能够帮助我们解决这一问题。本文将介绍ChatGPT的应用场景以及如何使用它来进行写作。1.话题和题干成年人的心动有多珍贵心动是珍贵的瞬间,它推动我们追求梦想,给我们带来无限的希望。请描述一下你或他人在心动的鼓舞下所做出的努力,并论述心动对成年人生活的重要性。例如,当你爱上一个人的时候,你会有怎样的心动感受;当你为了实现梦想而奋斗时,心动会给你带来怎样的支持。题目自拟,字数800。2.写作思路描写男女邂逅的事情有可能落入俗套。所以,我们
概述BlueALSA(BluetoothAudioALSA)是一种将蓝牙音频设备连接到ALSA音频系统的桥接程序。它提供了一个蓝牙音频设备的ALSA插件,允许使用ALSAAPI直接从蓝牙音频设备读取和写入音频数据,从而使得蓝牙音频设备能够以与其他ALSA兼容设备相同的方式工作。BlueALSA的主要功能如下:ALSA插件:提供一个ALSA插件,可以将蓝牙音频设备映射到ALSA设备节点上,使其可以像其他ALSA设备一样被应用程序使用。音频格式转换:支持将蓝牙音频设备的音频格式转换为ALSA支持的格式,以便在ALSA系统中进行处理和播放。延迟控制:提供了延迟控制机制,以便在数据传输过程中进行延迟控
目录前言MySQL是什么?MySQL版本表的概念表中的列和数据类型行主键什么是SQL实践操作小结前言周所周知MySQL已成为全世界最受欢迎的数据库之一。无论你用的何种编程语言在开发系统,数据库基本上都是必不可少的。无论是小型项目开发如我们开发一个个人博客系统,还是构建那些声名显赫的网站如某宝、某讯等,MySQL都有着稳定、可靠、快速等优点。可以胜任数据存储的业务需求。我们今天就来一探MySQL,走入MySQL。MySQL是什么?数据库是以某种有组织的方式保存数据的容器,我们可以将其理解为一个文件柜。我们常见的容器有Oracle、DB2、SQLServer、Postgresql、mongodb等
谈到无人机/无人车仿真,首先想到的大概就是gazebo,但现在都快进入元宇宙时代了(手动狗头),还再继续使用gazebo这种上个时代的产品就显得不够hack,是时候了解和学习下新事物--Airsim了。Airsim是由微软开源的无人机/无人车仿真工具,其本质是UE4(虚幻引擎)的一个插件,所以Airsim可以在任何UE4的3D场景地图中运行,可以充分利用epic商城提供的免费、付费地图。在我探索Airsim的几周来,发现Airsim的优点在于:1、PX4支持,并且支持其他多种飞行模式。2、Python支持完善,官方提供大量pythondemo,可以快速进行算法可行性验证。3、开箱即用,几乎内置
说到虚拟化,大家最先联想到的几个名词应该是虚拟机,服务器。今天要介绍的虚拟化,是路由与交换技术里面的虚拟化技术。在网络上,将多个网络设备虚拟化成一个整体的逻辑设备的技术,就称为虚拟化技术。通过交换机虚拟化技术,既可以在逻辑上集成多台物理连接的交换机,实现拓宽虚拟交换机带宽、提升转发效率的目的,也可以在逻辑上将一台物理交换机虚拟为多台虚拟交换机,实现业务隔离、提升可靠性的目的。虚拟化有横向虚拟化和纵向虚拟化,其中横行虚拟化技术常用的有堆叠、m-lag,vrrp。今天我们主要了解下m-lag技术。了解m-lag之前,我们先了解下以往数据中心常用的横向虚拟化技术-堆叠。从上图我们可以看到堆叠就是将两
背景 在一些业务场景中,会有如下的一些要求:比如有用户需要将Mp4视频转为Gif动图。当然有一些小伙伴说可以使用系统截图,然后使用之前提到过的技术:GIF图像动态生成-JAVA后台生成。需要处理的素材比较少,就一两个视频,确实可以通过这种方式来处理。试想一下,如果需要处理上百个,做处理的小伙伴是不是就抓狂了,这完全是实打实的工作量。那有没有直接从Mp4转成gif动态图的技术呢?运营的小伙伴就能按时下班了。 经过一番查询,找到一些思路,Mp4视频的组成也是一帧一帧的图像组成的。如果有什么技术可以去动态获取这些数据,通过动态截取每一帧,最后再合成图片。不久解决了吗?FFmpeg变进入技
Web3.0初探一个基于区块链技术用户主导、去中心化的网络生态Web3.0:致力打造一个基于区块链技术、用户主导、去中心化的网络生态。在Web3.0中,用户为满足自身需求进行交互操作,并在交互中利用区块链技术,从而实现价值的创造、分配与流通。这样的整个用户交互、价值流通的过程就形成了Web3.0生态。相比Web2.0的平台中心化特征,Web3.0致力于实现用户所有、用户共建的“去中心化”网络生态。 Web3.0生态主要组成要素及特点:1)用户身份:传统中心化身份容易产生安全和隐私风险,web3构建了一个去中心化的身份标识,以DID作为web3的用户身份表现形式;2)组织形式:web3的核心观点
🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶🦋欢迎关注🖱点赞👍收藏🌟留言🐾🦄本文由程序喵正在路上原创,CSDN首发!💖系列专栏:JavaWeb从入门到实战🌠首发时间:2022年8月18日✅如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦阅读指南一、JavaWeb介绍二、数据库相关概念三、MySQL数据库MySQL安装MySQL配置MySQL登录、退出MySQL卸载MySQL数据模型四、SQL概述SQL简介SQL通用语法SQL分类五、DDL--数据定义语言DDL--操作数据库DDL--操作表六、navicatnavicat概述navicat
夜莺初探三·Categraf采集器前言github仓库文档中对Categraf有很详细的介绍,简单重复一下就是:支持多种数据格式的remote_write;All-in-one的设计理念,指标采集只需要一个agent完成,也计划支持日志和调用链路的数据采集;Go编写,依赖少,容易分发和安装;内置一些监控大盘和告警规则,用户可以直接导入使用;开源项目并由快猫研发团队持续迭代。特殊目录结构说明input采集插件基本都位于input目录下,并且有些采集器提供了通用的大盘(alters-xxx.json)和告警(dashbord.json)配置可以导入n9e直接使用(例如监控仪表盘中更多操作的批量导入
本文目标:了解TRTC的基本概念初步运行demo调用API完成进入视频房间完成多人进入同一房间一、腾讯TRTC可能有些同学并不知道RTC的相关概念,这里先简单说一下。WebRTC(webReal-TimeCommunication)是指网站实时音视频通话技术。这项技术允许网络应用或者网络站点,在不借助任何中间媒介和第三方工具的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和音频流或者其他任意数据的传输,感兴趣的小伙伴可以自行搜索了解下。TRTC(TencentReal-TimeCommunication)是腾讯业务中的一项,也是WebRTC的一种实现。TRTC主要提