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

Jay*_*Jay 155 rest soa json soap wsdl

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

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

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

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

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

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

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

Ani*_*han 250

想象一下,您正在开发一个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,因为它易于使用并在每种语言中进行解析.

  • 关于JSON vs XML的警察出色的答案.更平衡的版本是:XML和JSON是序列化数据的方式.XML更灵活,并且围绕它设计了许多标准,但有些人觉得它过于复杂和冗长.JSON是一种更简单的格式,它以简洁的方式定义了一些基本结构,易于用于非正式数据结构; 有些人正在研究标准,以复制那些存在于XML之上的标准. (36认同)

Sam*_*ami 30

WSDL:代表Web服务描述语言

在SOAP(简单对象访问协议)中,当您使用Web服务并向项目添加Web服务时,您的客户端应用程序不了解Web服务功能.现在它以某种方式过时,对于每种不同的客户端,你必须实现不同的WSDL文件.例如,您不能使用相同的文件.Netphp客户端.该WSDL文件包含有关Web服务功能的一些说明.这个文件的类型是XML.SOAP是另一种选择REST.

REST:代表具有代表性的国家转移

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

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

包括所有带有Web服务概念和体系结构的编程.想象一下,您想要实现一个大型应用程序.一种做法可以是使用一些不同的服务,称为微服务,整个应用程序机制将在适当的时间调用所需的Web服务.两者RESTSOAPWeb服务都是一种SOA.

JSON:代表javascript Object Notation

当您为javascript序列化对象时,对象格式的类型是JSON.想象你有人类:

class Human{
 string Name;
 string Family;
 int Age;
}
Run Code Online (Sandbox Code Playgroud)

你有这个类的一些实例:

Human h1 = new Human(){
  Name='Saman',
  Family='Gholami',
  Age=26
}
Run Code Online (Sandbox Code Playgroud)

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

  [h1:{Name:'saman',Family:'Gholami',Age:'26'}, ...]
Run Code Online (Sandbox Code Playgroud)

javascript可以通过eval()函数评估这种格式,并从该JSON字符串中创建一个关联数组.与我之前描述的其他概念相比,这是一个不同的概念.