JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节

APIJSON教程:上手apijson项目,学习apijson语法,并实现持久层配置 文章目录: 一、项目导入 二、数据库搭建及配置 三、运行项目并访问接口 四、apijson语法 五、如何新增接口 这篇博客在知乎上发表过了,知乎编辑器和markdown不兼容,重新排版实在是累: 点击跳转 ... 阅读详情

json api

2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿。事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢。在沟通单一 Rails 服务器库—— ActiveModel::Serializers 和单一 JavaScript 客户端库—— Ember Data 的强烈呼声下,JSON API 应运而生(关于这段历史,我在2013年2月第一届 EmberCamp 上有一个演讲,感兴趣的可以去看一看)。

打造任何客户端和服务器库都能运用的技术规范格式,Yehuda 和 Steve 在用户的痛点中看到了这件事的价值所在。关键的一点是,这样一种技术规范要能并行发展,而不是限制在最初的应用对象上。结果是,JSON API 同时受到了来自 Ember 和 Rails 圈里圈外开发者的影响,并发展成为能够迎合更大市场的强有力 spec。
经过两年的酝酿、四轮备选发布方案、Git 上数百个 pull request 和无数的争议探讨,JSON API 终于推出了 1.0 版本。

在这个 JSON API 生命的关键点,有必要回顾一下它是如何走到 1.0,将来又该何去何从?首先,我们来说说 JSON API 有什么特别之处……

雄心勃勃的 JSON API

JSON API 在目标和视野上颇具野心:它不仅定义了一种媒体类型 (application/vnd.api+json) ,还制定了规则用 HTTP来抓取和修改此种媒体类型呈现的内容。从这个角度来说,JSON API 和 Collection + JSONspecification 有点像,但显然它比后者的视线更广。

JSON API 让设计和搭建一个 API 变得标准化,这样一来开发者能够更专注于应用本身的设计。

目标

那么根据 JSON API 你会搭建出什么样的 API 呢?它自己是这么说的:

JSON API is designed to minimize both the number of requests and the amount of data transmitted between clients and servers. This efficiency is achieved without compromising readability, flexibility, or discoverability.

从 JSON API 的设计中这些特点是显而易见的。诸如复合文档(compound documents)、稀疏字段集 (sparse fieldsets)和多字段排序(multi-field sorting)等等这些功能,使得客户端能够从服务器那里精确地请求获得他们需要的数据而没有别的杂七杂八的东西。

比如我们来想象一个博客API,以文章、评论和用户作为它的来源。那么客户端也许会发送如下请求:

GET /articles?include=comments,author&fields[people]=first-name,last-name&sort=-date

上述请求将会抓取所有文章及它们的评论和作者。用户来源(在这里是作者)只返回名和姓。文章集合会根据日期排序,日期越近越靠前。服务器把所有结果整合到一起返回一个单一的响应文档,或者分页。JSON API 还定义了分页链接如何返回,使任何兼容客户端都可以读懂。

聚焦超媒体

Steve Klabnik 对 JSON API 功不可没,他不但热衷于制定标准,作为超媒体的拥趸他自己撰写了有关超媒体 API 的书。
多亏了 Steve,我们才有可能用 JSON API 来搭建超媒体 API。在 JSON API 文档中可以添加链接,并且定义来源的 canonical URL。客户端可以从 API 中扒到链接,就像浏览器可以从 HTML 中扒到链接。 去除了对 URL 硬编码的需要, 客户端和服务器的耦合变得越来越松散,各自发展变得容易。

为什么是JSON API

Anti-Bikeshedding 武器

JSON API 强大的规范体系几乎涵盖了 “RESTful” API 的方方面面,成为了许多团队的敲门砖。一旦一个团队开始设计一个 API,他们就开始意识到 REST 给出的 guidance 少之又少。与其在大体 API 还没搭建好的时候就开始浪费时间在争论设计细节上,许多团队转而参考 JSON API 的指导性说明。

基本的 JSON API ( 英文,中文)提供了下述规范:

  • 表示单个来源 vs. 来源合集
  • 定义来源,包括异质(混合类型)来源
  • 将主要和相关来源包含在单一符合文档中
  • 表示不同来源之间的关联
  • 来源的超媒体链接、关联、分页合集等等
  • 抓取、创建、更新和删除来源及关联
  • 稀疏字段集(例如:限制每一个来源占用的字段)
  • 来源排序
  • 主要和相关来源分页
  • 过滤来源
  • 错误状态和数据

JSON API 网站也提供了一些基本规范之外的建议( 英文,中文):

  • 成员命名
  • URL 设计
  • 过滤策略
  • 支持客户端缺省 PATCH

值得注意的是,基本规范和非常规建议和 HTML 语法是互补的,并不冲突。

一个活跃的生态环境

团队不仅能通过采用 JSON API 的规范节约大量时间,另一方面,搭建一个完全兼容的 API 还可以带来长远和广泛地利益。

JSON API 兼容多种语言和框架的库( 英文,中文)环境正处在活跃的开发状态中。无论你是搭建一个客户端还是服务器,你都需要依赖于这样一个生态环境的帮助。确实很多工具都还处在发展阶段,这两年中 JSON API 自身也在经历不小的变化。不过随着格式规范进入稳定期,相信越来越多的工具会和 1.0 兼容起来。

从 0 到 1.0

从初稿到大纲到 spec

JSON API 起初的着眼点非常小。随着目标范围的扩大,spec 的一部分领域变得相当灵活,这使得各种可能性选项很难真正站稳脚跟(举例来说,URL vs. ID 样式,主要数据的键依据数据 vs. 依据来源类型)。 

JSON API 逐渐演变成为开发 API 服务的一系列流动大纲,但是还称不上是一个 spec。

“大纲阶段”在 2014 年停留了许久。回过头来看,这一段时期称得上是无价之宝,因为开发者在期间尝试和发现了各种可用和不可用的方案。2014 年底,当 Yehuda 和我坐下来重新翻写 spec 的时候,我们得以从过来人的经验中挑选出最符合开发者需要的路径。我们把许多“SHOULD”改写成了“MUST”。这使得 spec 的 RC2 拟稿变得更有针对性,和今年 3 月发布的 1.0 版本也越来越接近了。

润色1.0

尽管当时面临着诱惑,然而幸好我们没有把 RC2 作为 JSON API 1.0 发布。我们决定给那些应用工具一个赶上节奏的机会,顺便也从整体上测试一下新的 spec。我们意识到已经有许多工具能和但仍然需要一些时间去彻底检验新规范的可靠性。

两个核心参与者,Tyler Kellen 和我积极地开发了一堆兼容库。Tyler 正和他在 Bocoup 的同事搭建 Node 终端。在 Cerebris,Larry和我正在为 Rails 搞一个服务器工具,JSONAPI::Resources,与此同时还有一个 JavaScript 客户端工具,Orbit.js。在最终的 RC3 / RC4 阶段,我们都力图保证这些库和 spec 兼容,以确认任何改动的有效性。

在最后关头,真的是靠团队的力量走过来得。这里要特别感谢 Ethan Resnick, Kalle Tuure, hhware, Ward van Teijlingen, 和 Christoph Ziegenberg 的贡献。他们在最后几个月狂砸 pull resquests 发 issues,以确保 JSON API 1.0 足够坚挺并支撑到 1.0+之后。

我非常自豪,也非常感激 JSON API 团队能够在一起攻克掉无数历史遗留的疑难问题。是这一切让 1.0 最终诞生。

JSON API 1.0+

我很期待 JSON API 在它的生态环境步入成熟的时候能够发挥出全部的潜能。很快,能够与 1.0兼容的工具会支持最火的那些语言和框架。兼容性测试工具也会马上被开发出来,对这一点我很乐观。

另一方面,Ember Data 也比此前任何时候都更能接纳 JSON API了。 Ember Data 的 JSON API 适配器和序列器已几乎接近兼容水平。由于 JSON API 格式将作用于标准化数据的内部使用,这些架构层会变得相当精简。以上这些变化会在 Ember Data 1.0 中实现。

基于 spec 结构的可扩展性,1.0 之后的版本会朝着更有趣的方向发展(在不破坏原有规则的情况下)。

比如说,我希望随着链接概念的延伸,JSON API 能有更进一步的超媒体功能。

还有一点令人兴奋的是,我们还在探索扩展的各种可能性。虽然仍处在实验性阶段,扩展的部分应当允许客户端和服务器协议支持某些特定的功能,而这些并没有包含在基本 spec 里面。其中一个扩展的可能性就是能够允许在单个请求中进行 bulk 操作。

总之,JSON API 1.0 只是 一个开始。能够参与这个项目我感到此生荣幸!

补充

如果你对学习 JSON API 感兴趣,请查看 jsonapi.org, jsonapi.org.cn。
如果你有任何的问题和建议,欢迎到 JSON API’s Github 上来 repo!

文章来源:http://1ke.co/course/346

精选第三方可调用的公共JSON API列表整理 在现代Web开发中,前后端分离架构已成为主流,而JSON API作为数据交互的核心方式,扮演着至关重要的角色。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有结构清晰、易读性强、跨语言支持广泛等优点,使其成为API通信中的首选格式。API(Application Programming Interface)则定义了软件组件之间交互的规则。在Web开发中,API通常用于前端向后端请求数据或提交操作指令。 阅读详情

相关推荐

统信UOS专业版服务器无人值守安装

(2)、专业版:主要针对整机厂商、政府单位、事业单位和企业用户使用,cpu目前支持x86、arm、mips、sw64和LoogngArch架构,试用期免费获得90天的使用,随后需要单位采购授权,获得正式激活码后才可以正常使用。其中企业版代号为d,行业版为a/c,欧拉版则为e,在最近的更新中,c版已经停止更新迭代,后续行业版本将都为a版,版本代号体现在镜像名字中以及版本号上,例如1050d则表示企业版1050版本。UOS系统服务器版本分为:专业版(d版)、行业版(a版)、欧拉版(e版)

靠谱运维 2253

【开源】APIJSON 框架

APIJSON是一个关于API和JSON的综合技术或框架,一种专为API设计的JSON网络传输协议,以及基于这套协议实现的ORM库。 2. 读取(Read) **功能:**通过APIJSON,你可以从数据库中检索数据。 实现: 定义API接口,指定请求方法(如GET)、URL和查询参数(可选)。 发送请求,APIJSON后端服务将根据查询参数从数据库中检索数据。 **示例:**要检索所有用户,你可以发送一个GET请求到/api/users。要检索特定用户(如ID为1的用户),你可以发送GET请求到/

王小工小工历程 4857

lerobot VLA--SmolVLA代码的讲解

2.图像resize至正方形224x224,图像长宽比不变,其他区域用黑色补充,标记为mask=1,若占位图像(摄像头缺失),则 创建全-1像素的占位图像 标记为mask=0,image为[1, 3, 512, 512],img_mask为True,masks列表长度为2,img_masks为2,因为我这里两个相机。文本嵌入:通过embed_language_tokens() 被转换为嵌入表示,lang_emb 是语言的嵌入,包含了语言的语法和语义信息。1.像素值[0,1]->[-1,1]

caokaifa的博客 4068

APIJSON语法使用,超详细

APIJSON介绍:APIJSON赋予了前端极大的灵活性和自主性。根据业务需求前端可以自己设计数据库表结构,不再受限于后台接口,要啥有啥,所求即所得,大大提升了开发效率。APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库。为各种增删改查提供了完全自动化的万能 API,零代码实时满足千变万化的各种新增和变更需求。能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。

宇叔儿 6139

Toeplitz矩阵以及矩阵乘法FFT加速

Toeplitz矩阵以及矩阵乘法FFT加速 1.Toeplitz矩阵 托普利兹矩阵,简称为T型矩阵,它是由Bryc、Dembo、Jiang于2006年提出的。托普利兹矩阵的主对角线上的元素相等,平行于主对角线的线上的元素也相等;矩阵中的各元素关于次对角线对称,即T型矩阵为次对称矩阵。这里我们使用matlab中自带的函数生成一个toeplitz矩阵的例子: x=[1 2 3 4]; y=[1 5 6 7 8 9]; z=toeplitz(x,y); 我们可以得到一个这样的矩阵结果: 我们可以看到,其中x中

thlz 5069

华硕三频万兆分布式路由组网实战:从AiMesh 2.0到全屋Wi-Fi 6覆盖

Mesh组网是解决大户型Wi-Fi覆盖难题的主流方案,其核心原理是通过多个节点构建网状网络,实现设备间的无缝漫游。在技术层面,Wi-Fi 6标准、三频设计(包括专属回程频段)和有线回程等技术,共同提升了网络的带宽、稳定性和抗干扰能力。这些技术的工程价值在于,能够为多设备并发、高带宽应用(如4K/8K流媒体、在线游戏、内网文件高速传输)提供可靠支撑。具体到应用场景,例如利用华硕AiMesh 2.0系统,配合三频万兆分布式路由器,可以实现智能的设备连接与负载均衡。通过合理规划节点位置、优先采用有线回程,并进行Q

weixin_34054866的博客 433

APIJSON

2021SC@SDUSC 目录 关于APIJSON的介绍 API 特点 对于前端 接口工具 对于后端 功能说明 安装&使用 下载项目 分析代码 关于APIJSON的介绍 APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库。 为各种增删改查提供了完全自动化的万能 API,零代码实时满足千变万化的各种新增和变更需求。 能大幅降低开发和沟通成本,简化开发流程,缩短开发周期。 适合中小型前后端...

s1832161145的博客 4217

AI Agent ReAct架构设计模型剖析

ReAct通过"思考-行动-观察"循环运作:智能体先进行自然语言推理,再调用外部工具执行行动,观察结果后继续推理直至解决问题。这种架构提高了透明度和准确性,减少幻觉风险,使LLM能主动分解任务并利用外部数据源。实现关键在于精心设计的提示模板,引导LLM按结构化格式响应,而非依赖模型固有能力。

weixin_43939320的博客 1250

APIJSON介绍

APIJSON 是一种基于 JSON 的接口定义语言,旨在通过简单易用的语法规则,快速生成易于维护和扩展的 RESTful 风格的 API。简单易用:APIJSON 使用 JSON 格式定义 API 接口,支持类 SQL 手写查询语法,易于理解和使用。高效灵活:APIJSON 通过缓存、预编译等优化方式,提高接口访问效率,同时支持多种数据源和扩展方式。易于测试:APIJSON 支持在线测试和文档输出,方便开发人员进行接口测试和调试。

许三金的博客 1000

第一篇:APS智能排产理论核心与求解器选型指南

本文系统解析了APS(高级计划与排程)系统的核心功能与技术实现。APS作为融合生产计划与排程的智能决策系统,通过运筹优化算法实现全局最优,平衡交付与效率。重点探讨了混合整数线性规划(MILP)在APS中的应用,包括设备分配、生产批量和人员班次优化等场景,并分析了其局限性与其他算法(如启发式算法)的互补性。文章还提供了APS实施策略建议和优化建模技巧,强调从简单模型开始迭代验证的重要性。最后介绍了甘特图在APS中的多维可视化作用,包括计划调整和决策支持功能。全文为理解APS系统原理及实践应用提供了全面指导。

算法工程师 544

【RT-DETR有效改进】利用MobileNetV3替换Backbone(轻量化网络结构,提点)

本文给大家带来的改进机制是,其主要改进思想集中在结合硬件感知的网络架构搜索(NAS)和NetAdapt算法,以优化移动设备CPU上的性能。它采用了新颖的架构设计,包括反转残差结构和线性瓶颈层,以及新的高效分割解码器Lite Reduced Atrous Spatial Pyramid Pooling(LR-ASPP),以提升在移动分类、检测和分割任务上的表现。实验表明,MobileNets在资源和准确性的权衡方面表现出色,并在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中展现了其有效性。

Snu77的博客 2749

neomerx/json-api未来展望:JSON API规范v1.1支持与路线图

作为PHP生态系统中**JSON API规范**的权威实现,neomerx/json-api库为开发者提供了构建标准化RESTful API的强大工具。这个框架无关的库已经成功实现了JSON API v1.1规范,为现代Web应用提供了高效的数据交换解决方案。 ### 📊 当前JSON API v1.1支持现状 neomerx/json-api目前已经全面支持JSON API v1.1规范的

gitblog_00010的博客 413

无线传感网络的Matlab实现

Matlab是一种功能强大的数值计算和数据分析工具,也可以用于无线传感网络的建模和仿真。根据实际需求,可以进一步扩展和优化模型,例如考虑节点能量消耗、网络路由、数据融合等方面的问题。函数用于绘制节点之间的连接关系,其中第一个参数是邻接矩阵,描述了节点之间的连接关系。这里使用了一个4个节点的简单例子,可以根据实际需求修改节点数量和连接关系。可以使用Matlab中的图形绘制函数来可视化节点的位置和连接关系。在无线传感网络中,节点的能量是一个关键因素。通过计算节点的剩余能量,可以评估节点的能量消耗情况。

2301_79331387的博客 250

.NET Core 3.0 里新的JSON API

为什么需要新的JSON API? JSON.NET大家都用过,老版本的ASP.NET Core也依赖于JSON.NET。 然而这个依赖就会引起一些版本问题:例如ASP.NETCore某个版本需要使用JSON.NETv10,而另一个库需要使用JSON.NETv11;或者JSON.NET出现了一个新版本,而ASP.NET Core还不能支持这个版本,而您却想使用该版本。 Syst...

dz45693的专栏 5597

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

如何用Kotson快速构建JSON对象?5分钟掌握核心API

Kotson是一款专为Kotlin开发者打造的JSON操作库,它提供了简洁优雅的API,让你能够在几分钟内轻松掌握JSON对象的创建与操作。作为Gson的Kotlin绑定库,Kotson完美融合了Kotlin的语法特性与Gson的强大功能,是处理JSON数据的理想选择。 ## 为什么选择Kotson?核心优势解析 在众多JSON处理库中,Kotson凭借以下特性脱颖而出: - **Kotli

gitblog_00504的博客 806

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JsonApiClient:PHP开发者的JSON API利器

JsonApiClient:PHP开发者的JSON API利器 项目介绍 JsonApiClient 是一个专为PHP开发者设计的库,旨在验证和处理来自JSON API服务器的响应体。该项目严格遵循JSON API 1.0规范,确保数据处理的准确性和一致性。无论你是构建客户端应用还是服务器端服务,JsonApiClient都能为你提供强大的支持。 项目技术分析 JsonApiClient的核心功能...

gitblog_00074的博客 323

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

2025年09月09日 Go生态洞察:Go 1.25 新版实验性 JSON API

Go 1.25引入的实验性JSON API(encoding/json/v2和encoding/json/jsontext)针对现有encoding/json包的不足进行了多项改进。新版本严格遵循RFC 8259标准,解决了UTF-8校验、重复字段名处理等行为缺陷,并优化了性能(反序列化速度提升最高10倍)。jsontext包实现了语法与语义分离,支持流式处理降低内存消耗。新API在保持兼容性的同时增加了灵活配置选项,为Go开发者提供了更强大、高效的JSON处理能力。这些改进将显著提升涉及JSON的Go应用

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 2089

WLED JSON API完全手册:开发者必备参考

WLED JSON API是控制WS2812B及其他类型数字RGB LED的核心接口,通过ESP8266或ESP32设备实现Wi-Fi控制。本文将系统介绍API的请求格式、响应结构、核心功能及实战示例,帮助开发者快速集成和扩展WLED功能。 ## API基础概述 WLED JSON API提供了全面的设备控制能力,支持状态查询、效果配置、颜色调整等核心功能。API通信通过HTTP POST请求...

gitblog_00285的博客 1078

JSON API Serializer与其他序列化库对比:为什么选择JSON API Serializer

在构建现代Web API时,数据序列化是一个关键环节。JSON API Serializer作为一个专门为JSON API 1.0规范设计的Node.js库,提供了完整的数据序列化解决方案。本文将深入对比JSON API Serializer与其他流行序列化库,帮助你做出明智的技术选择。😊 ## 什么是JSON API Serializer? JSON API Serializer是一个与框

gitblog_00591的博客 879

json-api-normalizer进阶避坑清单:从0.1.0到1.0.4的版本演进与常见问题解析

json-api-normalizer 是一个专为 Redux 应用做 **JSON API 数据规范化** 的轻量工具库。它把 JSON API 规范返回的嵌套 JSON 响应,自动转换成「实体类型 → ID → 实体」的扁平 Map 结构,完美契合 Redux 的状态管理模式。本文基于项目的 [CHANGELOG.md](https://link.gitcode.com/i/9c68db6be

gitblog_00235的博客 451

NEAR JSON-RPC API终极手册:开发者必备的接口调用指南

NEAR Protocol作为新一代区块链平台,提供了强大的JSON-RPC API接口,让开发者能够轻松与区块链进行交互。本指南将带你快速掌握NEAR JSON-RPC API的核心功能、调用方法和最佳实践,帮助你高效开发去中心化应用。 ## 什么是NEAR JSON-RPC API? NEAR JSON-RPC API是开发者与NEAR区块链交互的主要方式,通过HTTP请求可以查询区块链数

gitblog_00312的博客 788

OpenAPI 3.1.0完整指南:JSON Schema 2020-12支持与核心特性解析

OpenAPI Specification 3.1.0是API描述语言的重要里程碑版本,它完全支持JSON Schema 2020-12标准,为开发者提供了更强大、更灵活的API描述能力。作为行业标准,OpenAPI规范让API设计、文档生成和代码开发变得更加高效和规范。 ## 🎯 为什么选择OpenAPI 3.1.0? OpenAPI 3.1.0最大的突破在于完全采用了JSON Schem

gitblog_01150的博客 625

10分钟掌握JSON Server版本管理:从0到1的无缝升级指南

你是否曾在项目迭代中遇到API接口频繁变动的困扰?是否为测试环境数据不一致而头疼?JSON Server(一款能在30秒内创建完整模拟REST API的工具)的版本管理技巧将彻底解决这些问题。本文将带你从安装到高级配置,掌握版本控制的核心方法,让前后端协作效率提升300%。 ## 版本选择:为什么v1.0.0-beta.3值得升级? JSON Server当前最新版本为**1.0.0-beta...

gitblog_00307的博客 431
上一篇: BitTorrent DHT 协议中文翻译
下一篇: Flarum 安装
迷渡
迷渡 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄19年 2405粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值