drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)

摘要:
由于这些语义模糊和不连贯的接口,后期的维护成本将上升。因为restful将资源的操作理解为添加、删除、检查和修改,并建议使用http,所以restful接口本质上局限于web开发。RESTful是一种定义Web API接口的设计风格,特别适用于分离前端和后端的应用程序模式。对于数据资源,POST、DELETE、GET、UPDATE和其他请求动作用于表示数据的添加、删除、查询和修改。

程序的客户端有很多:硬件设备,游戏,APP,软件,其他的外部服务端。

什么是静态页面,什么是动态页面?

动态页面(需要查数据库的)是前端需要发请求给后端,后端朝数据库搜索并返回数据,前端再dom渲染数据

静态页面就是死的,页面内容不会发生变化,固定不变的

1. Web应用模式

在开发Web应用中,有两种应用模式:

1.前后端不分离[客户端看到的内容和所有界面效果都是由服务端提供出来的。

   这种情况下,前端页面中会出现很多涉及到服务端的模板语法。

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第1张

2、前后端分离【把前端的界面效果(html,css,js分离到另一个项目中,python服务端只需要返回数据即可)】

前端形成一个独立的网站,服务端构成一个独立的网站

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第2张

 django,一般都是做web网站,如果可以利用django实现前后端分离,则django就可以完成地铁站的运营调度系统,路由的终端系统,pos机的服务端系统,游戏的服务端后台,软件的服务端后台。

2. api接口

为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。

Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点

  • url:长得像返回数据的url链接

  • 请求方式:get、post、put、patch、delete

    • 采用get方式请求上方接口
  • 请求参数:json或xml格式的key-value类型数据

    • ak:6E823f587c95f0148c19993539b99295
    • region:上海
    • query:肯德基
    • output:json
  • 响应结果:json或xml格式的数据

    • 上方请求参数的output参数值决定了响应数据的格式

    • 数据

# xml格式
https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=xml
#json格式
https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json
{
    "status":0,
      "message":"ok",
    "results":[
        {
            "name":"肯德基(罗餐厅)",
            "location":{
                "lat":31.415354,
                "lng":121.357339
            },
            "address":"月罗路2380号",
            "province":"上海市",
            "city":"上海市",
            "area":"宝山区",
            "street_id":"339ed41ae1d6dc320a5cb37c",
            "telephone":"(021)56761006",
            "detail":1,
            "uid":"339ed41ae1d6dc320a5cb37c"
        }
          ...
        ]
}

目前市面上大部分公司开发人员使用的接口服务架构主要有:restful、rpc,soap。

rpc: 翻译成中文:远程过程调用[远程服务调用].

服务端提供单一的请求数据的api地址:http://api.renran.cn/

post请求

action=get_all_student&class=301&sex=1

优势:

  不需要管当前操作是什么http请求,也不需要操作url地址的编写,对接简单

缺点:

  接口多了,对应函数名和参数就多了,前端在请求api接口时,就会比较难找.容易出现重复的接口

restful: 翻译成中文: 资源状态转换.

把后端所有的数据/文件都看成资源.

那么接口请求数据,本质上来说就是对资源的操作了.

web项目中操作资源,无非就是增删查改.所以要求在地址栏中声明要操作的资源是什么,然后通过http请求动词来说明对资源进行哪一种操作.

POST http://www.renran.cn/api/students/ 添加学生数据

GET http://www.renran.cn/api/students/ 获取所有学生

DELETE http://www.renran.cn/api/students/<pk>/ 删除id=pk的一个学生

PUT http://www.renran.cn/api/students/<pk>/ 修改一个学生的全部信息 [id,name,sex,age,]

PATCH http://www.renran.cn/api/students/<pk>/ 修改一个学生的部分信息[age]

优点:

  1. 维护开发简单,可以保证后期的开发不会出现太多重复接口

缺点:

  1. 有部分接口不会有明确的增删查改这种区分的,所以会出现一些不伦不类的接口。会因为这些语义不明,不伦不类的接口导致后期的维护成本上升。

  2. 因为restful把对于资源的操作都理解成了增删查改,建议使用http,所以restful接口天生局限于web开发。

3. RESTful API规范

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第3张

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中。

RESTful是一种定义Web API接口的设计风格,尤其适用于前后端分离的应用模式中。

这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。

而对于数据资源分别使用POST、DELETE、GET、UPDATE等请求动作来表达对数据的增删查改。

请求方法请求地址后端操作
GET/students获取所有学生
POST/students增加学生
GET/students/<pk>获取主键为pk的学生
PUT/students/<pk>修改主键为pk的学生
DELETE/students/<pk>删除主键为pk的学生

事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。

参考文档:http://www.runoob.com/w3cnote/restful-architecture.html

# 抓包工具:fiddler,charles

3.1 数据的安全保障

  • url链接一般都采用https协议进行传输

    注:采用https协议,可以提高数据交互过程中的安全性

3.2 接口特征表现

3.3 多数据版本共存

3.4 数据即是资源,均使用名词(可复数)

3.5 资源操作由请求方式决定(method)

3.6 过滤,通过在url上传参的形式传递搜索条件

3.7 响应状态码

3.7.1 正常响应

  • 响应状态码2xx

    • 200:常规请求

    • 201:创建成功

3.7.2 重定向响应

  • 响应状态码3xx

    • 301:永久重定向

    • 302:暂时重定向

3.7.3 客户端异常

  • 响应状态码4xx

    • 403:请求无权限

    • 404:请求路径不存在

    • 405:请求方法不存在

3.7.4 服务器异常

  • 响应状态码5xx

    • 500:服务器异常

3.8 错误处理,应返回错误信息,error当做key

{
    error: "无权限操作"
}

3.9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档

3.10 需要url请求的资源需要访问资源的请求链接

# Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
{
      "status": 0,
      "msg": "ok",
      "results":[
        {
            "name":"肯德基(罗餐厅)",
            "img": "https://image.baidu.com/kfc/001.png"
        }
          ...
        ]
}

比较好的接口返回

# 响应数据要有状态码、状态信息以及数据本身
{
      "status": 0,
      "msg": "ok",
      "results":[
        {
            "name":"肯德基(罗餐厅)",
            "location":{
                "lat":31.415354,
                "lng":121.357339
            },
            "address":"月罗路2380号",
            "province":"上海市",
            "city":"上海市",
            "area":"宝山区",
            "street_id":"339ed41ae1d6dc320a5cb37c",
            "telephone":"(021)56761006",
            "detail":1,
            "uid":"339ed41ae1d6dc320a5cb37c"
        }
          ...
        ]
}

幂等性

接口实施过程中,会存在幂等性。所谓幂等性是指代客户端发起多次请求是否对于服务端里面的资源产生不同结果。如果多次请求,服务端结果还是一样,则属于幂等接口,如果多次请求,服务端产生结果是不一样的,则属于非幂等接口。在http请求,get/put/patch/delete都属于幂等性接口,post属于非幂等接口。

为什么要考虑幂等性?主要就是接口操作的安全性问题。

delete /api/students/1

get /api/students/

post /api/students/

4. 序列化

api接口开发,最核心最常见的一个过程就是序列化,所谓序列化就是把数据转换格式,序列化可以分两个阶段:

序列化: 把我们识别的数据转换成指定的格式提供给别人。

例如:我们在django中获取到的数据默认是模型对象,但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据进行序列化,变成字符串或者json数据,提供给前端或者其他平台。

 

反序列化:把别人提供的数据转换/还原成我们需要的格式。

例如:前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。

5.接口测试工具:Postman

Postman是一款接口调试工具,是一款免费的可视化软件,同时支持各种操作系统平台,是测试接口的首选工具。

Postman可以直接从官网:https://www.getpostman.com/downloads/下载获得,然后进行傻瓜式安装。

工作面板:

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第4张

简易的get请求

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第5张

 简易的post请求

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第6张

 案例:请求百度地图接口

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第7张

 drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第8张

 创建api接口测试文件夹collections

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第9张

 操作

drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第10张

 导入:
drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)第11张

 

免责声明:文章转载自《drf 准备知识(Web应用模式、 api接口、RESTful API规范和序列化)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux 树莓派 debian ffmpeg alsa v4l2 录制音频 视频 cannot open audio device 无法播放 声音模糊 画面卡顿 ALSA buffer xrun Thread message queue blocking -pix_fmt【开发工具】Pycharm使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RobotFramework下的http接口自动化Set Request Header 关键字的使用

Set Request Header 关键字用来设置http请求时的请求头部信息。 该关键字接收两个参数,[ header_name | header_value ] 示例1:设置http请求时的Referer(Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基...

【Vue后台管理三】集成echarts图表

集成echarts图标 路一步步走,代码得一个个敲,今天自己来集成了echarts图标,为什么要集成echarts了? 图表表示数据,应该是最清晰直白了,所以很多管理页面的首页都集成了。 首先看看效果 下面应该还有一个关于每月销量收入的图表,明天在加上。 站在巨人的肩膀上 我个人没真实做过后台管理项目,所以了这些后台的样子,是参考我公司后台管理样式和一些...

SpringBoot整合Mybatis-Plus报错org.apache.ibatis.binding.BindingException

SpringBoot整合Mybatis-Plus报错org.apache.ibatis.binding.BindingException Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql;你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的实现类后,却无法正常使用。这里的可能发生的情...

java 基本理论知识点

http://www.cnblogs.com/hellokitty1/p/4491808.html 1、main方法是怎么写的        public static void main(String [] args){}//最习惯的      public static void main(String  args[]){}      static p...

实现 API 调用接口

实现 API 调用接口 API 简介 API 的概念 API(Application Programming Interface) 应用程序编程接口是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一次例程的能力,而又无需访问源码或理解内部工作机制的细节。 API 的特点 一个明确定义的接口,可以为其他软件提供特定服务。 可以小到...

CocoaPods安装和使用201712

CocoaPods安装使用详解 2017.12 首先,很有必要了解一下CocoaPods、Ruby和RubyGems,以及它们之间的关系。 CocoaPods是第三方库的辅助管理工具,依赖于Ruby。 Ruby是一种简捷的面向对象脚本语言。 RubyGems相当于Ruby的一个管理工具。 以下几个官网有必要看看, https://cocoapod...