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 应用程序中的用途是什么 的相关文章

  • RabbitMQ HTTP API 请求 401 未经授权

    我正在尝试访问 RabbitMQ Rest 但收到 401 未经授权的错误 我想访问队列信息并获取消息编号 我发现这是一个解决方案 DefaultHttpClient httpClient new DefaultHttpClient Htt
  • 为什么我无法使用 HttpUrlConnection 上传第一个文件块?

    在我的项目中 我应该从一台服务器逐块下载文件 并将每个块立即上传到另一台服务器 我有一个应该下载的文件的 URL 我们就这样称呼它吧downloadUrl 因此 这就是我逐块下载文件的方式 val chunkSize 1024 1024 B
  • 如何从 Android 应用程序调用 REST API? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是 android 新手 也是编程新手 如何从 Android 应用程序调用 REST api GET POST 请求 请给我推荐一
  • REST API 登录模式

    我正在创建一个 REST api 严格遵循 apigee 建议 使用名词而不是动词 将 api 版本烘焙到 URL 中 每个集合有两个 api 路径 GET POST PUT DELETE 用法等 我正在开发登录系统 但不确定登录用户的正确
  • REST 中子资源和路径变量冲突?

    设计路径解析可能含糊不清的 REST API 是否被认为是不好的做法 例如 GET animals id Returns the animal with the given ID GET animals dogs Returns all a
  • 如何给所有HttpClient请求方法添加参数?

    我正在编写一些使用 Apache 的 Java 代码HttpClient版本4 2 2使用 RESTful 第三方 API 该 API 具有利用 HTTP 的方法GET POST PUT and DELETE 需要注意的是 我使用的是 4
  • 在 Spring 应用程序中拥有 RestController 和 Controller 的最佳实践

    我不是问是不是possible 我知道是这样 但我想知道在我的应用程序中拥有前端的同时提供休息服务的最佳方式是什么 我正在开发一个 Spring Boot 应用程序 我目前有一个调用 jsp 页面的控制器 以及一个separate休息控制器
  • 如何保护 RESTful Web 服务的安全?

    我必须实施安全RESTful Web 服务 https www ibm com developerworks webservices library ws restful 我已经使用谷歌做了一些研究 但我陷入困境 Options TLS H
  • RESTful WCF 的最低配置

    为了让 WCF 与 REST 一起工作 我至少需要在 web config 中放入什么 我已经用 WebGet 注释了我的方法 但他们没有收到消息 我发现您可以将以下内容添加到 svc 文件中的 ServiceHost 指令中 它会自动为您
  • WCF 服务契约将被 XML 和 Json 序列化

    我如何创建要加入的服务合同XmlSerializer 格式也WebMessageFormat Json在 WCF RESTful 服务中 我需要的是从 ASP Net 1 1 的代码后面调用 CallADSWebMethod 操作契约 该契
  • 如何向最终用户隐藏 REST API Url?

    是否可以隐藏我通过 AJAX 用于填充页面数据的 REST URL 我不希望其他人从我的 REST API 获取和使用 但需要使用它在我的网站中显示内容 如何向最终用户隐藏我的 REST API URL 无法在 JavaScript 中向最
  • 在 Hyperledger Composer REST API 上使用 Passport-http

    我想知道是否可以使用passport http来保护由composer rest server生成的Hyperledger Composer的REST API 以及什么是导出 COMPOSER PROVIDERS 配置 这个想法是使用先前生
  • 从 Office 365 日历获取所有事件

    我需要获取 Office 365 日历中的所有事件 当前 GET 请求 https graph microsoft com v1 0 users https graph microsoft com v1 0 users userPrinci
  • 是否应该在 REST API PUT 请求中传递资源及其相关资源的所有字段?

    假设我有一个票证和评论资源 门票可以有很多评论 在您的更新端点中HTTP PUT api tickets
  • 如何将 REST API 与 FireMonkey 结合使用?

    我需要在 FireMonkey 中实现 REST API 来获取一些信息 但我不确定如何做到这一点 REST API使用OAuth2 我可以访问两个代码 Consumer Key和Consumer Secret 之后 我需要获得一个临时的
  • REST - 获取随机数 GET 还是 POST?

    应该如何在 REST 中正确实现随机数生成器 GET RANDOM or POST RANDOM 服务器每次返回不同的随机数 我可以看到这两种方式的论点 我想说这与返回的包含当前时间的页面相同 其中许多都是使用 GET 完成的 抽象地说 获
  • PHP:在 CURL GET 调用中使用 API 密钥

    我看过关于使用 api 密钥在curl 中验证 post 调用的帖子 我有一个 GET 调用 需要 apikey 进行授权 即请求必须具有包含 apiKey 的授权标头 我已经获得了 api 密钥并尝试将其用于 GET 调用
  • 使用 Post 以 REST 方式更新值

    我对 REST 很陌生 所以如果这是一个愚蠢的问题 请原谅我 这样 我就有了客户资源 一个客户有很多信用 所以 我想获取客户积分的 URL 是 客户 21 积分 其中 21 是客户 ID 现在 如果我没有全额积分 如何添加积分 例如 客户有
  • 以 RESTful 方式增加资源计数器:PUT 与 POST

    我有一个带有计数器的资源 为了举例 我们将该资源称为profile 计数器是数量views对于该配置文件 Per the 休息维基 http rest blueoxen net cgi bin wiki pl HttpMethods PUT
  • REST Web 服务 WSDL? [复制]

    这个问题在这里已经有答案了 我正在实现一个 Web 服务 并且已经实现了 REST 和 SOAP 版本 看看哪个版本适合我的需求 我决定选择 REST 因为它很简单 而且我可能会开发一个 iPhone 应用程序来使用它 我的问题很简单 是否

随机推荐