目前正在做一些考试,我正在努力解决一些问题。这些都在我的笔记中被“提及”,但我并不真正理解它们是如何联系在一起的。据我所知:
SOA - 使服务使用者/提供者进行通信的解决方案。 (据我所知,这是其他一切的总称)
WSDL - 描述提供者服务的语言。
SOAP - 服务用于发送消息的XML协议“包装器”。与WSDL一起使用以提供参数?
REST - 一种在功能上与SOAP类似但避免使用XML的设计模式? (真的不确定这个)
JSON - 使用javascript的XML替代方案? (也不确定这个)
在互联网上四处看,似乎没有明确定义所有这些是什么以及它们如何相互关联。
答案 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
文件。例如,您无法为.Net
和php
客户端使用相同的文件。
WSDL
文件包含有关Web服务功能的一些说明。此文件的类型为XML
。 SOAP
是REST
的替代方案。
REST :代表具有代表性的状态转移
它是另一种API服务,它非常易于客户使用。它们不需要像WSDL
文件那样具有特殊的文件扩展名。 CRUD操作可以通过不同的HTTP Verbs
实现(GET用于读取,POST用于创建,PUT或PATCH用于更新,DELETE用于删除所需文档),它们基于HTML
协议,并且大多数时间响应采用JSON
或XML
格式。另一方面,客户端应用程序必须通过确切的参数名称和类型来完全调用相关的HTTP Verb
。由于没有特定的定义文件,如WSDL
,它是使用端点的手动作业。但这并不是什么大不了的事,因为现在我们有很多用于不同IDE的插件来生成客户端实现。
SOA :代表面向服务的架构
包括所有带有Web服务概念和体系结构的编程。想象一下,您想要实现一个大型应用程序。一种做法可以是使用一些不同的服务,称为微服务,整个应用程序机制将在适当的时间调用所需的Web服务。
REST
和SOAP
个网络服务都属于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
字符串创建关联数组。与我之前描述的其他概念相比,这是一个不同的概念。