WCF学习之一起—实现REST服务(二十二)WCF学习之同—实现REST服务(二十二)

 一、什么是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 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 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的优点

  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
的实例的工厂。

     

 

相关文章