一、什么是REST

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

      
基于REST的劳务与基于SOAP的劳务相相比,性能、效能和易用性上都更高,而SOAP协议非凡的扑朔迷离和不透明。REST受到越来越多的Web服务供应商欢迎。目前大部分供应商,如Taobao、腾讯、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的优点

  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。

XML,       
与此外绑定不同的是:必须采取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框架提供一个新的宿主类型:Web瑟维斯(Service)Host。它是一个
ServiceHost
派生类,它是对WCF Web 编程模型的补偿。假使 WebServiceHost
在服务表明中找不到终结点,则它将在劳务的基址中机动为 HTTP 和 HTTPS
基址创设一个默认终结点。尽管用户已在基址中明确部署终结点,则它不会自行创造终结点。WebServiceHost
会自动配置终结点的绑定,以便在伊春虚拟目录中接纳时与关系的 Internet
音讯服务 (IIS) 安全设置一起利用。

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

     

 

相关文章

网站地图xml地图