WEB 开发中,使用 JSON-RPC 好,还是 RESTful API 好?

简介: WEB 开发中,使用 JSON-RPC 好,还是 RESTful API 好?

两者没有高下之分,无非是一种约定俗成的标准。习惯用 RPC 就用 RPC,能理解 REST 就用 REST。

JSON-RPC 比较符合直观,格式也相对宽松;

REST 最近正流行,有自己的一套设计规范。

 

REST 面对的疑问跟当年刚开始流行面向对象时的情况是一样的。

它适合很多情况,但并不适合所有情况。

最差的结果就是盲目跟风,又对 REST 的概念和理念一知半解,最后搞出一个半吊子的怪胎,还自我标榜用了流行的 RESTful API。

 

REST 是一种设计风格,它的很多思维方式与 RPC 是完全冲突的。

RPC 的思想是把本地函数映射到 API,也就是说一个 API 对应的是一个 function,我本地有一个 getAllUsers,远程也能通过某种约定的协议来调用这个 getAllUsers。至于这个协议是 Socket、是 HTTP 还是别的什么并不重要;

RPC 中的主体都是动作,是个动词,表示我要做什么。

而 REST 则不然,它的 URL 主体是资源,是个名词。而且也仅支持 HTTP 协议,规定了使用 HTTP Method 表达本次要做的动作,类型一般也不超过那四五种。这些动作表达了对资源仅有的几种转化方式。

 

这种设计思路是反程序员直觉的,因为在本地业务代码中仍然是一个个的函数,是动作,但表现在接口形式上则完全是资源的形式。

就像面向对象的「万物皆对象」理论在习惯了纯粹面向过程开发的程序员眼里显得十分别扭一样:我的代码本来就是按顺序、循环、分支这么运行的啊,为啥非得在很明确的结构上封装一层一层的基类子类接口,还要故意给两个函数起同一个名字,调用时才选择用哪一个呢?

 

使用「万物皆资源」的思想编写实际项目中的 API 接口时,最常见的问题就是「这玩意到底是个什么资源?……………… 算了,我就直接写吧,不管什么风格了」

  • 比如,login 和 logout 应该怎么 REST 化?
  • 比如,多条件复合搜索在 GET 里写不下怎么办?
  • 比如,大量资源的删除难道要写几千个 DELETE?

其实在理解了 REST 后,这些都不是什么无解的难题,只是思维方式要转换一下:

  • login 和 logout 其实只是对 session 资源的创建和删除;
  • search 本身就是个资源,使用 POST 创建,如果不需持久化,可以直接在 Response 中返回结果,如果需要(如翻页、长期缓存等),直接保存搜索结果并 303 跳转到资源地址就行了;
  • id 多到连 url 都写不下的请求,应该创建 task,用 GET 返回 task 状态甚至执行进度;

…… 等等等。

 

如果只是规定了一种规范,却不理解它表相下面的思维方式,实施中又按照自己的理解随意变动,那结果肯定是混乱不堪的。

当然,API 怎么写是开发者的自由。但如果一个 API 在 url 里放一堆动词、资源设计混乱、各种乱用 HTTP Method 和 Status Code,还自称 RESTful API 的话,那就像你养了一条狗,还管它叫猫一样。

这种混搭产物,不如叫它 REFU 吧。

(Remove Extension From Url:从 url 里去掉文件扩展名)

 

前面说了半天 REST 的理念和不懂 REST 造成的问题,但是,这并不代表 REST 比 RPC 更「高等」,更不是说不理解 REST 的人是落伍的。

所谓代码风格、接口形式、各种林林总总的格式规定,其实都是为了在团队内部形成共识、防止个人习惯差异引起的混乱。JSON-RPC 当然也是有规范的,但相比 REST 实在宽松太多了。

如果一个开发团队规定必须在 url 里写 action,所有请求都是 POST,可以吗?当然也没问题,只是不要拿出去标榜自己写的是 RESTful API 就行。

规范最终还是为了开发者和软件产品服务的,如果它能带来便利、减少混乱,就值得用;反之,如果带来的麻烦比解决的还多,那就犯不上纯粹跟风追流行了。

相关文章
|
1月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
1月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
215 4
|
2月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
2月前
|
人工智能 自然语言处理 机器人
使用 API 编程开发扣子应用
扣子(Coze)应用支持通过 API 编程,将 AI 聊天、内容生成、工作流自动化等功能集成至自有系统。主要 API 包括 Bot API(用于消息交互与会话管理)及插件与知识库 API(扩展功能与数据管理)。开发流程包括创建应用、获取密钥、调用 API 并处理响应,支持 Python 等语言。建议加强错误处理、密钥安全与会话管理,提升集成灵活性与应用扩展性。
940 0
|
4月前
|
数据采集 测试技术 API
小白必看!电商 API 开发避坑指南:签名错误、权限申请全解决
本文总结电商API开发常见问题与解决方案,涵盖京东、淘宝、拼多多的签名规则、权限申请、频率限制等核心踩坑点,结合实战案例,助你高效避坑,提升开发效率90%。
|
3月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
362 0
|
3月前
|
存储 监控 算法
淘宝买家秀 API开发实录Python(2025)
本文讲述了作者在电商开发领域,尤其是对接淘宝买家秀 API 接口过程中所经历的挑战与收获。从申请接入、签名验证、频率限制到数据处理和实时监控,作者分享了多个实战经验与代码示例,帮助开发者更高效地获取和处理买家秀数据,提升开发效率。
|
1月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
4月前
|
数据采集 缓存 监控
唯品会 API 开发痛点解析:从权限申请到数据清洗的实战经验
本文深入解析唯品会开放平台(VOP)API开发全流程,涵盖权限申请、签名机制、数据清洗、性能优化等核心挑战与实战解决方案,助力开发者高效构建稳定可靠的电商数据整合系统。
|
2月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
下一篇
oss云网关配置