协议和Json Wire协议有什么区别?

13

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

Json Wire Protocol(JSON协议): 客户端有一个对象需要发送到服务器。客户端将此对象转换为JSON对象并将其发送到服务器。服务器解析JSON对象并将其转换回对象供使用。服务器将响应对象转换为JSON对象并将其发送回客户端。然后,客户端将JSON对象转换为对象供使用。

为什么后者被称为Json Wire Protocol(JSON协议)


1
协议 - 一种定义交换数据方法的标准。如果需要,可以通过网络进行交换。Json Wire协议是一组规则,用于指定两个参与方之间应该以什么顺序、以什么格式发送数据。为什么要这样称呼它 - 你的猜测和任何人一样好。我的猜测是 - 数据以json格式发送,并且通过“电线” - 网络连接发送。 - Todor Minakov
1
那么您的意思是它被称为线协议,因为数据通过电线(网络连接)传输,对吗? - learningQA
1
如果我必须猜的话,是的。就像超文本传输协议(HTTP)中的“文本”代表传输文本而不是二进制数据一样。 - Todor Minakov
好的,谢谢提供信息。 - learningQA
1个回答

21
你的翻译如下:

关于 协议JsonWireProtocol,你说得很正确。值得一提的是,在这个阶段,所有与浏览器或 RemoteWebDriver 服务器通信的 WebDriver 实现都应该使用一个共同的传输协议。这个传输协议定义了一个使用 JSON over HTTP 的 RESTful web service

JSON Wire Protocol 是一个抽象规范,它描述了自动化行为(如点击、输入等)如何映射到 Selenium 或 Appium 或 HTTP 请求和响应。该协议假定 WebDriver API 已经被 "展平",但期望客户端实现采用更面向对象的方法,就像现有的 Java API 所示。传输协议是由 "命令" 和 "响应" 的请求/响应对实现的。


JSON Wire protocol是什么?

JSON(JavaScript对象表示)是客户端和服务器之间进行数据交换的轻量级格式。应用程序使用JSON对象在Web世界中相互发送和接收数据。JSON数据结构是行业标准,可用于发送和接收键值对数据。有些人认为它是XML的一个很好的替代品。我们可以将JSON文件保存为.json扩展名。


JSON是什么样子的?

一个简单的JSON文件如下所示,有许多在线编辑器可用于编辑和验证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是Web的标准,可以成为规范的良好基础。每种编程语言都有优秀的HTTP库,可用于创建客户端和服务器进行请求和响应调用。


JSON Wire协议如何与HTTP配合工作?

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


当前状态

Selenium 的角度来看,JSON Wire Protocol 已经过时,现在采用的是 WebDriver W3C Living Document 实现。


WebDriver通信

WebDriver协议按照命令进行组织。规范中定义的每个具有方法和模板的HTTP请求都代表一个单独的命令,因此每个命令会产生一个HTTP响应。在响应命令时,远程端将运行一系列被称为远程端步骤的操作。这些步骤提供了当远程端接收到特定命令时所采取的操作序列。


命令处理

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


结语

在使用Selenium时,JsonWireProtocol机制与W3C Living Document中的新标准之间的区别


1
干得好!谢谢,这正是我想要的。 - learningQA
如果有人问当前实现的情况,我应该说什么?WebDriver wire协议?还是WebDriver协议? - learningQA
1
“Wire protocol”已经成为历史,我们现在称其为WebDriver W3C规范 - undetected Selenium
1
感谢提供信息。 - learningQA
1
协议将假定WebDriver API已经被“展平”。你所说的“展平”是什么意思?非对象? - learningQA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接