157

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

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

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

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

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

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

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

4

2 回答 2

256

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

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

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

因此,您设计了一种在处理和生成有用信息的后端(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,因为它易于在每种语言中使用和解析。

于 2013-05-18T18:09:51.337 回答
31

WSDL:代表 Web 服务描述语言

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

REST:代表状态转移

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

SOA:代表面向服务的架构

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

于 2013-05-18T15:44:20.040 回答