遵照REST的劳动与基于SOAP的劳动相比较,基于REST的服务与基于SOAP的服务相比伟德国际1946

 一、什么是REST

       表述性状态转移(Representational
State Transfer,REST),不是一种标准,而是一种软件架构风格。

      
基于REST的劳务与基于SOAP的劳务相比较,性能、作用和易用性上都更高,而SOAP协议相当的扑朔迷离和不透明。REST受到更为多的Web服务供应商欢迎。近期一大半供应商,如Tmall、腾讯、google、亚马逊等都提供REST风格的服务。

 REST的重大条件是:

 1.互联网上的具备东西都可被架空为资源;

 2.各类资源都有一个唯一的资源标识符URI;

 3.使用标准措施操作资源;

 4.所有的操作都是无状态的;

 5.通过缓存来增长质量。

       
REST (Representation State Transfer) 描
述了一个架构样式的互连网序列,比如Web应用程序。它首次出现在2000年 罗伊 Fielding 的学士杂谈中,他是HTTP规范的主要编写者之一。REST 指的是一组架构约束规范和标准。满意这么些约束原则和规则的应用程序或设计就是 RESTful。

      
使用REST做为业务逻辑接口是因为,从客户端到服务器的每个请求都无法不包括精晓请求所必需的信息。要是服务器在伸手之间的任哪一天刻点重启,客户端不会获得通告。其余,无状态请求可以由其他可用服务器回答,那越发适合云统计之类的环境。客户端可以缓存数据以立异品质。

       
在服务器端,应用程序状态和法力可以分为各样资源。资源是一个有意思的定义实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个
资源都利用 URI (Universal Resource Identifier) 得到一个满世界无双的地方。客户端选用的是规范的 HTTP协议举行资
源访问,同时还足以行使正规的HTTP方法,比如 GET、PUT、POST 和 DELETE。

      
REST的一个紧要条件是系统分层,那象征组件不可以驾驭它与之相互的中间层以外的零件。通过将系统的一些意义界定在某一层,因此可以界定整个连串的错综复杂,促进了底部的独立性。

      
当 REST 架构的牢笼原则作为一个完好应用时,将生成一个足以增加到大气客户端的应用程序。它还下落了客户端和服务器之间的相互延迟。统一界面简化了总体体系架构,立异了子系统里头交互的可知性。REST 简化了客户端和服务器的贯彻。

      
REST的资源表述方式得以是XML、HTML、JSON,或者其余随意的花样,这取决于服务提供商和消费服务的用户。

      
可是REST不是文武全才的。操作无状态也会牵动巨大的安全难点,如何授权和评释用户?借使须求每一趟请求都包含完整的地方和验证音讯,又如何幸免新闻败露?复杂的效应挑衅架构的易用性,那就必要在性质与功力间权衡,究竟该用REST如故SOAP。  

 一、什么是REST

       表述性状态转移(Representational
State Transfer,REST),不是一种标准,而是一种软件架构风格。

      
基于REST的劳动与基于SOAP的服务相比,质量、功用和易用性上都更高,而SOAP协议卓殊的错综复杂和不透明。REST受到越来越多的Web服务供应商欢迎。近日多数供应商,如天猫、腾讯、google、亚马逊(Amazon)等都提供REST风格的劳务。

 REST的最首要原则是:

 1.互连网上的富有东西都可被架空为资源;

 2.每个资源都有一个唯一的资源标识符URI;

 3.使用正规方法操作资源;

 4.所有的操作都是无状态的;

 5.通过缓存来增加品质。

       
REST (Representation State Transfer) 描
述了一个架构样式的网络种类,比如Web应用程序。它首次面世在2000年 Roy 菲尔德ing 的大学生诗歌中,他是HTTP规范的主要编写者之一。REST 指的是一组架构约束原则和条件。满足这么些约束原则和原则的应用程序或安排就是 RESTful。

      
使用REST做为业务逻辑接口是因为,从客户端到服务器的每个请求都必须含有掌握请求所必不可少的消息。假使服务器在乞请之间的别样时刻点重启,客户端不会得到文告。别的,无状态请求可以由其它可用服务器回答,那格外适合云计算之类的条件。客户端可以缓存数据以改进品质。

       
在服务器端,应用程序状态和机能能够分成各个资源。资源是一个妙不可言的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个
资源都使用 URI (Universal Resource Identifier) 得到一个无比的地址。客户端采纳的是正式的 HTTP协议进行资
源访问,同时还是能够采用正式的HTTP方法,比如 GET、PUT、POST 和 DELETE。

      
REST的一个人命关天原则是系统分层,那代表组件不可以精晓它与之相互的中间层以外的零部件。通过将系统的某些成效限制在某一层,因而可以界定整个系列的繁杂,促进了底部的独立性。

      
当 REST 架构的束缚原则作为一个总体应用时,将生成一个可以增加到大气客户端的应用程序。它还下跌了客户端和服务器之间的相互延迟。统一界面简化了总种类统架构,创新了子系统里面相互的可知性。REST 简化了客户端和服务器的兑现。

      
REST的资源表述情势得以是XML、HTML、JSON,或者其余随意的款式,那取决服务提供商和消费服务的用户。

      
不过REST不是全能的。操作无状态也会推动巨大的平安难题,如何授权和表明用户?如若必要每一次请求都包蕴完整的身份和认证信息,又怎么防止音信泄露?复杂的成效挑战架构的易用性,那就需要在性质与功能间权衡,究竟该用REST照旧SOAP。  

二、Rest的优点

  1)缓存,使用 HTTP 向 RESTful
端点申请数量时,用到的 HTTP 动词是 GET。对于 GET
请求响应中回到的资源,可以用多样分化的法门举办缓存。Conditional GET
就是可供选择的一种落成细节,客户端可以向劳动验证他的多少是不是为流行版本;RESTful
端点可以透过它进一步升高速度和可伸缩性。

  2)增添,REST
鼓励每项资源蕴藏处理卓殊请求所需的拥有要求状态。知足这一束缚时,RESTful
服务更便于扩大且可以没有动静。

  3)副作用,使用 GET 请求资源,RESTful
服务应该没有副成效(遗憾的是,与其余部分 REST
约束比较,这一约束更便于被打破)。

  4)幂等,统一接口此外三个常用到的基本点
HTTP 动词是 PUT 和 DELETE。用户代理想要修改资源时最常使用 PUT,DELETE
能够自己描述。要点(也就是“幂等”一词所强调的)是您可以对特殊资源多次用到这多个动词,效果与首次利用相同——至少不会有其它其他影响。打造可信的分
布式系统时(即错误、互联网故障或延缓可能导致很多次举办代码),这一优点可提供有限辅助。

  5)互操作性许,五人将 SOAP
捧为确立客户端-服务器程序最具互操作性的点子。但有些言语和条件至今仍没有
SOAP
工具包。有一部分虽说有工具包,但运用的是旧专业,无法保险与行使更新标准的工具包可信互换。对于半数以上操作,REST
仅须要有 HTTP 库(当然,XML 库寻常也很有协理),它的互操作性肯定强过任何
RCP 技术(包蕴 SOAP)。

  6)简易性与其余优点比较,这一独到之处更主观一些,分裂的人想必有例外的感受。对本人而言,使用
REST 的简易性涉及到代表资源的 URI 和合并接口。作为一名 Web
冲浪高手,我精通在浏览器中输入差别的 URI
可以收获差其余资源(有时也被誉为 URI 或 URL
黑客,但绝无恶意)。由于有多年用到 URI 的阅历,所以为资源陈设 URI
对本人来说百发百中。使用统一接口简化了开销进程,因为自身不要为每个要求树立的劳务创设接口、约定或
API。接口(客户端与自己的服务交互的不二法门)由系统布局约束设置。

 

二、Rest的优点

  1)缓存,使用 HTTP 向 RESTful
端点申请数量时,用到的 HTTP 动词是 GET。对于 GET
请求响应中回到的资源,可以用各类不一样的艺术展开缓存。Conditional GET
就是可供拔取的一种落成细节,客户端可以向服务验证他的数量是不是为新型版本;RESTful
端点可以透过它进一步提升速度和可伸缩性。

  2)伸张,REST
鼓励每项资源蕴藏处理格外请求所需的有所需要状态。满足这一束缚时,RESTful
服务更易于增添且可以没有动静。

  3)副功效,使用 GET 请求资源,RESTful
服务应该没有副作用(遗憾的是,与其他部分 REST
约束相比较,这一束缚更便于被打破)。

  4)幂等,统一接口其它两个常用到的关键
HTTP 动词是 PUT 和 DELETE。用户代理想要修改资源时最常使用 PUT,DELETE
可以自我描述。要点(也就是“幂等”一词所强调的)是你可以对特种资源多次用到那四个动词,效果与首次利用相同——至少不会有其余其余影响。营造可依赖的分
布式系统时(即错误、网络故障或延缓可能造成数次履行代码),这一优点可提供保险。

  5)互操作性许,多个人将 SOAP
捧为确立客户端-服务器程序最具互操作性的措施。但有的语言和环境至今仍尚未
SOAP
工具包。有一对虽说有工具包,但使用的是旧标准,不可以有限接济与使用更新标准的工具包可看重交换。对于一大半操作,REST
仅需要有 HTTP 库(当然,XML 库平常也很有协助),它的互操作性肯定强过任何
RCP 技术(包蕴 SOAP)。

  6)简易性与别的优点相比较,这一独到之处更主观一些,分歧的人或者有例外的感想。对本身而言,使用
REST 的简易性涉及到代表资源的 URI 和归并接口。作为一名 Web
冲浪高手,我清楚在浏览器中输入差其余 URI
可以拿走分化的资源(有时也被誉为 URI 或 URL
黑客,但绝无恶意)。由于有多年使用 URI 的经历,所以为资源安排 URI
对本身来说一箭穿心。使用统一接口简化了付出进程,因为我不要为每个须求树立的劳动创设接口、约定或
API。接口(客户端与本人的劳务交互的点子)由系统布局约束设置。

 

三、WCF如何支撑Rest

      
WCF如何落到实处对于Rest帮忙的吧?弄清那或多或少是读书Rest WCF的重中之重。

       为了落实于对Rest的支撑,在 .NET
Framework 中,WCF 在 System.ServiceModel.Web
组件中新增了编程模型和部分基础架构部件。WCF
Web编程模型多少个根本项目就是:

   1)  WebGetAttribute 和
WebInvokeAttribute:

      
大家清楚,在WCF中,对于艺术的调用是依据SOAP的Action的,每个客户端发送的SOAP音信都必要指定一个Action
的值。这些Action的值和WCF服务的主意对应。每个WCF服务端的操作都有一个一定的Action。通过
OperationContractAttribute.Action 属性设置。

  在Rest
WCF中,基于Action的不二法门调用转变为了基于URI+Http动词的调用。也就是SOAP
Action=URI+Http动词。

  那种映射会由WebHttpDispatchOperationSelector
类型来成功,它会把客户端请求的URI+Http动词,映射到特定的劳务章程上。

  WebGetAttribute 告诉服务方式应该响应
HTTP GET 请求。

  WebInvokeAttribute 默许映射为 HTTP
POST,但可将WebInvokeAttribute.Method 属性设置为协理所有其余 HTTP
动词(PUT 和 DELETE 等)。例如:

     

    

   [WebGet(UriTemplate = "/Books/Get/{BookId}", BodyStyle = WebMessageBodyStyle.Bare)]
          [OperationContract]
          List<Books> GetBook(string BookId);



        [WebInvoke(Method = "POST", UriTemplate = "/Books/Add", BodyStyle = WebMessageBodyStyle.Bare)]
         [OperationContract]
         Result AddBook(Books book);

   2)  UriTemplate 和
UriTemplateTable:

      UriTemplate 一个意味统一资源标识符
(URI) 模板的类。可以定义服务操作的路线和HTTP动词。

  UriTemplateTable一个意味着一组关联
UriTemplate
对象的类。也就是UriTemplate表。

     
从下面的例子代码,大家也能看到哪些使用UriTemplate
定义服务操作的URI和HTTP动词。

 

      3)   WebHttpBinding 和
WebHttpBehavior:

       WebHttpBinding允许开发人士通过
HTTP 请求(那么些请求使用“Plain old XML”(POX) 样式新闻,而不是运用基于
SOAP 的音信)来公开 WCF Web 服务,可以很有利的完毕REST。

       
与其余绑定不一致的是:必须选择WebHttpBehavior对劳务的终结点举办陈设。还须求运用WebGetAttribute或WebInvokeAttribute属性将种种服务操作映射到
URI,同时定义调用和重返结果的新闻格式。

 

   WCF Web 编程模型允许开发人员通过
HTTP 请求(那一个请求使用节能的旧的“Plain old XML”(POX)
样式音讯,而不是SOAP 的音讯)来公开 WCF服务。为了让客户端应用 HTTP
请求与服务拓展通信,必须选用附加了
WebHttpBehavior
WebHttpBinding 对劳务的终结点举办陈设。

   WebHttpBehavior 行为与
WebHttpBinding
绑定一起利用时,援救 WCF 公开和做客 Web
样式服务。WebServiceHost
会自动将此行为丰硕到应用
WebHttpBinding
的终结点。例如:

        

<system.serviceModel>
    <bindings>
       <webHttpBinding>
         <binding name="RestWebBinding">

         </binding>

       </webHttpBinding>

     </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8888/BookService/metadata" />
          <serviceDebug includeExceptionDetailInFaults="True" />

        </behavior>
          <behavior name="RestServiceBehavior">

         </behavior>

      </serviceBehaviors>
       <endpointBehaviors>
         <behavior name="RestWebBehavior">
           <!--这里必须设置-->

           <webHttp />

         </behavior>

       </endpointBehaviors>
    </behaviors>

    <services>   

      <service name="SCF.WcfService.BookRestService" behaviorConfiguration="RestServiceBehavior">
         <endpoint address="http://127.0.0.1:8888/" behaviorConfiguration="RestWebBehavior"
                   binding="webHttpBinding" bindingConfiguration="RestWebBinding" contract="SCF.Contracts.IBookRestService">
         </endpoint>
       </service>
    </services>
  </system.serviceModel>

 

   4)WebServiceHost 和
WebServiceHostFactory:

     
为了辅助Web编程模型,WCF框架提供一个新的宿主类型:WebServiceHost。它是一个
ServiceHost
派生类,它是对WCF Web 编程模型的补偿。如果 WebServiceHost
在服务表达中找不到终结点,则它将在劳务的基址中活动为 HTTP 和 HTTPS
基址创设一个默许终结点。如若用户已在基址中明确计划终结点,则它不会自行创立终结点。WebServiceHost
会自动配置终结点的绑定,以便在安全虚拟目录中应用时与关系的 Internet
音信服务 (IIS) 安全设置一起利用。

  WebServiceHostFactory在可动态创造WebServiceHost
Web宿主实例以响应传入音讯的托管宿主环境中提供
WebServiceHost
的实例的工厂。

     

 

三、WCF怎么样接济Rest

      
WCF怎么着落实对于Rest支持的呢?弄清这或多或少是学习Rest WCF的机要。

       为了落到实处于对Rest的支撑,在 .NET
Framework 中,WCF 在 System.ServiceModel.Web
组件中新增了编程模型和部分基础架构部件。WCF
Web编程模型几个关键项目就是:

   1)  WebGetAttribute 和
WebInvokeAttribute:

      
大家了然,在WCF中,对于艺术的调用是按照SOAP的Action的,每个客户端发送的SOAP音讯都亟待指定一个Action
的值。那么些Action的值和WCF服务的主意对应。每个WCF服务端的操作都有一个一定的Action。通过
OperationContractAttribute.Action 属性设置。

  在Rest
WCF中,基于Action的不二法门调用转变为了基于URI+Http动词的调用。也就是SOAP
Action=URI+Http动词。

  那种映射会由WebHttpDispatchOperationSelector
类型来已毕,它会把客户端请求的URI+Http动词,映射到特定的劳务方式上。

  WebGetAttribute 告诉服务章程应该响应
HTTP GET 请求。

  WebInvokeAttribute 默认映射为 HTTP
POST,但可将WebInvokeAttribute.Method 属性设置为永葆所有其他 HTTP
动词(PUT 和 DELETE 等)。例如:

     

    

   [WebGet(UriTemplate = "/Books/Get/{BookId}", BodyStyle = WebMessageBodyStyle.Bare)]
          [OperationContract]
          List<Books> GetBook(string BookId);



        [WebInvoke(Method = "POST", UriTemplate = "/Books/Add", BodyStyle = WebMessageBodyStyle.Bare)]
         [OperationContract]
         Result AddBook(Books book);

   2)  UriTemplate 和
UriTemplateTable:

      UriTemplate 一个表示统一资源标识符
(URI) 模板的类。可以定义服务操作的门路和HTTP动词。

  UriTemplateTable一个意味着一组关联
UriTemplate
对象的类。也就是UriTemplate表。

     
从上边的事例代码,大家也能收看哪些使用UriTemplate
定义服务操作的URI和HTTP动词。

 

      3)   WebHttpBinding 和
WebHttpBehavior:

       WebHttpBinding允许开发人士通过
HTTP 请求(这个请求使用“Plain old XML”(POX) 样式新闻,而不是利用基于
SOAP 的音信)来公开 WCF Web 服务,可以很方便的落到实处REST。

       
与其他绑定区其他是:必须采取WebHttpBehavior对劳务的终结点进行安顿。还要求选取WebGetAttribute或WebInvokeAttribute属性将相继服务操作映射到
URI,同时定义调用和重返结果的音讯格式。

 

   WCF Web 编程模型允许开发人员通过
HTTP 请求(这几个请求使用节能的旧的“Plain old XML”(POX)
样式新闻,而不是SOAP 的信息)来公开 WCF服务。为了让客户端选取 HTTP
请求与服务开展通讯,必须使用附加了
WebHttpBehavior
WebHttpBinding 对劳务的终结点举行安插。

   WebHttpBehavior 行为与
WebHttpBinding
绑定一起利用时,扶助 WCF 公开和做客 Web
样式服务。WebServiceHost
会自动将此行为充足到利用
WebHttpBinding
的终结点。例如:

        

<system.serviceModel>
    <bindings>
       <webHttpBinding>
         <binding name="RestWebBinding">

         </binding>

       </webHttpBinding>

     </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8888/BookService/metadata" />
          <serviceDebug includeExceptionDetailInFaults="True" />

        </behavior>
          <behavior name="RestServiceBehavior">

         </behavior>

      </serviceBehaviors>
       <endpointBehaviors>
         <behavior name="RestWebBehavior">
           <!--这里必须设置-->

           <webHttp />

         </behavior>

       </endpointBehaviors>
    </behaviors>

    <services>   

      <service name="SCF.WcfService.BookRestService" behaviorConfiguration="RestServiceBehavior">
         <endpoint address="http://127.0.0.1:8888/" behaviorConfiguration="RestWebBehavior"
                   binding="webHttpBinding" bindingConfiguration="RestWebBinding" contract="SCF.Contracts.IBookRestService">
         </endpoint>
       </service>
    </services>
  </system.serviceModel>

 

   4)WebServiceHost 和
WebServiceHostFactory:

     
为了帮衬Web编程模型,WCF框架提供一个新的宿主类型:WebServiceHost。它是一个
ServiceHost
派生类,它是对WCF Web 编程模型的补充。即使 WebServiceHost
在劳务表明中找不到终结点,则它将在劳动的基址中自行为 HTTP 和 HTTPS
基址创立一个默许终结点。如果用户已在基址中有目共睹计划终结点,则它不会自动创设终结点。WebServiceHost
会自动配置终结点的绑定,以便在平安虚拟目录中利用时与涉及的 Internet
音讯服务 (IIS) 安全设置一起使用。

  WebServiceHostFactory在可动态创造WebServiceHost
Web宿主实例以响应传入新闻的托管宿主环境中提供
WebServiceHost
的实例的厂子。

     

 

相关文章