目前正在做一些考试,我正在努力解决一些概念。这些都在我的笔记中被“提到”过,但我并不真正理解它们是如何联系在一起的。据我的理解是:
SOA - 使服务消费者/提供者进行通信的解决方案。 (据我了解,这是其他所有内容的总称)
WSDL - 一种描述提供者服务的语言。
SOAP - 服务用于发送消息的 XML 协议“包装器”。与 WSDL 一起提供参数?
REST - 一种在功能上类似于 SOAP 但避免使用 XML 的设计模式? (真的不确定这个)
JSON - 使用 javascript 的 XML 的替代方案? (也不确定这个)
在互联网上环顾四周,似乎没有明确定义所有这些是什么以及它们如何相互关联。
想象一下,您正在开发一个 Web 应用程序,并且您决定将功能与应用程序的呈现分离,因为它提供了更大的自由度。
您创建一个 API 并让其他人也通过它实现自己的前端。您在此处所做的是实施一种SOA 方法,即使用网络服务。
Web 服务使功能构建块可以通过独立于平台和编程语言的标准 Internet 协议访问。
因此,您设计了一种在处理和生成有用信息的后端(Web 服务)和前端(使用数据)之间的交换机制,前端可以是任何东西。 (网络、移动或桌面应用程序,或其他网络服务)。这里唯一的限制是前端和后端必须“说”相同的“语言”。
这就是 SOAP 和 REST 的用武之地。它们是您选择与 Web 服务通信的标准方式。
肥皂:
SOAP 在内部使用 XML 来回发送数据。 SOAP 消息具有严格的结构,然后需要解析响应 XML。 WSDL 是对可以发出哪些请求、使用哪些参数以及它们将返回什么内容的规范。它是您的 API 的完整规范。
休息:
REST 是一种设计理念。
万维网代表了符合 REST 架构风格的系统的最大实现。
它不像 SOAP 那样死板。 RESTful web-services 使用标准 URI 和方法调用网络服务。当您请求一个 URI 时,它会返回一个对象的表示,然后您可以对其执行操作(例如 GET、PUT、POST、DELETE)。您不仅可以选择 XML 来表示数据,还可以选择任何东西(包括 JSON)
Flickr 的 REST API 更进一步,还允许您返回图像。
JSON 和 XML 在功能上是等效的,并且是常见的选择。还有一些基于 RPC 的框架,例如基于 Protobufs 的 GRPC 和 Apache Thrift,可用于 API 生产者和消费者之间的通信。 Web API 最常用的格式是 JSON,因为它易于在每种语言中使用和解析。
WSDL:代表 Web 服务描述语言
在 SOAP(简单对象访问协议)中,当您使用 Web 服务并向项目添加 Web 服务时,您的客户端应用程序不知道 Web 服务功能。现在它在某种程度上已经过时了,对于每种不同的客户端,您必须实现不同的 WSDL
文件。例如,您不能为 .Net
和 php
客户端使用相同的文件。 WSDL
文件有一些关于网络服务功能的描述。该文件的类型是 XML
。 SOAP
是 REST
的替代品。
REST:代表状态转移
它是另一种 API 服务,对客户来说非常容易使用。它们不需要像 WSDL
文件那样具有特殊的文件扩展名。 CRUD 操作可以通过不同的 HTTP Verbs
实现(GET 用于读取,POST 用于创建,PUT 或 PATCH 用于更新和 DELETE 用于删除所需文档),它们基于 HTTP
协议,并且大多数时候响应在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
字符串创建一个关联数组。与我之前描述的其他概念相比,这是一个不同的概念。