理解RESTful API

 

1 rest

实际上 rest只是一种软件风格 它包含了很多原则与限制 如果一个结构符合rest的原则 就可以称它为restful架构,

1.1资源

在rest中最重要的一个概念就是资源,“资源”是一种信息实体,他可以有多种外在的表现形式,比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化,在HTTP协议里面,就可以使用HTTP动词来对服务器端资源进行操作,实现“表现层状态转化”。如:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

 

 

 

二、RESTful API

RESTful API 就是REST风格的API。它使用URI来描述资源,使用HtmlJsonXML等格式表现,通过HTTP动词来操作资源来实现状态转化,使用HTTP状态码反映处理结果

2.1 URIj

URI通常由三部分组成:

  1. 访问资源的命名机制;
  2. 存放资源的主机名;
  3. 资源自身的名称。

例如:https://localhost/post/1 (对应URLhttps://localhost/post/1.html)

我们可以这样解释它:

  1. 这是一个可以通过https协议访问的资源,
  2. 位于主机 localhost上,
  3. 通过“post/1”可以对该资源进行唯一标识(注意,这个不一定是完整的路径)

注意:以上三点只不过是对实例的解释,以上三点并不是URI的必要条件,URI只是一种概念,怎样实现无所谓,只要它唯一标识一个资源就可以了。URI只代表资源的实体,不代表它的形式。严格地说,如上面网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。

2.2 HTTP动词

常用的HTTP动词有下面这些

  • GET:从服务器取出资源(一项或多项)。——幂等
  • POST:在服务器新建一个资源。——非幂等
  • PUT:在服务器更新资源(客户端提供改变后的完整资源)。——幂等
  • PATCH:在服务器更新资源(客户端提供改变的属性)。——幂等
  • DELETE:从服务器删除资源。——幂等
  • HEAD:获取资源的元数据。
  • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

 

 

Restful接口规范

"""

1>一般都采用安全协议(接口都是操作数据的):https

 

2>提现接口的关键字:api

   https://api.oldboy.com

  

3>接口操作的数据称之为资源:采用资源名称的复数

   https://api.oldboy.com/books

  

4>接口链接中不出现操作资源的动词,通过请求方式来决定操作资源的动作

   https://api.oldboy.com/books/

   get:获取所以

   post:增加一个

   https://api.oldboy.com/books/(?P<pk>)/

   get:获取一个

   put:整体修改一个(patch局部修改一个)

   delete:删除一个

  

5>资源数据有多版本时,接口可以做版本控制,为什么有两种版本(需求请求不同,接口有不同的版本响应)

   https://api.oldboy.com/books/v1/

   https://api.oldboy.com/v2/books/

   丢在资源之前之后都可以

  

6>资源响应的限制条件:筛选、排序、限制...

   https://api.oldboy.com/books/?publish=1&ordering=-price&limit=3

  

7>响应状态码

   网络状态码:2xx | 3xx | 4xx | 5xx

   数据状态码(约定的):0 | 1 | 2

   {

      'status': 1,

   }

   -- SUCCESS(0, "查询成功")

   -- NODATA(1, "非正确,无数据,显示基本信息")

   -- FEAILED(2, "查询失败")

  

8>响应结果的信息描述:

   {

      'status': 1,

      'msg': 'login failed'

   }

 

9>响应的结果:get所有:所有资源 | get一个:一个资源 | post、put、patch:新增、修改的资源 | delete:不做任何返回

   {

      'status': 0,

      'msg': 'ok',

      'results': [登录的用户对象序列化结果]

   }

  

10>响应结果中有二次资源(用户头像:图片链接,用户详情:详情接口)

   要表明请求二次资源的接口

drf框架介绍

在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程是相似的,在开发REST API的视图中,虽然每个试图操作的数据不同,但增删改查的实现基本套路化,所以这部分代码也是可以复用简化编写:

增:校验请求数据   执行反序列化过程  将保存的对象序列化并保存

删:判断要删除的数据是否存在   执行数据库删除

改:判断要修改的数据是否存在   校验请求数据  执行反序列化过程  保存数据  将保存的对象序列化并保存

查:查询数据库   将数据序列化并返回

Dajngo REST framework可以帮助我们简化上述两部分的代码编写 大大提高rest api的开发速度

Django rest framework框架是用于构建web api的强大而有灵活的工具

通常简称DRF框架  或 REST framework

特点
提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
提供了丰富的类视图、Mixin扩展类,简化视图的编写;
丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
多种身份认证和权限认证方式的支持;
内置了限流系统;
直观的 API web 界面;
可扩展性,插件丰富

drf框架

导入

  • http协议

http协议是基于应用层的协议

在发出请求时,需要具备请求首行,请求头,请求体

特点:无状态无连接,且都是客户端先发起请求,服务端再进行响应

  • wsgi协议

主要就是规定了数据的解析方式,把get之类的http请求解析封装到request里面

在视图函数返回的时候,再把数据打包成http协议需要的格式传到前台

什么是接口

根据客户端传回的需求,进行路由匹配,调用相应的接口,然后接口执行完成的的数据,按照需要的格式进行返回。

  • 接口具有特定的url链接
  • 相应的请求方式:get、post、put、patch、delete
  • 前台请求的参数
  • 最后响应的结果

restful接口规范

  1. 一般采用安全协议,因为接口都是对数据进行操作
  2. 在url中要体现接口的关键字api,如:

http://api.baidu.comhttp://www.baidu.com/api

  1. 接口操作的数据称之为资源,前台请求数据的时候要采用资源的复数形式

http://api.baidu.com/books/http://www.baidu.com/api/books

  1. 接口的链接中不能出现操作资源的方式,一般通过请求方式来决定操作资源的方式

五大接口:

  1. get:获取所有
    1. get:获取一个
    2. post:增加一个
    3. put | patch:修改整体 | 修改部分
    4. delete:删除一个
    5. 当资源数据有多个版本时,接口要做到版本控制

http://api.baidu.com/books/v1/

  1. 资源响应的限制条件:筛选、排序……

http://api.baidu.com/books/?publish=1&ordering=-price&limit=3

  1. 数据相应的状态码,类似于网络状态码,约定俗成为0,1,2

{‘status’: 0 | 1 | 2}

-- SUCCESS(0, "查询成功")
-- NODATA(1, "非正确,无数据,显示基本信息")
-- FEAILED(2, "查询失败")

  1. 响应的结果需要有信息描述

{'status': 0, 'msg': 'success'}

  1. 响应的结果
    1. get所有:返回所有的资源
    2. get一个:返回一个资源
    3. post增加一个:返回增加的资源
    4. put | patch修改:返回修改的资源
    5. delete:不做任何返回

 

posted on 2021-09-22 20:26  Promise-JQ  阅读(110)  评论(0编辑  收藏  举报