JSON,REST,SOAP,WSDL和SOA:它们如何链接在一起


155

目前正在做一些考试,我正在努力学习一些概念。我的笔记中确实“提到”了所有这些内容,但我并不真正了解它们如何相互联系。据我了解:

SOA-使服务使用者/提供者进行通信的解决方案。(据我了解,这是其他所有术语的总称)

WSDL-一种描述提供程序服务的语言。

SOAP-服务用来发送消息的XML协议“包装器”。与WSDL协同工作以提供参数?

REST-一种功能类似于SOAP但避免使用XML的设计模式?(真的不确定这一点)

JSON-使用JavaScript的XML的替代方法?(也不确定这一点)

在互联网上四处张望,似乎没有一个明确的定义,这些都是什么以及它们如何相互链接。

Answers:


252

假设您正在开发Web应用程序,并且决定将功能与应用程序的表示分离开来,因为它具有更大的自由度。

您创建一个API,并让其他人也可以在其上实现自己的前端。您在这里所做的只是实现一种SOA方法,即使用Web服务。

Web服务使功能构建块可以通过独立于平台和编程语言的标准Internet协议进行访问。

因此,您需要在后端(Web服务)(用于处理和生成有用的东西)与前端(消耗数据)之间建立一种交换机制。(Web,移动或桌面应用程序,或其他Web服务)。这里唯一的限制是前端和后端必须“说”相同的“语言”。


这就是SOAP和REST进入的地方。它们是您选择与Web服务通信的标准方式。

肥皂:

SOAP在内部使用XML来回发送数据。SOAP消息具有严格的结构,因此需要解析响应XML。 WSDL是关于可以发出哪些请求,使用哪些参数以及它们将返回什么的规范。它是您API的完整规范。

休息:

REST是一个设计概念。

万维网代表了符合REST架构风格的系统的最大实现。

它不像SOAP那样严格。RESTful Web服务使用标准URI和方法来调用Web服务。当您请求URI时,它返回一个对象的表示,然后您可以对其执行操作(例如GET,PUT,POST,DELETE)。您不仅限于选择XML来表示数据,还可以选择任何东西(包括JSON)

Flickr的REST API更进一步,还可以让您返回图像。


JSONXML在功能上是等效的,是常见的选择。还有一些基于RPC的框架,例如基于Protobufs的GRPC和Apache Thrift,可用于API生产者和消费者之间的通信。Web API使用的最常见格式是JSON,因为它易于使用和解析每种语言。


36
很好的答案,直到对JSON和XML为止。一个更加平衡的版本是:XML和JSON是序列化数据的方法。XML更灵活,并且围绕它设计了很多标准,但是有些人觉得它太复杂和冗长。JSON是一种更简单的格式,它以简洁的方式定义了一些基本结构,易于用于非正式数据结构。有些人正在基于它的标准上进行工作,以复制XML之上的标准。
IMSoP 2014年

30

WSDL:代表Web服务描述语言

在SOAP(简单对象访问协议)中,当您使用Web服务并将Web服务添加到项目中时,您的客户端应用程序不了解Web服务功能。如今,它已经过时了,对于每种不同的客户端,您都必须实现不同的WSDL文件。例如,您不能将相同的文件用于.Netphp客户端。该WSDL文件包含有关Web服务功能的一些描述。该文件的类型为XMLSOAP是的替代方案REST

休息:代表代表性状态转移

这是另一种API服务,对于客户端来说非常容易使用。他们不需要像WSDL文件一样具有特殊的文件扩展名。CRUD操作可以通过不同的方式实现HTTP Verbs(用于读取的GET,用于创建的POST,用于更新的PUT或PATCH以及用于删除所需文档的DELETE),它们基于HTTP协议,并且大多数情况下响应是采用格式JSONXML格式。另一方面,客户端应用程序必须HTTP Verb通过精确的参数名称和类型来精确调用相关的。由于没有用于定义的特殊文件WSDL,因此它是使用端点的手动作业。但这没什么大不了的,因为现在我们有很多用于不同IDE的插件来生成客户端实现。

SOA:代表面向服务的体系结构

包括所有带有Web服务概念和体系结构的编程。想象您要实现一个大型应用程序。一种做法是拥有一些不同的服务,称为微服务,而整个应用程序机制将在正确的时间调用所需的Web服务。这两个RESTSOAPWeb服务是一种SOA

JSON:代表javascript Object Notation

当您为javascript序列化对象时,对象格式的类型为JSON。假设您有人类班级:

class Human{
 string Name;
 string Family;
 int Age;
}

并且您有一些来自此类的实例:

Human h1 = new Human(){
  Name='Saman',
  Family='Gholami',
  Age=26
}

当您将h1对象序列化为JSON时,结果为:

  [h1:{Name:'saman',Family:'Gholami',Age:'26'}, ...]

javascript可以按eval()函数评估此格式,并根据此JSON字符串创建关联数组。与我之前描述的其他概念相比,这是一个不同的概念。


这个答案包含一些错误(例如HTML <> HTTP)
Yassin Hajaj

1
@YassinHajaj已修复
Saman Gholami
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.