RESTful api
- RESTful api 起源
随着B/S结构的发展,网络应用程序,分为前端和后端两个部分,因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。 什么是RESTful api RESTful和REST区别?
restful: 遵守了rest 原则 的web服务
REST即表现层状态转化(Representational State Transfer)- rest原则:
网络上的所有事物都被抽象为资源
每个资源都有一个唯一的资源标识符
同一个资源具有多种表现形式(xml,json等)
对资源的各种操作不会改变资源标识符
所有的操作都是无状态的 - 资源(Resources)
图片,文本。。。都属于资源。 对于restful API来讲接口就是一个资源,资源本身有个指向,那就是url。然而url就成为了这个资源的唯一标识符 - 表现层(Representational)
来描述资源的一种形式,HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对”表现层”的描述。 - 状态转化(State Transfer)
对资源的各种操作不会改变资源标识符,最基本的操作不过于CDUR(增删改查),然而对于API来讲也是如此:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
所有的操作都是无状态的,如果按照HTTP方法的语义来暴露资源,那么接口将会拥有安全性和幂等性的特性,例如GET和HEAD请求都是安全的, 无论请求多少次,都不会改变服务器状态。而GET、HEAD、PUT和DELETE请求都是幂等的,无论对资源操作多少次, 结果总是一样的,后面的请求并不会产生比第一次更多的影响。无状态服务器是指一种把每个请求作为与之前任何请求都无关的独立的事务的服务器。
- rest原则:
如和设计API
HTTP动词
对于资源的操作肯定会先考虑到资源的设计,因为“资源”表示一种实体,应该是名词,URI不应该有动词,动词应该放在HTTP协议中。
eg: 某个url为/film/create/orders
, create是动词。
GET: 从服务器取出资源
POST: 请求的目标是一个行为处理器(创建资源),
PUT: 用于替换资源(完整资源),
PATCH: 用于更新部分资源(部分属性)
DELETE: 从服务器删除资源
然而用post方法标识create,类似于CURD几种操作可以分别用GET、HEAD、PUT、DELETE和PATCH来实现
/film/orders method :get 获取订单列表
/film/orders/1528536594 method :get 获取1528536594订单详情
/film/orders method :post 创建订单
/film/orders method :put 更新订单
/film/orders method :patch 更新订单
/film/orders method :delete 删除订单
- 怎么理解幂等性
HTTP幂等方法,是指无论调用多少次都不会有不同结果的 HTTP 方法。不管论掉几次,结果都是相同的
HTTP GET方法 幂等方法, 因为多次调用,对应资源本身不产生影响
/film/orders method :get 获取订单列表
HTTP POST方法 非幂等方法,因为调用多次,都将产生新的资源。
/film/orders method :post 创建订单
HTTP PUT方法 幂等方法,因为多次调用它,只会产生一次影响
/film/orders method :put 更新订单
HTTP PATCH方法 非幂等方法,因为,PATCH提供的实体则需要根据程序或其它协议的定义,解析后在服务器上执行,以此来修改服务器上的资源。
HTTP DELETE方法 幂等方法,因为多次调用它,只会产生一次影响
/film/orders method :delete 删除订单
状态码
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功。 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
- 怎么理解幂等性