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 的指导性说明。
- 表示单个来源 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!
相关推荐
多目标白鲸优化算法MOBWO:在多目标测试函数中的实证与应用分析,多目标白鲸优化算法MOBWO的实证研究:在九个测试函数中的表现与评估,多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Matlab语言 程序已调试好,可直接运行,算法新颖 1将蛇优化算法的优良策略与多目标优化算法框架(网格法)结合形成多目标蛇优化算法(MOSO),为了验证所提的MOSO的有效性,将其在9个多目标测试函数 (ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、Kursawe、Poloni,Viennet2、Viennet3) 上实验,并采用IGD、GD、HV、SP四种评价指标进行评价,部分效果如图1所示,可完全满足您的需求~ 2源文件夹包含MOBWO所有代码(含9个多目标测试函数)以及原始白鲸优化算法文献 3代码适合新手小白学习,一键运行main文件即可轻松出图 4仅包含Matlab代码,后可保证原始程序运行~ ,多目标白鲸优化算法(MOBWO); 测试函数; Matlab语言; 程序调试; 算法新颖; 多目标蛇优化算法(MOSO); IGD、GD、HV、SP评价指标; 代码学习; 轻松出图。,基于
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:本文介绍了在中国石油勘探开发梦想云平台上定义REST API接口的基本规范,旨在提高接口质量,便于开发、测试和维护。主要内容包括REST API的基础概念,设计流程,URI、HTTP方法及响应状态码的运用,API文档的管理以及Swagger工具的应用,还详细阐述了API安全认证,特别是JWT的应用。通过这份文档能够帮助开发者理解和实施高质量的微服务架构。 适用人群:适用于参与或计划参与微服务项目的开发团队,尤其是那些致力于提升REST API接口质量和效率的专业技术人员。 使用场景及目标:文档的目标在于引导用户理解REST API接口设计的关键要素,如资源命名、方法选择等,并教会他们如何有效管理和保护这些API,确保其稳定性和安全性。通过实践本指南的原则,用户可以构建出更加健壮的分布式应用程序接口。 其他说明:此外,文中提供了大量关于API文档生成与维护的最佳做法,强调了文档更新须与代码同步,同时也探讨了API变更管理的有效方法。在安全方面,重点讲述了JWT的构成及其工作机制,展示了利用JWT实现高效认证的具体实例。
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:该文档详细介绍了基于双向长短期记忆(BiLSTM)神经网络与Adaboost集成学习的时间序列预测模型及其应用。文中阐述了项目背景,指出了传统LSTM在复杂数据下存在的局限,提出了通过BiLSTM增强前后依赖关系,并结合Adaboost优化模型精度与泛化能力的方法。全文涵盖了从数据预处理、特征提取到建模、评估、以及GUI设计在内的全过程,并展示了该模型在金融预测、气象预报、能源管理和生产调度等多个领域的广泛应用潜力。文章还包括对代码片段的具体解析、模型部署的考量及未来发展的展望。 适合人群:拥有基本的机器学习与神经网络基础的研究人员和技术开发者,尤其是那些正在寻找时间序列数据分析解决方案的专业人士。 使用场景及目标:1. 多个领域如金融市场、气象预测等的时间序列数据处理任务中;2. 解决传统单一神经网络可能出现的过拟合并优化模型的鲁棒性和准确性。 其他说明:除了详细讲解如何使用Matlab实施完整的BiLSTM和Adaboost集成外,文中还特别注意到了模型调优的重要性——通过超参数搜索、早停策略和其他正则化技巧以预防过拟合情况的发生。此外,文档还讨论了有关实时数据处理、模型安全性和可移植性的要点。附带完整的Matlab代码实现了从环境准备直到预测结果可视化的每一个步骤,使读者可以很容易地复现和定制整个工作流程。
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:Go 1.24 版本引入了多项关键改进,其中包括:泛型类型别名,允许类型别名携带类型参数,简化代码实现;弱指针避免对象因包含在缓存中而无法被释放的问题;改进了终结器,提供了新的运行时函数 AddCleanup 以增强对象清理的灵活性和可靠性。另外,Go 1.24 改善了 map 的默认实现,显著提升了其运行时性能。与此同时,开源项目 miniblog 是一个功能全面、易于理解的 Go 实战项目。该项目采用了类似 Kubernetes 的三层架构设计,涵盖了许多 Go 项目开发的最佳实践和技术栈,不仅有助于开发者理解 Go 项目的核心理念和实施方法,还能提供一系列开发脚手架工具、配套课程和支持材料,以便更轻松地开展实际项目。 适合人群:1年以上 Go 开发经验的研发人员或正在寻找优秀 Go 项目充实自己简历的技术人员。 使用场景及目标:该总结的目标是帮助有一定 Go 基础的知识分子迅速了解新特性及其实用价值。miniblog 项目特别适用于希望加深对 Go 实践认识的学习者,尤其是那些想要通过参与实际编码练习和深入理解 Go 内部工作机制的人群。通过这两个方面的内容学习可以帮助使用者更好地理解 Go 新增特性的应用前景和发展方向,并能够在实践中灵活应用。 其他说明:本文档不仅涵盖了新特性的技术和理论要点,同时也展示了如何通过动手实践强化技能的具体例子。阅读本文不仅可以学到最新的 Go 编程技巧,还将了解到实际开发过程中面临的挑战及其解决方案。此外,还提供了一份详细的安装指导,以及一些常见的操作指南。对于新手而言,可以通过提供的完整配套资料逐步建立起个人的知识体系;而对于资深开发者,则可以在更高层次上审视自身项目的架构设计,进而推动技术创新和个人职业发展。
CoW项目是基于大模型的智能对话机器人,支持微信公众号、企业微信应用、飞书、钉钉接入,可选择GPT3.5/GPT4.0/Claude/Gemini/LinkAI/ChatGLM/KIMI/文心一言/讯飞星火/通义千问/LinkAI,能处理文本、语音和图片,通过插件访问操作系统和互联网等外部资源,支持基于自有知识库定制企业AI应用。 功能如下: 1、 多端部署: 有多种部署方式可选择且功能完备,目前已支持微信公众号、企业微信应用、飞书、钉钉等部署方式 2、 基础对话: 私聊及群聊的消息智能回复,支持多轮会话上下文记忆,支持 GPT-3.5, GPT-4o-mini, GPT-4o, GPT-4, Claude-3.5, Gemini, 文心一言, 讯飞星火, 通义千问,ChatGLM-4,Kimi(月之暗面), MiniMax, GiteeAI 3、 语音能力: 可识别语音消息,通过文字或语音回复,支持 azure, baidu, google, openai(whisper/tts) 等多种语音模型 4、 图像能力: 支持图片生等
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
基于LabVIEW的滚动轴承故障诊断系统:一种振动信号采集与故障诊断的实用设计与实践验证,基于LabVIEW的滚动轴承高效故障诊断系统设计与应用研究,基于LabVIEW的滚动轴承故障诊断系统. 实现对滚动轴承工作状态的监测,提出了一种基于 Lab VIEW 的滚动轴承故障诊断系统的设计方案,给出了滚动轴承振动信号的采集与故障诊断方法,在 Lab VIEW 的诊断平台下进行信号处理与分析,然后结合滚动轴承故障诊断理论与信号分析结果来对该轴承运行状态进行判断。 最后利用旋转机械振动及故障模拟试验平台对该系统进行验证,验证结果体现了该系统具有可行性和适用性。 ,LabVIEW; 滚动轴承故障诊断系统; 振动信号采集; 故障诊断方法; 信号处理与分析; 验证测试; 可行性; 适用性,基于LabVIEW的滚动轴承故障诊断系统设计与验证
Javascript语言视频教程,涵盖Javascript语言基础和高级教程,零基础入门。
python在链表的前面-开头插入一个节点
CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
《基于改进动态窗口DWA模糊自适应调整权重的路径规划算法研究及其MATLAB实现》,《基于改进动态窗口DWA的模糊自适应权重调整路径规划算法及其MATLAB实现》,基于改进动态窗口 DWA 模糊自适应调整权重的路径基于改进动态窗口 DWA 模糊自适应调整权重的路径规划算法 MATLAB 源码+文档 《栅格地图可修改》 基本DWA算法能够有效地避免碰撞并尽可能接近目标点,但评价函数的权重因子需要根据实际情况进行调整。 为了提高DWA算法的性能,本文提出了一种改进DWA算法,通过模糊控制自适应调整评价因子权重,改进DWA算法的实现过程如下: 定义模糊评价函数。 模糊评价函数是一种能够处理不确定性和模糊性的评价函数。 它将输入值映射到模糊隶属度,根据规则计算输出值。 在改进DWA算法中,我们定义了一个三输入一输出的模糊评价函数,输入包括距离、航向和速度,输出为权重因子。 [1]实时调整权重因子。 在基本DWA算法中,权重因子需要根据实际情况进行调整,这需要人工干预。 在改进DWA算法中,我们通过模糊控制实现自适应调整,以提高算法的性能。 [2]评估路径。 通过路径的长度和避障情况等指标评估路
基于MATLAB平台PCA算法的人脸识别系统:程序调试成功,可替换数据获取高准确率识别结果,基于MATLAB平台PCA算法的人脸识别系统:程序调试与自我数据替换实现高精度识别结果,基于MATLAB平台PCA的人脸识别,程序已调通,可将自己的数据替进行识别。 得到识别准确率结果。 ,基于MATLAB平台PCA的人脸识别; 程序已调通; 数据替换; 识别准确率。,MATLAB平台PCA人脸识别程序:调通后实现高准确率识别
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作