我正在学习REST API,我无法理解REST在分布式Web应用程序中的使用方式? 这是我见过的唯一reference。但是我仍然无法了解用于分布式计算的REST。 提前谢谢。
答案 0 :(得分:6)
我不清楚你问的是什么,但一般来说 - REST只是做RMI(远程方法调用)或RPC(远程过程调用)的另一种方式。但是,虽然RMI仅在Java中工作,但REST使用HTTP协议进行通信。由于HTTP是在我们今天使用的大多数技术/库/语言中实现的,因此它是一种连接它们的简单方法。
最初,SOAP(Simple Object Access Protocol)用于实现服务器间和客户端 - 服务器通信。 SOAP在HTTP之上有许多附加功能。例如,WSDL(Web Services Description Language)允许自动代理生成。虽然这些功能使SOAP丰富且完美适合企业应用程序(CERN实现了自己的SOAP版本,允许状态完全通信),但对于许多快速变化的小型公司来说,它也太庞大了。
REST使用来自HTTP的功能,但基本上可以在很多方面有所不同。可以自由定义url和对象,以及对象序列化的格式(主要是JSON)。此功能与Python,Ruby或JavaScript(客户端或NodeJS)等动态语言配合使用,可以非常轻松地在不同服务以及客户端和服务之间建立通信(SPA - 单页应用程序,后者)。
然而,我认为非常有趣的事实是,人们发现,你必须为这种弹性付出高昂的代价:
到目前为止,还有选择 - 效率低下的HTTP或RMI,它不灵活,只能用少量语言使用。这就是为什么有两个项目要解决这个问题的原因:
这两个项目都允许您对您和您的消息使用特定的二进制格式。由于这两个项目都有不同语言的实现(Apache Thrift比Google的协议缓冲区多),您可以使用这种格式在不同的服务器之间进行通信。
直接的端到端通信并不总是你想要的,也就是说,为什么有不同的消息队列可以完成消息转发之外的许多任务(例如发布 - 订阅,循环传递到一组)服务,...)可能最广泛使用的是ZeroMQ。
您可以使用REST在分布式Web应用程序中的不同服务之间进行通信。由于在许多不同主机和技术之间实现这种通信信道的简单性,这也经常被使用。但是,串行化/反序列化的开销可能会花费大量的CPU时间,特别是如果您拥有大量具有许多服务的后端基础架构。这就是为什么你应该选择其中一种二进制格式(Apache Thrift,Protocol Buffers)来确保效率。