REST framework

  REST是什么呢?它是一种架构风格,腾讯公司或其他公司建立API时要遵守的一种规则/风格,当然也有其他规则可以用。

  那么何为REST架构风格呢?首先我们来说说Web,因为rest是以web为平台的。我们知道,web是分布式信息系统为超文本文件和其他对象(资源)提供访问入口。

  在web上访问一个资源,需要3点:标识,表示,交互。通过这三个操作,又引出了三个概念:uri(包括url和urn),用来识别资源;representation(例如,图片,html,媒体)用来表示资源;通过协议与资源进行交互。所以,REST就是通过使用HTTP协议和URI,利用client/server对资源进行CRUD操作。

  那么为什么要使用REST设计呢?肯定是有它的优点的。

  1.客户端-服务端分离

   优点:提高用户界面的便携性,通过简化服务器提高可伸缩性….

  2..无状态(Stateless):从客户端的每个请求要包含服务器所需要的所有信息

   优点:提高可见性(可以单独考虑每个请求),提高了可靠性(更容易从局部故障中修复),提高可扩展性(降低了服务器资源使用)

有状态与无状态区别
  3.缓存(Cachable):服务器返回信息必须被标记是否可以缓存,如果缓存,客户端可能会重用之前的信息发送请求

   优点:减少交互次数,减少交互的平均延迟

  4.统一接口

   优点:提高交互的可见性,鼓励单独改善组件

  5.支持按需代码(Code-On-Demand 可选)

  优点:提高可扩展性

  下面来解释一下何为表征状态转移:

  举个例子:例如我订阅了一个人的博客,想要获取他发表的所有文章(这里『他发表的所有文章』就是一个资源Resource)。于是我就向他的服务发出请求,说『我要获取你发表的所有文章,最好是atom格式的』,这时候服务器向你返回了atom格式的文章列表第一页(这里『atom格式的文章列表』就是表征Representation)。

  你看到了第一页的页尾,想要看第二页,这时候有趣的事情就来了。如果服务器记录了应用的状态(stateful),那么你只要向服务询问『我要看下一页』,那么服务器自然就会返回第二页。类似的,如果你当前在第二页,想服务器请求『我要看下一页』,那就会得到第三页。但是REST的服务器恰恰是无状态的(stateless),服务器并没有保持你当前处于第几页,也就无法响应『下一页』这种具有状态性质的请求。因此客户端需要去维护当前应用的状态(application state),也就是『如何获取下一页资源』。当然,『下一页资源』的业务逻辑必然是由服务端来提供。服务器在文章列表的atom表征中加入一个URI超链接(hyper link),指向下一页文章列表对应的资源。客户端就可以使用统一接口(Uniform Interface)的方式,从这个URI中获取到他想要的下一页文章列表资源。上面的『能够进入下一页』就是应用的状态(State)。服务器把『能够进入下一页』这个状态以atom表征形式传输(Transfer)给客户端就是表征状态传输(REpresentational State Transfer)这个概念。

  REST是面向资源进行的,而资源是通过URI进行暴露的。

  URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,操作是通过 HTTP动词来体现,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。

 REST很好利用了HTTP本身就有的一些特征,如HTTP动词,HTTP状态码,HTTP报头等等。

API与用户通信的协议,总是使用HTTPS协议。
域名:https://example.org/api/
版本:URL:https://api.example.com/v1
路径,定位网络上的唯一资源,均使用名词
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
method
GET 从服务器获取资源
POST 在服务器上创建一个资源
PUT 更新服务器上的资源
PATCH 更新服务器资源(如果执行更新某几列,则用這个方法;上面是更新全部列数据)
DELETE 删除某个资源
过滤,通过URL上传参的形式传递搜索条件
https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值