zoukankan      html  css  js  c++  java
  • 怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现

    一、REST

    含状态传输(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。

    眼下在三种主流的Web服务实现方案中。由于REST模式与复杂的SOAPXML-RPC相比更加简洁。越来越多的web服务開始採用REST风格设计和实现。

    比如:Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

    二、REST的架构设计

      RESTRepresentational State Transfer)是一种轻量级的Web Service架构风格,事实上现和操作明显比SOAPXML-RPC更为简洁,能够全然通过HTTP协议实现,还能够利用缓存Cache来提高响应速度。性能、效率和易用性上都优于SOAP协议。

      REST架构遵循了CRUD原则,CRUD原则对于资源仅仅须要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就能够完毕对其操作和处理。这四个操作是一种原子操作。即一种无法再分的操作。通过它们能够构造复杂的操作过程,正如数学上四则运算是数字的最主要的运算一样。

      REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包含获取、创建、改动和删除资源的操作正好相应HTTP协议提供的GETPOSTPUTDELETE方法,因此RESTHTTP对一个URL资源的操作限制在GETPOSTPUTDELETE这四个之内。

    这样的针对网络应用的设计和开发方式。能够减少开发的复杂性。提高系统的可伸缩性。

    三、REST的设计准则

      REST架构是针对Web应用而设计的,其目的是为了减少开发的复杂性,提高系统的可伸缩性。REST提出了例如以下设计准则:

    l 网络上的全部事物都被抽象为资源(resource

    l 每一个资源相应一个唯一的资源标识符(resource identifier

    l 通过通用的连接器接口(generic connector interface)对资源进行操作

    l 对资源的各种操作不会改变资源标识符

    l 全部的操作都是无状态的(stateless

    四、要点及标准

    须要注意的是。REST是设计风格而不是标准。

    REST通常基于使用HTTPURI,和XML以及HTML这些现有的广泛流行的协议和标准。

    l 资源是由URI来指定。

    l 对资源的操作包含获取、创建、改动和删除资源,这些操作正好相应HTTP协议提供的GETPOSTPUTDELETE方法。

    l 通过操作资源的表现形式来操作资源。

    l 资源的表现形式则是XML或者HTML。取决于读者是机器还是人。是消费web服务的客户软件还是web浏览器。

    当然也能够是不论什么其它的格式。

    五、REST的要求

    l client和server结构

    l 连接协议具有无状态性

    l 可以利用Cache机制增进性能

    l 层次化的系统

    l 随需代码 - Javascript (可选)

    六、关于状态

    应该注意差别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每一个连接的信息),而REST传输会包括应用的全部状态信息,因此能够大幅减少对HTTP连接的反复请求资源消耗。

    七、含状态传输的 Web 服务

    含状态传输的 Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。

    它从下面三个方面资源进行定义:

    l 直观简短的资源地址:URI,比方:http://example.com/resources/

    l 传输的资源:Web服务接受与返回的互联网媒体类型,比方:JSONXML YAML 等。

    l 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比方:POSTGETPUTDELETE)。

    下表列出了在实现 含状态传输的 Web 服务时HTTP请求方法的典型用途。

    HTTP 请求方法在RESTful Web 服务中的典型应用

    资源

    GET

    PUT

    POST

    DELETE

    一组资源的URI。比方http://example.com/resources/

    列出 URI,以及该资源组中每一个资源的具体信息(后者可选)。

    使用给定的一组资源替换当前整组资源。

    在本组资源中创建/追加一个新的资源。

     该操作往往返回新资源的URL

    删除 整组资源。

    单个资源的URI,比方http://example.com/resources/142

    获取 指定的资源的具体信息。格式能够自选一个合适的网络媒体类型(比方:XMLJSON等)

    替换/创建 指定的资源。

    并将其追加到对应的资源组中。

    把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。

    删除 指定的元素。

    PUT 和 DELETE 方法是幂等方法GET方法是安全方法 (不会对server端有改动,因此當然也是幂等的)。

    不像基于SOAPWeb服务。RESTful Web服务并没有的“正式”标准[2]。 这是由于REST是一种架构。而SOAP仅仅是一个协议。

    尽管REST不是一个标准,但在实现RESTful Web服务时能够使用其它各种标准(比方HTTPURLXMLPNG等)。

    八、实现举例

    比如。一个简单的网络商店应用,

    列举全部商品,

    GET http://www.store.com/products

    呈現某一件商品,

    GET http://www.store.com/product/12345

    下单购买,

    POST http://www.store.com/order

    <purchase-order>

      <item> ... </item>

    </purchase-order>

    九、REST的长处

    l 可更高效利用缓存来提高响应速度

    l 通讯本身的无状态性能够让不同的server的处理一系列请求中的不同请求,提高server的扩展性

    l 浏览器就可以作为client,简化软件需求

    l 相对于其它叠加在HTTP协议之上的机制,REST的软件依赖性更小

    l 不须要额外的资源发现机制

    l 在软件技术演进中的长期的兼容性更好

    十、个人总结

    l REST架构仅仅是一种思想,并没有限定不论什么技术,不论什么语言。

    l REST的本质就是HTTP调用,用于减少各个应用之间的耦合度。

    l 良好的REST 架构。应该有统一的表示方式和数据格式,可以有效的把各种资源组织起来,并可以进行有效的控制。


  • 相关阅读:
    leetcode701. Insert into a Binary Search Tree
    leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes
    leetcode 110. Balanced Binary Tree
    leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree
    二叉树
    leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)
    5. Longest Palindromic Substring
    128. Longest Consecutive Sequence
    Mac OS下Android Studio的Java not found问题,androidfound
    安卓 AsyncHttpClient
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5246844.html
Copyright © 2011-2022 走看看