为什么REST中不存在Stub?

时间:2012-08-23 18:37:30

标签: rest soap rpc

编辑:我原来的标题是“在RPC中使用存根”;我编辑标题只是为了让其他人知道这不仅仅是那个问题。

我已经开始开发一些基于SOAP的服务,但我无法理解存根的作用。引用Wiki:

  

客户端和服务器使用不同的地址空间,因此必须执行函数调用中使用的参数转换,否则无法使用这些参数的值,因为指向计算机内存的指针指向每个参数上的不同数据机。即使对于简单参数,客户端和服务器也可以使用不同的数据表示(例如,对于整数,使用big-endian与little-endian。)存根用于执行参数的转换,因此远程函数调用看起来像本地函数调用用于远程计算机。

这是愚蠢的,但我实际上并不理解这一点。我已经用Java完成了一些套接字编程,但是当我的TCP / UDP客户端与我的服务器交互时,我不记得“转换参数”的任何步骤。 (我假设使用TCP / UDP套接字的原始服务器 - 客户端通信确实属于RPC)

我在RESTful服务开发方面有一些经验,但我也无法识别使用REST的Stub模拟。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

通过网络进行调用的存根(无论是SOAP,REST,CORBA,DCOM,JSON-RPC还是其他)都只是辅助类,它们为您提供了一个包装函数,可以处理所有底层细节,例如: / p>

  • 初始化TCP / UDP /任何传输层
  • 找到正确的地址以便在需要时调用和进行DNS查找
  • 连接到服务器所在的网络端点
  • 如果服务器没有收听,则处理错误
  • 检查服务器是我们期望的那样(安全检查,版本控制等)
  • 协商编码格式
  • 以适合在网络上传输的格式(CDR,NDR,JSON,XML等)编码(或“编组”)您的请求参数。
  • 通过网络传输编码的请求参数,根据需要处理分块或流量控制
  • 从服务器接收响应
  • 解码(或“解组”)响应详细信息
  • 将响应返回到原始调用代码(如果出现问题则抛出错误)

没有“原始”TCP通信这样的东西。如果您在请求/响应模型中使用它并从TCP连接发送的数据中推断出任何类型的含义,那么您已经在其中编码了某种形式的“参数”。你碰巧自己建立了通常会提供的存根。

Stubs尝试让您的远程调用看起来就像本地进程内调用,但老实说这是一件非常糟糕的事情。它们完全不一样,应用程序应该对它们有不同的看法。