REST 在分布式 Web 应用程序中的用途是什么

2024-01-04

我正在学习 REST API,但无法理解如何在分布式 Web 应用程序中使用 REST? 这是唯一的参考 http://www.slideshare.net/hemapani/developing-distributed-web-applications-where-does-rest-fit-in-8083222我见过。但我仍然无法了解分布式计算的 REST。 先感谢您。


我不太清楚你的问题在问什么,但总的来说 - REST 只是执行 RMI(远程方法调用)或 RPC(远程过程调用)的另一种方式。然而,虽然 RMI 只能在 Java 中工作,但 REST 使用 HTTP 协议进行通信。由于我们今天使用的大多数技术/库/语言都实现了 HTTP,因此这是一种连接它们的简单方法。

最初是 SOAP(简单对象访问协议 http://en.wikipedia.org/wiki/SOAP#History)用于实现服务器间和客户端-服务器通信。 SOAP 在 HTTP 之上还有许多附加功能。 WSDL(Web 服务描述语言 http://en.wikipedia.org/wiki/Web_Services_Description_Language)例如,允许自动生成代理。虽然这些功能使 SOAP 变得丰富且完美适合企业应用程序(CERN 实现了他们自己的 SOAP 版本,允许全状态通信),但对于许多快速变化的小型公司来说,它也太庞大了。

REST 使用 HTTP 的功能,但基本上在很多方面都有所不同。 url 和对象可以自由定义,以及对象序列化的格式(主要是 JSON)。此功能与 Python、Ruby 或 JavaScript(客户端或 NodeJS)等动态语言相结合,可以非常轻松地在不同服务之间以及客户端和服务之间建立通信(SPA - 单页应用程序,稍后)。

然而,我认为非常有趣的事实是,人们发现,你必须为这种弹性付出高昂的代价:

  1. JSON 表示的对象 - 虽然小于 XML - 仍然大于字节码(这可以通过 gzip 解决很大一部分,但会产生第二个问题)
  2. 将对象序列化到字符串或从字符串反序列化对象的效率非常低,并且比字节码表示慢得多。 (当然,压缩字符串以减小大小也会消耗 CPU)

到目前为止,只有一个选择:HTTP(效率低下)或 RMI(不灵活且只能由少数语言使用)。这就是为什么有两个项目来解决这个问题:

  1. 来自 Google 的协议缓冲区https://code.google.com/p/protobuf/ https://code.google.com/p/protobuf/
  2. 阿帕奇节俭http://thrift.apache.org/ http://thrift.apache.org/

这两个项目都允许您对您和您的消息使用特定的二进制格式。而且因为这两个项目都有不同语言的实现(Apache Thrift 比 Google 的 Protocol Buffer 多得多),您可以使用这种格式在不同服务器之间进行通信。

此外,直接的端到端通信并不总是您想要的,这就是为什么有不同的消息队列可以完成除消息转发之外的许多任务(例如发布-订阅、循环传递到一组服务、 ...)最广泛使用的可能是ZeroMQ http://zeromq.org/.

结论

您可以使用 REST 在分布式 Web 应用程序中的不同服务之间进行通信。由于在许多不同的主机和技术之间实现这种通信通道的简单性,这也经常被使用。然而,序列化/反序列化的开销可能会花费您大量的 CPU 时间,特别是如果您拥有包含许多服务的大型后端基础设施。这就是为什么您应该选择一种二​​进制格式(Apache Thrift、Protocol Buffers)以确保效率。

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

REST 在分布式 Web 应用程序中的用途是什么 的相关文章

  • 有没有办法通过 Outlook API 获取建议的联系人?

    我目前正在开发一个应用程序来获取我的 Microsoft 帐户中的联系人 问题是 与 Google 不同 当我向新联系人发送电子邮件或从新联系人接收电子邮件时 该电子邮件不会复制到 我的联系人 中 因此我无法通过该电子邮件https out
  • 用于分享帖子的 Yammers REST API

    我想使用 REST API 从我的业务应用程序共享帖子 不是发布新消息 而是共享现有帖子 有谁知道要使用哪个端点以及如何实现它 当您使用 Yammer API 创建新帖子时 请将参数 shared message id 与要共享的消息的 m
  • Magento 2 REST API 客户自定义属性

    Magento 2 REST API 文档解释了在更新或创建客户时设置custom attributes 的方法 http devdocs magento com swagger index 20 html http devdocs mag
  • 一般如何处理 CXF 请求处理程序中的输入参数?

    我一直在使用 apache CXF 版本 2 2 2 JAX RS 进行一些工作 我试图在调用业务方法之前在 CXF 请求处理程序中引入数据验证层 幸运的是 我在请求处理程序 DataValidationHandler 中遇到输入参数处理问
  • Kafka REST 代理 API 有哪些好处?

    我不知道Kafka REST Proxy API的优点 它是一个 REST API 所以我知道它对于管理来说很方便 人们为什么使用 Kafka REST 代理 API 添加对生产者或消费者的 Maven 依赖是否很麻烦 另外 我知道kafk
  • Flask API TypeError:“Response”类型的对象不可 JSON 序列化

    我在使用 Python Flask Restful API 时遇到问题 并且数据发送到 Elasticsearch 当我使用 Postman 发布新数据时 问题是 类型错误 响应 类型的对象不可 JSON 序列化 你能帮助我吗 Model
  • Jersey 将 Weld 托管 bean 注入 ConstraintValidator

    我已经花了几个小时寻找解决方案来解决我的问题 但我无法让它发挥作用 我想将 Weld 管理的服务注入 ConstraintValidator 中 该 ConstraintValidator 用于验证发布到 JAX RS Rest Servi
  • WCF Rest 服务还是 ASP.NET MVC 控制器/操作?

    如果有人能提供一些关于哪种更有益的见解 我将不胜感激 WCF 中的 RESTful 服务可以提供与 ASP Net MVC 控制器相同的功能 即可以使用控制器 操作适当地形成 URL 使用其中一种比另一种有真正的好处吗 WCF休息服务将提供
  • 发送 Microsoft Graph 请求事件返回 400

    我能够通过将 JSON 请求发布到https graph microsoft com v1 0 me calendar events https graph microsoft com v1 0 me calendar events 我已经
  • Web API 和 ASP MVC 之间的主要区别是什么

    标题确实总结了我的问题 我已经使用了这两种技术 但我不确定其中一种技术与另一种技术有何显着不同 在本质上 在设计一个宁静的 Web 应用程序时 选择 ASP MVC 或 Web API 时应考虑哪些标准和 或指南 Purpose ASP N
  • 除了 GET 和 POST 之外,如何从浏览器向 RESTful 应用程序发送任何内容?

    我没有得到 RESTful 的东西 是的 我知道如何从浏览器向我的应用程序发送 GET 请求 这是通过 URL 链接 a href user someone 并且还可以通过form方法发送POST请求 a
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • Spring REST 控制器中带有 RequestBody 的 XML/JSON POST

    我正在使用 Spring 3 0 创建一个 RESTful 网站 我在用ContentNegotiatingViewResolver以及 HTTP 消息转换器 例如MappingJacksonHttpMessageConverter对于 J
  • Web API 的 ASP.NET MVC Core 控制器 PATCH 方法

    给定一个数据库表 Person 包含 3 列 Id 名字和姓氏 使用真实的 DbContext 时 ASP NET Core Web API MVC 控制器方法 PATCH 仅修改姓氏 看起来如何 我根本不知道如何实现它 并且找不到相关教程
  • 对不存在的资源进行 GET 的 REST 标准

    资源 user 12345 不存在 假设消费者随机尝试不同的 id 没有授权 任何用户都可以查看任何用户 从更广泛的意义上来说 我的问题是 如果对不存在的资源执行 GET 操作 您应该返回什么 我应该为不存在的 id 返回空用户 还是应该返
  • NodeJS:将 JSON 保存到 MongoDB

    我正在尝试从 API 获取 JSON 并将其存储到 MongoDB 数据库中 显然 这是行不通的 我的应用程序似乎停留在我尝试将数据保存到数据库的位置 请告知该怎么做 这是我的代码 var express require express v
  • 瞬态 REST 表示

    假设我有一个 RESTful 超文本驱动的服务 用于模拟冰淇淋店 为了帮助更好地管理我的商店 我希望能够显示每日报告 列出所售每种冰淇淋的数量和美元价值 看来这种报告功能可以作为名为 DailyReport 的资源公开 DailyRepor
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • 端点按资源 swagger 注释分组?

    我正在使用 Spring 进行 REST API 开发 我有一些 API 其中有很多端点 当我打开 swagger ui 时 它看起来很拥挤 我刚刚读过this https swagger io docs specification gro
  • 如何按角色限制对 Spring Data REST 投影的访问?

    在使用 Spring Data JPA 和 Spring Data REST 的应用程序中 假设您有一个如下所示的实体类 Entity public class Person Id GeneratedValue private int id

随机推荐