爱博体育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
的实例的厂。

     

 

相关文章