manbetx官方网站

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

十月 8th, 2018  |  足球投注manbetx

 一、什么是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
的实例的工厂。

     

 

标签:,

Your Comments

近期评论

    功能


    网站地图xml地图