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才刚刚开始兴起,在实际的设计场景中,还需要根据场景决定是否使用。其实没有任何一种接口风格是所有开发者都推崇的,但还是建议多实践,根据实际业务场景选择即可。

RESTFul 设计规范的更多相关文章

  1. restful设计规范

    什么是restful? REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类 ...

  2. 秒杀系统-web

    秒杀系统Web层主要涉及前端交互设计.Restful:url满足Restful设计规范.Spring MVC.bootstrap+jquery这四个方面的开发.秒杀系统的前端交互流程设计如下图6-3所 ...

  3. PHP开发规范1.3.3

    PHP 开发规范1.3.3 一.编程规约 (一) 命名风格 [强制]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式. 说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义. ...

  4. Adnc简介

    Adnc是一个轻量级的.Net Core微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权,包含基础的后台管理功能,代码简洁.易上手.学习成本 ...

  5. SpringCloud 微服务最佳开发实践

    Maven规范 所有项目必须要有一个统一的parent模块 所有微服务工程都依赖这个parent,parent用于管理依赖版本,maven仓库,jar版本的统一升级维护 在parent下层可以有 co ...

  6. Restful API设计规范及实战

    Restful API的概念在此就不费口舌了,博友们网上查哈定义文章很多,直入正题吧: 首先抛出一个问题:判断id为 用户下,名称为 使命召唤14(COD14) 的产品是否存在(话说我还是很喜欢玩类似 ...

  7. rest-framework 序列化格式Restful API设计规范

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  8. Restful API设计规范及实战【说的比较清楚了】

    Restful API设计规范及实战   Restful API的概念在此就不费口舌了,博友们网上查哈定义文章很多,直入正题吧: 首先抛出一个问题:判断id为 用户下,名称为 使命召唤14(COD14 ...

  9. RESTful api 设计规范

    该仓库整理了目前比较流行的 RESTful api 设计规范,为了方便讨论规范带来的问题及争议,现把该文档托管于 Github,欢迎大家补充!! Table of Contents RESTful A ...

随机推荐

  1. LeetCode#1047-Remove All Adjacent Duplicates In String-删除字符串中的所有相邻重复项

    一.题目 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们. 在 S 上反复执行重复项删除操作,直到无法继续删除. 在完成所有重复项删除操作后返回最终的字符串.答案 ...

  2. [codevs1036]商务旅行<LCA:tarjan&倍增>

    题目链接:http://codevs.cn/problem/1036/ 今天翻箱倒柜的把这题翻出来做了,以前做的时候没怎么理解,所以今天来重做一下 这题是一个LCA裸题,基本上就把另一道裸题小机房的树 ...

  3. Spring如何解决循环依赖,你真的懂了?

    导读 前几天发表的文章SpringBoot多数据源动态切换和SpringBoot整合多数据源的巨坑中,提到了一个坑就是动态数据源添加@Primary接口就会造成循环依赖异常,如下图: 这个就是典型的构 ...

  4. list容器排除重复单词的程序

    #include<iostream> #include<fstream> #include<string> #include<algorithm> #i ...

  5. 2019NYIST计科第七次周赛总结

    2019NYIST计科第七次周赛总结 文章目录 2019NYIST计科第七次周赛总结 [秤取物体重量( 二进制枚举法)](https://blog.csdn.net/qq_34261446/artic ...

  6. 并发——抽象队列同步器AQS的实现原理

    一.前言   这段时间在研究Java并发相关的内容,一段时间下来算是小有收获了.ReentrantLock是Java并发中的重要部分,所以也是我的首要研究对象,在学习它的过程中,我发现它是基于抽象队列 ...

  7. 《Three.js 入门指南》3.1.1 - 基本几何形状 -多面体

    3.1 基本几何形状 多面体 构造函数 正四面体(TetrahedronGeometry).正八面体(OctahedronGeometry).正二十面体(IcosahedronGeometry)的构造 ...

  8. 家庭版记账本app进度之关于android界面布局的相关学习

    1.线性布局(linearlayout)是一种让视图水平或垂直线性排列的布局线性布局使用<LinearLayout>标签进行配置对应代码中的类是android.widget.LinearL ...

  9. Flask 入门(九)

    外键数据库 我们想想,所有的数据不可能这么简单,万一建的数据库有了外键呢?如何增加,如何查询? 承接上文: 先登录mysql数据库,把里面的表和数据都删了 执行语句: use data select ...

  10. 【网络编程01】socket的基础知识-简单网络通信程序

    1.什么是socket socket(套接字),简单来说是IP地址与端口(port)的组合,可以与远程主机的应用程序进行通信.通过IP地址可以确定一台主机,而通过端口则可以确定某一个应用程序.IP+端 ...