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

时间:2013-05-18 15:40:02

标签: json rest soap wsdl soa

目前正在做一些考试,我正在努力解决一些问题。这些都在我的笔记中被“提及”,但我并不真正理解它们是如何联系在一起的。据我所知:

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

WSDL - 描述提供者服务的语言。

SOAP - 服务用于发送消息的XML协议“包装器”。与WSDL一起使用以提供参数?

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

JSON - 使用javascript的XML替代方案? (也不确定这个)

在互联网上四处看,似乎没有明确定义所有这些是什么以及它们如何相互关联。

2 个答案:

答案 0 :(得分:248)

想象一下,您正在开发一个Web应用程序,并决定将功能与应用程序的表示分离,因为它提供了更大的自由度。

您创建了一个API,让其他人也可以在其上实现自己的前端。你刚刚在这里做的是实施SOA方法,即使用网络服务。

  

Web服务使功能构建块可通过标准访问   互联网协议独立于平台和编程语言。

因此,您在后端(Web服务)和前端(消耗数据)之间设计了一种交换机制,后端可以是任何东西。 (Web,移动或桌面应用程序或其他Web服务)。这里唯一的限制是前端和后端必须“说”相同的“语言”。


这就是SOAP和REST的用武之地。 它们是您选择与Web服务进行通信的标准方法。

<强> SOAP:

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

<强> REST:

REST是一个设计概念。

  

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

它没有SOAP那么严格。 RESTful web-services使用标准URI和方法来调用Web服务。当您请求URI时,它返回对象的表示,然后您可以对其执行操作(例如,GET,PUT,POST,DELETE)。您不仅可以选择XML来表示数据,还可以选择任何内容(包括JSON)

  

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


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

答案 1 :(得分:28)

WSDL :代表Web服务描述语言

在SOAP(简单对象访问协议)中,当您使用Web服务并向项目添加Web服务时,您的客户端应用程序不了解Web服务功能。现在它以某种方式过时,对于每种不同的客户端,您必须实现不同的WSDL文件。例如,您无法为.Netphp客户端使用相同的文件。 WSDL文件包含有关Web服务功能的一些说明。此文件的类型为XMLSOAPREST的替代方案。

REST :代表具有代表性的状态转移

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

SOA :代表面向服务的架构

包括所有带有Web服务概念和体系结构的编程。想象一下,您想要实现一个大型应用程序。一种做法可以是使用一些不同的服务,称为微服务,整个应用程序机制将在适当的时间调用所需的Web服务。 RESTSOAP个网络服务都属于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字符串创建关联数组。与我之前描述的其他概念相比,这是一个不同的概念。