• Web服务(Web Service)


    简介

    Web服务(Web Service)是一种Web应用开发技术,用XML描述、发布、发现Web服务。它可以跨平台、进行分布式部署。
    Web服务包含了一套标准,例如SOAP、WSDL、UDDI,定义了应用程序如何在Web上实现互操作。
    Web服务的服务端和客户端使用简单对象访问协议(SOAP)进行通信,通信的双方可以使用不同的编程语言、运行在不同的平台上。

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

    总体介绍

    SOAP是一个基于XML的轻量级的协议,用于在去中心化的、分布式环境中交换结构化的、有类型的信息。是 Web服务的通信协议。
    SOAP本身没有定义任何应用语义(例如一种编程模型)或者定义实现特有的语义,它只是通过提供一个模块化的包模型、通过一种编码机制(用于对模块内的数据编码),来定义一种简单的机制,用来表达应用语义。这样就使得SOAP可以用在各种各样的系统中,从消息系统到远程过程调用(RPC)。

    一个SOAP消息用于请求一个web服务,例如远程过程调用(RPC)。但SOAP不仅仅、也不是必须用于RPC。

    SOAP协议运行在其它协议之上,例如HTTP协议。

    SOAP版本:SOAP 1.1、SOAP 1.2,两者都是W3C的标准。Web服务部署的时候可以两个版本都支持。

    SOAP 1.1

    协议介绍

    SOAP 1.1协议:https://www.w3.org/TR/2000/NOTE-SOAP-20000508/

    SOAP 1.1包含如下三个部分:

    • SOAP 信封(envelope),定义了一个总体框架,用于表达消息内是什么、谁应该处理这个消息、是可选的还是强制的。
    • SOAP 编码规则(encoding rules),定义了一种序列化机制,用于交换应用定义的数据类型实例。
    • SOAP RPC表达,定义了一个规则,用来表达远程过程调用(RPC)和响应。

    一个SOAP消息就是一个XML文档,其中必须包含一个SOAP envelope和一个SOAP body,一个可选的SOAP header。

    SOAP 1.1不依赖于传输协议,可以和多种传输协议结合,例如HTTP协议、java消息服务(JMS)。

    SOAP独立于操作系统、不绑定某一个编程语言或者组件技术。
    只要客户端能发出XML消息就行,用什么技术实现客户端无关紧要。类似地,服务可以用任何语言来实现,只要服务能处理SOAP消息就行。客户端和服务端可以运行在任何合适的平台上。

    消息示例(用于RPC的场景)

    本示例来自SOAP 1.1协议:https://www.w3.org/TR/2000/NOTE-SOAP-20000508/
    更多示例请参考协议中的附录A:https://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383539

    备注:本示例中SOAP消息底层绑定了HTTP协议

    示例中,一个GetLastTradePrice SOAP请求发送给StockQuote 服务。请求有一个字符串类型的参数(ticker symbol),在 SOAP 响应中返回一个float类型的值。

    内嵌到HTTP 请求中的SOAP请求消息:

    POST /StockQuote HTTP/1.1
    Host: www.stockquoteserver.com
    Content-Type: text/xml; charset="utf-8"
    Content-Length: nnnn
    SOAPAction: "Some-URI"
    
    
       
           
               DIS
           
       
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    内嵌到HTTP 响应中的SOAP 响应消息:

    HTTP/1.1 200 OK
    Content-Type: text/xml; charset="utf-8"
    Content-Length: nnnn
    
    
       
           
               34.5
           
       
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    SOAP 1.2

    协议介绍

    SOAP 1.2包含三个部分、另外包含一些断言和一套测试集:

    • Part 0:入门https://www.w3.org/TR/soap12-part0/
      描述了有代表性的SOAP消息结构和消息交互模式,通过各种使用场景描述了SOAP的特征,目的是为SOAP 1.2特征提供一个更加容易理解的指南,帮助技术开发者理解SOAP怎么使用。

    • Part 1:消息框架https://www.w3.org/TR/soap12-part1/
      这部分提供了一个处理模型、一个扩展性模型、一个底层协议绑定框架、和SOAP消息结构。

    • Part 2:附加部分https://www.w3.org/TR/soap12-part2/
      描述了SOAP数据模型、SOAP编码、SOAP RPC表示、描述特性和绑定的惯例、SOAP提供的消息交互模式、SOAP HTTP绑定。

    消息示例(用于多轮交互的旅行预订场景)

    本示例来自SOAP 1.2版本的part0:https://www.w3.org/TR/soap12-part0/

    备注:本示例只演示SOAP消息,而暂时不管底层绑定了什么协议。

    例1:从旅行预订应用 -》旅行预订服务,发起旅行预订请求

    
     
     
      
       uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d
       2001-11-29T13:20:00.000-05:00
      
      
       Åke Jógvan Øyvind
      
     
     
      
       
         New York
         Los Angeles
         2001-12-14
         late afternoon
         aisle
       
       
         Los Angeles
         New York
         2001-12-20
         mid-morning
         
       
      
      
       none
      
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    例2:从旅行预订服务 -》 旅行预订应用,返回响应,提供机场列表供选择

    
     
     
      
       uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d
       2001-11-29T13:35:00.000-05:00
      
      
       Åke Jógvan Øyvind
      
     
     
      
       
         
           
              JFK LGA EWR 
           
         
       
       
         
           
             JFK LGA EWR 
           
         
         
      
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    例3:从旅行预订应用 -》 旅行预订服务,选择了机场

    
     
     
      
        uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d
        2001-11-29T13:36:50.000-05:00
      
      
       Åke Jógvan Øyvind
      
     
     
      
       
         LGA
       
       
         EWR
       
      
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    SOAP 1.1 和 SOAP 1.2之间的变化

    https://www.w3.org/TR/soap12-part0/#L4697

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

    简介

    WSDL是XML格式,用于描述Web服务。
    WSDL 1.1版本W3C发布出来仅仅用于讨论,但没有批准。
    WSDL 2.0版本是被W3C批准的正式版本。

    WSDL 1.1

    介绍

    https://www.w3.org/TR/2001/NOTE-wsdl-20010315

    包含如下几部分:

    • 服务定义
    • SOAP绑定
    • HTTP GET 和 POST绑定
    • MIME绑定

    WSDL 1.1文档样例

    样例来自:https://www.w3.org/TR/2001/NOTE-wsdl-20010315#_wsdl

    
    
    
        
           
               
                  
                      
                          
                      
                  
               
               
                  
                      
                          
                      
                  
               
           
        
    
        
            
        
    
        
            
        
    
        
            
               
               
            
        
    
        
            
            
               
               
                   
               
               
                   
               
            
        
    
        
            My first service
            
               
            
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    WSDL 2.0

    介绍

    WSDL 2.0包括3部分:

    WSDL 2.0文档样例

    样例来自:https://www.w3.org/TR/wsdl20-primer/#basics-greath-scenario

     
    
    
      
        This document describes the GreatH Web service.  Additional 
        application-level requirements for use of this service -- 
        beyond what WSDL 2.0 is able to describe -- are available 
        at http://greath.example.com/2004/reservation-documentation.html
      
    
      
        
    
              
               
                  
                    
                    
                    
                 
             
                
              
        
              
    
            
      
      
      
    
         
       
        
            
            
            
        
    
      
    
      
     
        
    
        
    
      
    
      
    
         
            
      
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

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

    备注:OASIS已经宣布关闭了UDDI技术委员

    UDDI基于XML,规定如何注册、分发、发现 Web服务。发布的标准有 V2和V3。

    UDDI Version 2 OASIS标准包含如下部分:
    https://www.oasis-open.org/committees/uddi-spec/doc/tcspecs.htm#uddiv2
    在这里插入图片描述

    UDDI Version 3 OASIS标准包含如下部分:
    https://www.oasis-open.org/committees/uddi-spec/doc/tcspecs.htm#uddiv3
    在这里插入图片描述

    支持带附件的SOAP消息Java接口(SAAJ:SOAP with Attachments API for Java interface)

    SAAJ提供了利用Java编程模型在互联网上发送XML SOAP消息的标准方法,SOAP消息可以携带附件(例如附件是二进制形式)。SAAJ用来处理 SOAP消息,例如读、写、发送和接收。

    主要的类和接口:
    https://www.ibm.com/docs/en/was/9.0.5?topic=SSEQTP_9.0.5/com.ibm.websphere.nd.multiplatform.doc/ae/cwbs_saaj.htm
    在这里插入图片描述
    在这里插入图片描述

    SAAJ 1.2 只支持SOAP 1.1消息,而SAAJ 1.3支持SOAP 1.1 和SOAP 1.2 消息。
    SAAJ 1.3向后兼容SAAJ 1.2,SAAJ 1.4向后兼容SAAJ 1.3。

    SAAJ 1.3:
    https://www.jcp.org/aboutJava/communityprocess/maintenance/jsr067/SAAJ1_3ChangeLog.html

    SAAJ 1.4:
    https://download.oracle.com/otn-pub/jcp/saaj-1_4-mrel4-eval-spec/saaj-1.4.pdf

    Jakarta SOAP with Attachments 2.0:
    https://jakarta.ee/specifications/soap-attachments/2.0/

    Jakarta SOAP with Attachments 3.0:
    https://jakarta.ee/specifications/soap-attachments/3.0/

    Web服务策略(WS-Policy:Web Services Policy)

    Web服务策略用来表示Web服务的能力和需求,是供机器阅读的语言。
    Web服务策略提供了一种机制,用来表示Web服务的能力和需求一致的结合,决定策略的兼容性,命名和引用策略,将Web服务元数据结构(例如service、endpoint 和operation)和策略关联。
    Web服务策略是一门简单的语言,有四个元素(Policy, All, ExactlyOne 和 PolicyReference ) 和两个属性(wsp:Optional 和 wsp:Ignorable)。

    例如文档中给出的策略示例(https://www.w3.org/TR/ws-policy-primer/):

    
      
      
        
        
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    
      
      
      
        
        
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    
      
        
          
            
              
            
          
        
        
          
            
          
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    Web Services Policy 1.5版本包含如下几部分:

    • 入门:https://www.w3.org/TR/ws-policy-primer/
      这部分不是一篇正式的规范。它提供了Web服务策略语言的介绍性描述。基本概念—策略表达式章节覆盖了Web服务策略的基本机制,高级概念—策略表达式章节针对策略实现者和断言作者提供了更深层次的资料,策略语言版本章节提供了策略语言版本管理的例子和最佳实践。
    • 框架:https://www.w3.org/TR/ws-policy/
      这部分提供一个通用目的模型和对应的语法,来描述基于Web服务的系统中实体的策略。定义了一套基本的结构,可以被其它的Web服务规范使用和扩展,来描述更广范围的要求和能力。
    • 附件:https://www.w3.org/TR/ws-policy-attach/
      这部分定义了两个通用目的关联策略和目标的机制,也定义了这些通用目的的机制怎么来使策略和WSDL 和 UDDI 描述关联。

    Web服务寻址(WS-Addressing:Web Services Addressing)

    Web服务寻址提供了跟传输无关的访问Web服务和消息的机制。

    示例:在SOAP 1.2消息中利用寻址属性(示例来自https://www.w3.org/TR/ws-addr-core/#tocRange):

    (01) 
    (02)   
    (03)    http://example.com/6B29FC40-CA47-1067-B31D-00DD010662DA
    (04)    
    (05)      http://example.com/business/client1
    (06)    
    (07)    http://example.com/fabrikam/Purchasing
    (08)    http://example.com/fabrikam/SubmitPO
    (09)   
    (10)   
    (11)     ...
    (12)   
    (13) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Web服务安全(WS-Security)

    Web Services Security: SOAP Message Security 1.0 (WS-Security 2004) :
    http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf

    这是OASIS发布的规范,取代Web Service Security (WS-Security) Version 1.0、Web Services Security Addendum Version 1.0。
    本规范包括如下章节:

    • 消息保护机制
    • ID引用
    • 安全头
    • 安全标识
    • 标识引用
    • 签名
    • 加密
    • 安全时间戳
    • 扩展样例
    • 错误处理
    • 安全考虑
    • 互操作性
    • 隐私考虑

    JAX-WS(Java API for XML-Based Web Services)

    https://download.oracle.com/otn-pub/jcp/jaxws-2_3-mrel5-eval-spec/jaxws-2.3.pdf

    JAX-WS 2.0 规范是代替JAX-RPC 1.0的下一代Web服务API。JAX-RPC(The Java API for XML Based RPC)是基于XML的RPC(远程过程调用)的Java API。
    JAX-WS 2.0 使用JAXB(The Java Architecture for XML Binding)进行XML数据绑定,所谓绑定就是指XML请求和XML响应如何映射成java对象。

    本规范包括如下章节:

    • 介绍
    • WSDL 1.1 到Java的 映射
    • Java 到 WSDL 1.1的映射
    • 客户端API
    • 服务API
    • 核心API
    • 注解
    • 定制化
    • Handler框架
    • SOAP绑定
    • HTTP绑定

    JAXB(Java Architecture for XML Binding)

    https://jcp.org/en/jsr/detail?id=222
    https://download.oracle.com/otn-pub/jcp/jaxb-2_3-mrel3-eval-spec/JAXB-2.3-spec.pdf

    JAXB可以根据XML Schema生成java类,也能根据java类生成XML Schema。XML数据绑定指定了XML请求和XML响应如何映射成java对象。
    另外,支持三个主要操作:

    • 将XML数据解包为java 对象的内容树。
    • 将java内容树打包回XML文档。
    • XML文档表示和java内容树的绑定。

    解包的过程能够对照schema检查XML文档的正确性。
    下面的图来自:https://download.oracle.com/otn-pub/jcp/jaxb-2_3-mrel3-eval-spec/JAXB-2.3-spec.pdf
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    XOP(XML-binary Optimized Packaging)

    https://www.w3.org/TR/xop10/

    定义了XML二进制优化打包规则,可以更加高效地序列化XML信息集。

    下面是协议文档中给出的一个例子:
    使用XOP处理之前的XML信息集(SOAP)

    
      
        
          /aWKKapGGyQ=
          Faa7vROi2VQ=
        
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    将XML信息集序列化XOP消息(SOAP)

    MIME-Version: 1.0
    Content-Type: Multipart/Related;boundary=MIME_boundary;
        type="application/xop+xml";
        start="";
        startinfo="application/soap+xml; action=\"ProcessData\""
    Content-Description: A SOAP message with my pic and sig in it
    
    --MIME_boundary
    Content-Type: application/xop+xml; 
        charset=UTF-8; 
        type="application/soap+xml; action=\"ProcessData\""
    Content-Transfer-Encoding: 8bit
    Content-ID: 
    
    
      
        
          
          
        
      
    
    
    --MIME_boundary
    Content-Type: image/png
    Content-Transfer-Encoding: binary
    Content-ID: 
    
    // binary octets for png
    
    --MIME_boundary
    Content-Type: application/pkcs7-signature
    Content-Transfer-Encoding: binary
    Content-ID: 
    
    // binary octets for signature
    
    --MIME_boundary--
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    pg嵌套子查询
    ​力扣解法汇总792. 匹配子序列的单词数
    批量在文件名中的特定文字的左边或右边位置添加文字
    [MIT 6.830 SimpleDB] Lab1 Exercise 1-3
    PostgreSQL的视图pg_roles
    五分钟了解django、drf重写user表(详细又全面的一次记录)
    死锁和死锁的处理
    十. 实战——云服务器
    Linux下C语言操作网卡的几个代码实例?特别实用
    mongodb(快速上手)(一)
  • 原文地址:https://blog.csdn.net/panghuangang/article/details/132787855