• RESTFul 设计规范


    REST这个词,是Roy Thomas Fielding博士在他2000年提出的,有兴趣的可以阅读一下他的论文, 论文地址为:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm。

    目前主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC相对比,更加简洁,越来越多的Web服务开始采用REST风格设计和实现。例如Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的,简单来说就是复用HTTP协议定义好的一组动词。

    RESTful的优点:

    • 不需要解释即明白某个接口设计的意图

    • 接口和资源一一对应,方便写代码

    • 方便做权限控制

    • 为前端提供足够的灵活性

    • 在API升级过程中URL的改动较少,减少版本管理的工作量

    基本信息

    Representational State Transfer,表现层状态转移,如果一个架构符合REST原则,就称之为RESTful架构。

    资源(Resource),网络上的一个实体,或者说是网络上的一个具体信息,URI就成了每一个资源的地址或独一无二的识别符。

    表现层(Representation),"资源"是一种信息实体,它可以有多种外在表现形式,"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。

    状态转化(State Transfer),和服务器互动,势必涉及到数据和状态的变化,互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端,客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

    几个需知点:

    1. REST是一种架构风格的指导规范,而不是技术实现

    2. 网站即软件,网站即服务

    2.REST中信息的抽象即资源

    3. 交互的对象——资源集合[名词]

    4. http verbs—>URIs—>entities

    5. URL中不存在动词,把动作省略,作为一种服务

    6. 无状态

    7. http 四个动词,GET获取,POST新建,PUT更新(全部),DELETE删除,PATCH更新(部分)

    • GET(SELECT):从服务器取出资源(一项或多项)。

    • POST(CREATE):在服务器新建一个资源。

    • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

    • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

    • DELETE(DELETE):从服务器删除资源。

    • HEAD:获取资源的元数据。

    • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

    8. 数据格式JSON(推荐)

    9. 安全性(修改数据的操作被认为是不安全的) 与 幂等性(GET, PUT,HEAD,DELETE),幂等性是指对同一资源的任意多次请求,语义相同

    简单实践

    根据id删除、修改、查询单个资源

    eg:xxx/order/1 ( order即指那个单独的资源 )

    • GET - 返回id是1的order

    • DELETE - 删除id是1的order

    • PUT - 更新id是1的order,order的值从请求的内容体中获取

    获取复数资源信息

    eg: xxx/orders

    • GET - 返回所有orders

    查询复数资源

    eg:xxx/orders?name=123

    • GET - 返回所有满足查询条件的order资源

    创建多个资源

    eg:xxx/orders

    • POST - 将返回所有创建成功的orders的id数组

    删除多个资源

    eg:xxx/orders?id=[]

    • DELETE - 根据条件,批量删除多个资源

    修改多个资源

    eg:xxx/orders?id=[]&params=[]

    • PUT - 根据id数组,批量更新多个资源的属性

    当然,目前而言rest风格的api才刚刚开始兴起,在实际的设计场景中,还需要根据场景决定是否使用。其实没有任何一种接口风格是所有开发者都推崇的,但还是建议多实践,根据实际业务场景选择即可。

  • 相关阅读:
    python 约束与异常处理
    ActiveMQ
    SpringMVC项目,启动项目怎么总是报找不到log4j.properties文件
    java 字符串处理
    java面向对象学习笔记
    JSONArray遍历
    get/post方式调用http接口
    IO流认识
    Apache Mina 入门实例
    “wsimport -keep ”生成客户端报错“Use of SOAP Encoding is not supported.”
  • 原文地址:https://www.cnblogs.com/cuiyubo/p/7862974.html
Copyright © 2020-2023  润新知