Protocol 和 Json Wire Protocol 有什么区别

What is the difference between Protocol and Json Wire Protocol

协议:定义通过网络交换数据的方法的标准。 如果浏览器想要与服务器通信,它必须创建一个 HTTP 请求并将该 HTTP 请求发送到服务器以传达其对资源和选项的请求。服务器接收请求并处理它并执行必要的操作并创建 HTTP 响应以发送到浏览器。浏览器在创建 HTTP 请求时必须遵循 HTTP 规范。服务器在创建 HTTP 响应时也必须遵循 HTTP 规范。这就是浏览器和服务器之间通过遵循 HTTP 协议以标准方式进行通信以避免冲突的方式。

Json 有线协议:客户端有一个对象必须发送到服务器。客户端将这个对象转换成一个JSON对象发送给服务器。服务器解析 JSON 对象并将其转换回对象以供使用。服务器将响应对象转换为 JSON 对象并将其发送回客户端。客户端然后将JSON对象转换为对象以供使用。

为什么后者被称为Json Wire Protocol?

您关于 ProtocolJsonWireProtocol 的说法都非常正确。在这一点上值得一提的是,之前所有 WebDriver that communicated with the browser, or a RemoteWebDriver server shall use a common wire protocol. This wire protocol defines a RESTful web service using JSON 的实现都是通过 HTTP 实现的。

JSON Wire Protocol 是一个抽象规范,说明自动化行为(例如单击或键入)或您实际想用自动化脚本执行的任何操作如何映射到 selenium 或 appium 或 HTTP 请求和响应。该协议将假定 WebDriver API 已成为 "flattened",但期望客户端实现将采用更面向对象的方法,如现有 Java [=98] 中所示=]. wire 协议在 request/response 对 "commands" 和 "responses".

中实现

什么是 JSON Wire protocol

JSON(JavaScript Object Notation)是一种用于客户端和服务器之间数据交换的轻量级格式。应用程序使用 JSON 对象在网络世界中相互发送和接收数据。 JSON 数据结构是行业标准,可用于发送和接收数据,如 Key & Value pair. Some people say its a very nice alternative for XML。我们可以将 JSON 个文件保存为 .json 扩展名。


JSON 长什么样?

一个简单的 json 文件如下所示,其中有许多 online editors 可用于编辑和验证 JSON 结构。

{
 "Student":{
   "FirstName":"Pawan",
   "LastName":"Garia",
   "IdNumber":"12345",
   "City" : "New Delhi",
   "EmailID" : "email@gmail.com" }
}

为什么首先使用 JSON Wire Protocol

实现客户端-服务器架构,它可以给我们带来以下好处。

  • 您可以使用任何编程语言编写测试。
  • 您可以在 SauceLabs、BrowserStack 或 Selenium Grid 设置等云服务上执行或 运行 测试。
  • 您未绑定 运行 仅在本地计算机上进行测试。
  • 可以为浏览器创建不同的驱动程序(FirefoxDriver、ChromeDriver)并使用相同的标准单独实现。

因此,客户端-服务器实现需要事先制定一套标准的规范,以便服务器和客户端在请求和响应的到来和发生方面相互同步。这就像一种相互交流的语言。所以我们需要一些通用规范来解决这种需求,解决方案就是 HTTP。


为什么 HTTP 是解决方案?

HTTP 是网络标准,可以作为规范的良好基础。每个 programming language 都有一个很好的 HTTP 库,可用于为请求和响应调用创建客户端和服务器。


JSON Wire 协议如何与 HTTP 协同工作?

HTTP 请求和响应通常由 GET 和 POST 请求组成,这超出了本次讨论的范围。


现状

Selenium 的角度来看,JSON Wire Protocol 现在已经过时了,WebDriver W3C Living Document 是新的实现.


WebDriver 通信

WebDriver 协议被组织成命令。每个 HTTP request with a method and template defined in the specification represents a single command and hence each command produces a single HTTP response. In response to a command, the remote end 将 运行 一系列称为 远程结束步骤 的操作。这些提供了远程端在收到特定命令时所采取的操作序列。


命令处理

远程端是一个 HTTP 服务器,它从客户端读取请求并通常通过 TCP 套接字写入响应。在规范中,通信被建模为特定 local end and remote end 与远程端可以写入字节和读取字节的连接之间的数据传输。这种连接如何工作以及如何建立的确切细节是一个更大的话题,超出了这个问题的范围。建立连接后,远程端必须从连接中读取字节,直到可以从数据构造完整的 HTTP 请求。如果无法构造完整的 HTTP 请求,远程端必须关闭连接,return 状态代码为 500 的 HTTP 响应,或 return 错误代码未知的错误。


结尾