zoukankan      html  css  js  c++  java
  • 软件开发基本接口学习二

    相关知识

    Web服务主要有两种,一种是基于soap类型的服务,一种是基于rest类型的服务,其中soap类型的服务有两种版本,一种是soap1.1版本,一种是soap1.2版本,soap服务类型的数据是xml数据格式的,而rest服务的数据类型是json格式的。

    SOA(Service-Oriented Architecture)的定义是  面向服务的架构。就是说将软件按照功能设计成一个个服务,这些服务用标准的方式定义接口、并通过标准的协议进行调用。SOA所定义的接口和调用方式是独立于编程语言和运行平台的,广义上将SOA可以基于不同的底层技术实现。

    SOAP(Simple Object Access Protoclol)的定义是  简单对象访问协议。是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议。对于SOAP的理解:SOAP=HTTP+XML;SOAP把XML的使用代码化为请求和响应参数的编码模式,并用HTTP做传输,SOAP是把成熟的基于Http的WEB技术与XML的灵活性和可拓展性组合在了一起;一个SOAP实现可以简单的看做遵循SOAP编码规则的HTTP请求和响应。

    UDDI(Universal Description, Discovery and Integration)通用描述、发现与集成服务。是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。

    WSDL(网络服务描述语言)是Web Service的描述语言,也就是说wsdl文件是soap的使用说明书

    REST(Representational State Transfer)表述性状态传递,REST并没有一个明确的标准,而更像是一种设计的风格

    RESTful,符合REST原则的架构方式即可称为RESTful

    JSON(JavaScript Object Notation)JavaScript 对象表示法

    URL(Uniform Resource Locator,统一资源定位符)

    接口的定义

    计算机世界里的接口这两个字具有两种众所周知的含义:

    一种指软件本身的狭义“接口”,比如各种软件开发API等

    一种指的是人与软件之间的交互界面,也就是“UI”

    这里要说的是前一种定义: 软件不同部分之间的交互接口,就是API(Application Programming Interface,应用程序接口)

    软件接口是系统之间交互信息的桥梁,所有在应用上获得成功的软件或者Web应用无一不是首先在API的设计上满足了用户的需求,即便这些用户几乎从不直接使用这些API

    主流接口技术

    Web Service

    MQ

    FTP

    HTTP

    Socket

    中间表

    MQ消息队列

    MQ(Message Queue)消息队列可以简单理解为,把要传输的数据放在队列中,队列是先进先出的

    把数据放到消息队列叫做生产者,从消息队列里边取数据叫做消费者

    使用消息队列能解耦、异步、削峰、限流

    使用消息队列会遇到的问题:

    不能是单机的,需要集群或者分布式

    如果消息队列挂掉,为了减少数据丢失需要做数据持久化,将消息队列数据存储在(磁盘、数据库、分布式文件系统、Redis)

    保证消息没有被重复消费

    保证消息传递的顺序性

    一致性问题

    消费者怎么得到消息队列的数据

    Push,生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿

    Pull,消费者不断去轮训消息队列,看看有没有新的数据,如果有就消费

    FTP

    FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端

    这里说的FTP接口技术是开发FTP服务接口,对外提供接口服务

    所有的项目开发中需要使用FTP服务器的地方都不能直接操作FTP服务器,而是通过调用统一的接口去操作文件的上传下载等功能

    主要策略:文件上传、下载、删除、列表、展示等所有的项目开发中需要使用ftp服务器的地方都不能直接操作ftp服务器,而是通过调用一个统一的接口去操作文件的上传下载等功能

    CIMS、ECM属于这种

    HTTP

    Http接口基于Http协议,接口开发需要在接口之间做一些约定,简而言之就是一些通信规则,若是不规范的通信将不予以处理或者直接通信失败。

    Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。

    HTTP协议的主要特点可概括如下:

    支持客户/服务器模式。

    简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

    灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

    无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

    无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    HTTP请求

     

    HTTP协议结构

     

    HTTP请求消息

    客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

    请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

    格式如下:

    <request-line>

    <headers>

    <blank line>

    [<request-body>

    1、请求行

    请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。

    HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

    最常用的方法有:

    GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,

    POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

    2、请求头部

    请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

    User-Agent:产生请求的浏览器类型。

    Accept:客户端可识别的内容类型列表。

    Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

    3、空行,最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

    4、请求正文

    请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

    HTTP响应消息

    在接收和解释请求消息后,服务器返回一个HTTP响应消息。

    HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

    报文格式:

    <status-line>

    <headers>

    <blank line>

    [<response-body>]

    1、状态行格式:HTTP-Version Status-Code Reason-Phrase

    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

    2、响应报头

    响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

    3、响应正文

    响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码

    状态代码

    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

    1xx:指示信息--表示请求已接收,继续处理

    2xx:成功--表示请求已被成功接收、理解、接受

    3xx:重定向--要完成请求必须进行更进一步的操作

    4xx:客户端错误--请求有语法错误或请求无法实现

    5xx:服务器端错误--服务器未能实现合法的请求

    常见状态代码、状态描述、说明:

    200 OK      //客户端请求成功

    400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

    403 Forbidden  //服务器收到请求,但是拒绝提供服务

    404 Not Found  //请求资源不存在,eg:输入了错误的URL

    500 Internal Server Error //服务器发生不可预期的错误

    503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    eg:HTTP/1.1 200 OK

    Socket

    介绍Socket之前先对网络7层协议有个了解:

    7 应用层     --HTTP协议

    6 表示层     --HTTP协议

    5 会话层

    4 传输层     --TCP协议

    3 网络层     --IP协议

    2 数据链路层

    1 物理层

    其中高层,既7、6、5、4层定义了应用程序的功能,下面3层,既3、2、1层主要面向通过网络的端到端的数据流

    套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

    应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

    CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

    Socket建立网络连接的步骤

    建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

    套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

    服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

    客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

    连接确认:当服 务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端 确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

    接口分类

    接口调用方式

    同步:调用方在调用接口后必须在接口的结果返回后才可以继续执行自己的任务

    异步:调用方在调用接口后不需要等待接口的结果返回,可以继续执行自己的任务

    接口交互方式

    实时:接口的响应速度有很高的要求,通常要求接口处理能在秒级完成

    非实时:调用者对接口的执行苏福要求不高

    接口数据量

    大数据量:大数据量传输,通常是批量数据

    小数据量:接口数据量偏小,通常小于100K的数据包

    接口频率

    非周期:接口不按固定周期交互,通常为事件触发,比如查询

    周期:接口按固定周期,比如按日、按周、按月、按小时、按分钟或其他频率交互

    选择接口技术

    同步实时小量数据

    Web Service

    异步非实时小量数据

    接口表、Web Service

    异步非实时大量数据

    接口表、FTP

    视频,图片,断点续传

    Socket

    在.net平台下创建接口服务

    Web Service

    中间表

    WCF

    Web API

    Web Service

    定义

    WebService是描述一些操作(利用标准化的XML消息传递机制可以通过网络访问这些操作)的接口。存在于互联网中的组件,具有独立性、跨平台和技术,通过URL进行定位调用WebService体系结构基于三种角色(服务提供者、服务注册中心、服务请求者)之间的交互。交互设计发布、查找和绑定操作。

    简单的说WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言(通过 xml 描述)间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

    优点

    通过标准SOAP协议通讯,基于Http传递XML定义的SOAP协议数据,是开放的标准,标准性高,扩展性好

    可以跨编程语言、跨平台、跨操作系统远程调用,服务端和客户端可以使用不同的语言编写

    缺点

    Web Service使用了XML对数据封装,会造成大量数据在网络中传输,性能略低

    XML Web Services Architecture

     

    Web Service术语

    XML(Extensible Markup Language)可扩展标记语言

    XSD(XML Schema Definition)XML Schema定义,描述 XML 文档的结构

    SOAP(Simple Object Access Protocol)简单对象访问协议

    WSDL(Web Services Description Language)Web服务描述语言

    UDDI(Universal Description,Discovery,and Integration)统一描述、发现和集成

    XML

    XML(Extensible Markup Language)可扩展标记语言

    XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立

    虽然XML占用的空间比二进制数据占用的更多,但XML极其简单易于掌握和使用

    XSD

    XSD(XML Schema Definition)XML Schema定义,描述 XML 文档的结构

    XSD是DTD(Document Type Definition,文档类型定义)的替代品,描述XML文档的结构,作用是定义 XML 文档的合法构建模块

    XSD本身是一个XML文档,它符合XML语法结构,可以用通用的XML解析器解析它

    XSD定义,文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素和属性的默认和固定值

    XSD是DTD替代者的原因:

    据将来的条件可扩展

    比DTD丰富和有用

    用XML书写

    支持数据类型

    支持命名空间

    XSD文件的后缀名是.xsd

    SOAP

    SOAP(Simple Object Access Protocol)简单对象访问协议

    SOAP是一种轻量的、简单的、基于XML的协议,它被设计成在Web上交换结构化的和固化的信息

    SOAP可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序

    SOAP包括三个部分:

    SOAP封装:它定义了一个框架,该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的

    SOAP编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例

    SOAP RPC表示:它定义了用于表示远程过程调用和应答的协定

    SOAP消息基本是从发送端到接收端的单向传输,但它们常常结合起来执行类似请求/应答的模式。所有的SOAP消息都是用XML编码。一条SOAP消息就是一个包含有一定必须的SOAP的封装包,一个可选的SOAP标头和一个必须的SOAP体块的XML文档

    把SOAP绑定到HTTP提供了同时利用SOAP的样式和分散的灵活性的特点以及HTTP的丰富的特征库的优点。在HTTP上传送SOAP并不是说SOAP会覆盖现有的HTTP语义,而是HTTP上的SOAP语义会自然的映射到HTTP语义。

    WSDL

    WSDL(Web Services Description Language)Web服务描述语言

    WSDL基于XML格式,它是Web Service客户端和服务器端都能理解的标准格式,其中描述的信息分为What、Where、How等部分,好比我们去商店买东西,首先要知道商店有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。

    WSDL文件保存在Web服务器上,通过URL地址可以访问到它,客户端要调用Web Service之前,要知道该服务的WSDL地址

    Web Service服务提供商可以通过两种方式来暴露它的WSDL文件地址:

    注册到UDDI服务器,以便被人查找

    直接告诉给客户端调用者,例如,在自己网站给出信息或邮件告诉

    WSDL文件是SOAP的使用说明书。只有能看懂WSDL文件,我们才可以去调用SOAP类型的Web服务,在WSDL文件中我们可以获得的信息:

    soap服务的名称

    soap服务的地址

    soap服务暴露的方法

    soap服务方法的参数

    soap服务方法参数的类型和相应的返回值执行

    soap服务方法通过什么方式调用

    UDDI

    UDDI(Universal Description,Discovery,and Integration)统一描述、发现和集成

    UDDI是为解决Web服务的发布和发现问题而制定的新一代基于Internet的电子商务技术标准

    包含一组基于Web的、分布式的Web服务信息注册中心的实现标准,以及一组使企业能将自己提供的Web服务注册到该中心的实现 标准

    Web Service工作过程

     

    Web Service调用原理

    Web Service使用SOAP协议实现跨编程语言和跨操作系统平台。

    Web Service采用Http协议传输数据,采用XML封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么服务对象的返回结果是什么),发送请求和接收结果时增加了一些特定的Http消息头,以说明Http消息的内容格式,这些特定的Http消息头和XML内容格式就是SOAP协议

    SOAP协议=Http协议+XML数据格式,SOAP协议是基于Http协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路

    Web Service客户端使用Http协议把遵循某种格式的XML请求数据发送给Web Service服务器,服务器再通过Http协议返回遵循某种格式的XML结果数据就可以了,客户端和服务器不用关心对方使用的是说明编程语言。例如:商店服务员收到钱就给客户提供货物,不关心客户是什么性质的人,客户也不用关心服务员是说明性质的人。

    Web Service框架的本质就是一个个Servlet(小服务程序),当远程客户端通过Http协议发送SOAP格式的请求数据后,Web Service解析这个数据,就知道该调用哪个类的哪个方法,去寻找或创建这个对象,并调用其方法,再把方法返回的结果包装成SOAP格式的数据,通过Http响应消息返回给客户端

    Web Service编程原理

    Web Service提供者给各类客户端API提供WSDL文件的URL地址,客户端API会创建底层代理类,调用这些代理类就可以访问Web Service服务了

    代理类把客户端的方法调用变成SOAP格式的请求数据再通过Http协议发出去,并把接收到的SOAP数据变成返回数据

    Web Service实现步骤

    服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)

    服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)

    服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)

    利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)

    服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)

    中间表

    这种方式是通过数据库中间表获取系统的数据,将相关的数据同步到其他系统。例如:CCGS中的对列表

    优点:

    接口实现简单,效率高

    缺点:

    系统间耦合度高,对双方系统稳定性以及接口稳定性要求较高

    WCF

    WCF全称为Windows Communication Foundation。是微软公司推出的一个完全基于SOA的通信框架。在过去若干年中,微软先后推出了一系列分布式通信技术,比较典型的包括COM/DCOM、.NET Remoting、XML Web Service、MSMQ(消息队列)等,这些技术各有优劣,目前也都被开发人员选择并使用。而WCF就是各种分布式技术的集大成者,它将微软之前提供的各种分布式通信技术完全整合在一起,提供了一套统一的API。

    WCF是用于构建面向服务的应用程序的框架 ,是由微软发展的一组数据通信的应用程序开发接口,是一组公开的功能集合,是Web Service的进化版。

    WCF特性

    统一性

    由多种技术的整合,但仍然可以向.net一样面向对象代码编写,因为它采用托管代码编写方式。

    互操作性

    采用SOAP通讯机制,保证了系统之间的互操作性,可以跨进程、跨机制。甚至跨平台通信,只要他支持Web Service。

    安全与可靠性

    因为WCF包含多种协议,故有多种协议的安全机制,尤其是SOAP的。

    兼容性

    WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.Net Remoting。即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。

    WCF整合了哪些技术

     

    Web API

    Web API是一个比较宽泛的概念。这里提到Web API特指ASP.NET Web API, API接口,可以实现存储服务、消息服务、计算服务等能力,利用这些能力可以进而开发出强大功能的web应用。

    Web API官方定义如下,强调两个关键点,即可以对接各种客户端(浏览器,移动设备),构建http服务的框架。

    ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for building RESTful applications on the .NET Framework.

    特点

    基于REST-ful类型的服务,数据格式JSON

    可以使用HTTP的全部特点(比如URIs、request/response头,缓存,版本控制,多种内容格式)

    支持MVC的特征,例如:路由、控制器、action、filter、模型绑定、控制反转(IOC)、依赖注入(DI)、单元测试。可以使程序更简单、更健壮

    可以部署在应用程序和IIS上

    这是一个轻量级的框架,并且对限制带宽的设备,比如智能手机等支持的很好

    请求的回复通过Http Status Code表达不同含义,并且客户端可以通过Accept header来与服务器协商格式,例如你希望服务器返回JSON格式还是XML格式。

    请求的回复格式支持 JSON、XML,并且可以扩展添加其他格式

    RESTFUL

    RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。

    RESTFUL特点包括:

    每一个URI代表一种资源(resource),所有网址请求接口中不能有动词,只能有名词,这点和数据库设计风格很像

    客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源

    通过操作资源的表现形式来操作资源

    资源的表现形式是XML或者HTML

    客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息

    WCF和WEB API我该选择哪个?

    如果服务需要创建一个支持消息、消息队列、双工通信,选择WCF

    如果服务需要在TCP/Named Pipes/UDP (wcf 4.5),选择WCF

    如果服务需要支持One Way Messaging/Message Queue/Duplex Communication,选择WCF

    如果服务需要在http协议上,并且希望利用http协议的各种功能,选择Web API

    如果服务需要被各种客户端(特别是移动客户端)调用,选择Web API

    如果服务需要创建一个基于HTTP的面向资源的服务并且可以使用HTTP的全部特征时(比如URIs、request/response头,缓存,版本控制,多种内容格式),选择Web API

  • 相关阅读:
    实现两个窗口通信方法-postMessage
    Java中的参数传值方式
    数据库连接池(connection pool)
    批量处理JDBC语句提高处理速度
    数据库事务,隔离级别
    BeanUtils介绍及使用
    JDBC获得数据库连接及使用
    jquery radio 行选中 操作
    EXTJS4.0 grid 可编辑模式 配置
    sql server 中使用 LIKE 语句 SqlParameter 使用
  • 原文地址:https://www.cnblogs.com/hofmann/p/12957800.html
Copyright © 2011-2022 走看看