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=[]¶ms=[]
PUT - 根据id数组,批量更新多个资源的属性
当然,目前而言rest风格的api才刚刚开始兴起,在实际的设计场景中,还需要根据场景决定是否使用。其实没有任何一种接口风格是所有开发者都推崇的,但还是建议多实践,根据实际业务场景选择即可。
RESTFul 设计规范的更多相关文章
- restful设计规范
什么是restful? REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类 ...
- 秒杀系统-web
秒杀系统Web层主要涉及前端交互设计.Restful:url满足Restful设计规范.Spring MVC.bootstrap+jquery这四个方面的开发.秒杀系统的前端交互流程设计如下图6-3所 ...
- PHP开发规范1.3.3
PHP 开发规范1.3.3 一.编程规约 (一) 命名风格 [强制]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式. 说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义. ...
- Adnc简介
Adnc是一个轻量级的.Net Core微服务(microservices)快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权,包含基础的后台管理功能,代码简洁.易上手.学习成本 ...
- SpringCloud 微服务最佳开发实践
Maven规范 所有项目必须要有一个统一的parent模块 所有微服务工程都依赖这个parent,parent用于管理依赖版本,maven仓库,jar版本的统一升级维护 在parent下层可以有 co ...
- Restful API设计规范及实战
Restful API的概念在此就不费口舌了,博友们网上查哈定义文章很多,直入正题吧: 首先抛出一个问题:判断id为 用户下,名称为 使命召唤14(COD14) 的产品是否存在(话说我还是很喜欢玩类似 ...
- rest-framework 序列化格式Restful API设计规范
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- Restful API设计规范及实战【说的比较清楚了】
Restful API设计规范及实战 Restful API的概念在此就不费口舌了,博友们网上查哈定义文章很多,直入正题吧: 首先抛出一个问题:判断id为 用户下,名称为 使命召唤14(COD14 ...
- RESTful api 设计规范
该仓库整理了目前比较流行的 RESTful api 设计规范,为了方便讨论规范带来的问题及争议,现把该文档托管于 Github,欢迎大家补充!! Table of Contents RESTful A ...
随机推荐
- 深度使用JSON.stringify()
按照 JSON 的规范,使用 JSON.stringify() 做对象序列化时,如果一个属性为函数,那这个属性就会被忽略. const data1 = { a: 'aaa', fn: function ...
- RocketMQ 源码分析之路由中心(NameServer)
你可能没有看过 RocketMQ 的架构图,没关系,一起来学习一下,RocketMQ 架构图如下: 在 RocketMQ 中,有四个角色: Producer:消息的生产者,每个 MQ 中间件都有. C ...
- Gang Of Four的23中设计模式
Gang Of Four的23中设计模式 标签(空格分隔): 设计模式 1. 根据目的来进行划分 根据目的进行划分可以分为创建型模式, 结构型模式和行为模式三种. 1.1 创建型模式 怎样创建对象, ...
- STM32F103ZET6通用定时器
1.通用定时器简介 通用定时器是由一个可编程预分频器驱动的16位自动装载计数器构成.通用定时器可以应用于多种场合,如测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM).使用通用定时 ...
- servlet web.xml 3.1版本的头信息
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...
- git基础使用合集
1.git初始化仓库-git init git init 创建一个.git目录,跟踪管理版本 2.git 添加-git add git add xxx.xxx 添加到暂缓区里 git add * 添加 ...
- Vulnhub DC-2靶机渗透
信息搜集 nmap扫描端口 nmap -sV 192.168.146.140 -p1-10000 开了80端口,那就直接访问一下把.(7744端口是ssh端口,之后会用到) 输入ip,发现url处变成 ...
- 创建堆(python)
创建最大(小)堆 二叉堆本质上是一种完全二叉树,存储方式并不是链式存储,而是顺序存储 堆操作:插入(叶子节点上调),删除(堆顶元素下沉) 堆创建:非叶子节点下沉(从最后一个非叶子节点开始) 最小堆: ...
- Python Requests-学习笔记(4)-定制请求头和POST
定制请求头 如果你想为请求添加HTTP头部,只要简单地传递一个 dict 给 headers 参数就可以了. import jsonurl = 'https://api.github.com/some ...
- Redis对象——有序集合(ZSet)
有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序 ...