REST 与 JSON-RPC? [关闭]

2023-11-25

我正在尝试在 REST 和 JSON-RPC 之间进行选择来为 Web 应用程序开发 API。他们如何比较?

2015 年更新:我发现 REST 更容易开发和用于在 Web/HTTP 上提供服务的 API,因为 API 可以利用客户端和服务器都可以理解的现有且成熟的 HTTP 协议。例如,API 可以使用响应代码、标头、查询、帖子正文、缓存和许多其他功能,而无需任何额外的工作或设置。


RPC 的根本问题是耦合。 RPC 客户端通过多种方式与服务实现紧密耦合,并且很难在不破坏客户端的情况下更改服务实现:

  • 客户需要知道程序名称;
  • 程序参数的顺序、类型和数量很重要。在服务器端更改过程签名(参数数量、参数顺序、参数类型等)而不破坏客户端实现并不那么容易;
  • RPC 风格除了过程端点 + 过程参数之外不公开任何内容。客户不可能确定下一步可以做什么。

另一方面,在 REST 风格中,通过在表示(HTTP 标头 + 表示)中包含控制信息来引导客户端非常容易。例如:

  • 可以(并且实际上是强制的)嵌入用链接关系类型注释的链接,这些链接关系类型传达这些 URI 的含义;
  • 客户端实现不需要依赖于特定的过程名称和参数。相反,客户端依赖于消息格式。这使得使用已经实现的特定媒体格式库成为可能(例如 Atom、HTML、Collection+JSON、HAL 等...)
  • 可以轻松地更改 URI,而不会破坏客户端,因为它们仅依赖于注册的(或特定于域的)链接关系;
  • 可以在表示中嵌入类似表单的结构,如果最终用户是人类,则客户可以将这些描述公开为 UI 功能;
  • 支持缓存是额外的优势;
  • 标准化状态代码;

REST 方面还有更多差异和优势。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

REST 与 JSON-RPC? [关闭] 的相关文章

  • 用于 RESTful 轨道应用程序的简单面包屑

    是否有任何辅助方法 除了默认 Rails 面包屑导航 http wiki rubyonrails org rails pages Breadcrumbs 为特定页面动态生成面包屑导航 而无需在 RESTful 应用程序中传递琐碎的参数 也就
  • 在 Postman 中连接 ECONNREFUSED

    我试图通过邮递员测试我的 REST API 但收到以下错误 这是我编写的第一个 REST API 我对邮差很陌生 所以不确定我做错了什么 下面是我尝试使用此 URL 在邮递员中调用的代码 我在 URL 中传递两个日期参数 https loc
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 过滤条件的查询字符串与资源路径

    背景 我有2个资源 courses and professors A course具有以下属性 ID topic 学期号 年 部分 教授 id A professor具有以下属性 ID 学院 超级用户 名 姓 所以 你可以说一门课程有一位教
  • QObject 通用信号处理程序

    信号处理程序 是指插槽 而不是 POSIX 信号的处理程序 我需要 连接 可能不会 using QObject connect直接地 所有信号从 QObject 的 未知 子类的实例到一个单槽另一个 QObject 的 我需要这个才能通过网
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Vista 上调用 RPC 时出现“不支持操作”

    我的应用程序使用 Microsoft RPC 进行进程间通信 当两个进程在同一台机器上运行并且一个进程尝试调用声明为 IDL 表示法 的方法时 error status t rpcMethod in pipe byte parameter
  • 如何为 cxf jax-rs 2.0 客户端注册 jackson json 提供程序?

    我有一个 JAX RS 客户端正在发出一个简单的 GET 请求 我使用 CXF 实现和 Spring 进行 DI 呼叫成功 我收到响应代码 200 但是在将响应读入 POJO 时出现错误 例外 2015 05 08 16 11 55 457
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • 使用 CouchDB 提供 HTML 服务

    我正在尝试将 CouchDB 与 HTML 独立 REST 架构一起使用 也就是说 除了 CouchDB 和 ajax 风格的 javascript 调用 CouchDB 之外 没有其他应用程序服务器 看起来交叉脚本是一个问题 我之前使用过
  • Rails RESTful 资源对包含分隔符的字段使用 to_param

    我希望我的 Rails 2 3 2 应用程序能够响应并生成 URL 如下所示 websites asd com websites asd com dns records new 在我的 config routes rb 中 我有 map r
  • 无法使用 Net::HTTP 在我的 ruby​​ 代码中发出 HTTP 删除请求

    我在 ruby 代码中使用 Net HTTP 来发出 http 请求 例如 我要发出一个帖子请求 require net http Net HTTP post form url email gt email password gt pass
  • 在 PHP 中处理 PUT/DELETE 参数

    我正在做我的CodeIgniter 的 REST 客户端库 http github com philsturgeon codeigniter restclient我正在努力弄清楚如何在 PHP 中发送 PUT 和 DELETE 参数 在一些
  • 上传大型 xml 到 WCF REST 服务 -> 400 错误请求

    我一直在尝试寻找这个错误 但到目前为止还没有运气 所以我的客户端上有一个带有此 web config 的服务
  • Gmail REST API - 将邮件标记为已读

    我正在尝试使用 Gmail REST API 将邮件标记为已读 markGmailRead click function var request ajax type POST dataType json headers Authorizat
  • 无法将带有特殊字符的文件名上传到Google Drive REST

    当我尝试使用 Web 应用程序将文件上传到 google Drive api 时 出现错误 并且该文件包含带重音的字符 例如 我使用两个请求上传文件 一个初始请求包含文件信息并将 uri 返回到文件应上传的位置 后续请求包含文件本身 第一次
  • 葡萄错误处理策略?

    我正在使用 Grape 和 Rails 创建 REST API 我已经有了基本的架构 并且正在寻找可以 清理 东西的地方 其中之一是错误处理 处理 我目前正在修复整个 API 的 root rb GRAPE API 基类 文件中的错误 我对
  • 计算 REST API 的 ETag

    我们正在构建我们使用的 REST APIETag https en wikipedia org wiki HTTP ETag有两种用途 通过允许客户端避免重新加载资源来节省带宽 对我们来说并不重要 解决并发问题 丢失更新问题 从实际角度来看
  • 将 Google 表格中的选择复制到 Google 文档中(使用 REST API?)

    我有一个 Google 表格 我使用利用 Google 的 REST API 的 python 脚本更新其内容 我想自动将该工作表的一部分复制到给定的 Google 文档中 例如 我希望该工作表的 A G 列出现在我的文档中 并在工作表出现
  • REST Content-Type:它应该基于扩展还是 Accept 标头?

    RESTful Web 服务返回的表示 html xml json 应该由 url 还是由 Accept HTTP 标头确定 两者都有效 引用自xml com http www xml com pub a 2004 08 11 rest h

随机推荐