基于REST的服务与基于SOAP的劳务相相比较,基于REST的劳务与基于SOAP的劳动相比

 一、什么是REST

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

      
基于REST的劳动与基于SOAP的劳动对比,性能、功能和易用性上都更高,而SOAP协议卓殊的复杂性和不透明。REST受到愈来愈多的Web服务供应商欢迎。近期多数供应商,如Tmall、腾讯、google、Amazon等都提供REST风格的劳务。

 REST的首要条件是:

 1.网络上的持有东西都可被架空为资源;

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

 3.使用标准方法操作资源;

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

 5.通过缓存来提升性能。

       
REST (Representation State Transfer) 描
述了一个架构样式的网络种类,比如Web应用程序。它第一次出现在2000年 Roy Field(Field)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

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

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

 REST的机要标准是:

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

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

 3.使用专业方法操作资源;

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

 5.通过缓存来增进性能。

       
REST (Representation State Transfer) 描
述了一个架构样式的网络序列,比如Web应用程序。它第一次出现在2000年 Roy 菲尔德(Field)(Field)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.瑟维斯(Service)(Service)Model.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) 安全设置一起利用。

  Web瑟维斯(Service)HostFactory在可动态成立WebServiceHost
Web宿主实例以响应传入音讯的托管宿主环境中提供
WebServiceHost
的实例的工厂。

     

 

三、WCF咋样援救Rest

      
WCF怎样兑现对于Rest协助的啊?弄清那或多或少是学习Rest WCF的关键。

       为了兑现于对Rest的支撑,在 .NET
Framework 中,WCF 在 System.Service(Service)Model.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框架提供一个新的宿主类型:WebService(Service)Host。它是一个
ServiceHost
派生类,它是对WCF Web 编程模型的补充。借使 WebServiceHost
在劳务表明中找不到终结点,则它将在服务的基址中自动为 HTTP 和 HTTPS
基址创造一个默许终结点。纵然用户已在基址中明显安顿终结点,则它不会自行成立终结点。WebServiceHost
会自动配置终结点的绑定,以便在平安虚拟目录中使用时与涉及的 Internet
信息服务 (IIS) 安全设置一起使用。

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

     

 

相关文章