Loading

web API接口及Restful接口规范

【一】web API接口

api接口应该有哪些东西

1.url地址
2.请求方式 如 get post delete post 等等
3.请求参数
	- 地址栏中的参数: http://127.0.0.1:8000/index?name=green&age=18
    - 请求体:编码格式
4.响应结果:json或者xml格式的数据

总结
web后端提供给前端的可以访问且拿到对应数据的url称之为api接口

【二】body的编码格式

  • urlencoded,form-data,json
# 问题1 
	- get请求可以在地址栏携带参数如http://127.0.0.1:8000/index?name=green&age=18,那么能不能在body里面携带参数呢?
# 答
	- 可以携带,也可以将参数提交到后端,但是django没有将它封装到POST里面,需要从request.body里面自己手动取出

# 问题2
	- form-data格式,django是如何取出携带的文件和数据的
# 答
	-文件:request.FILES.get('myfile')
    -数据:request.POST.get('xxx')
    
# 问题3
	- json格式的数据,django该如何取出
# 答
	- 通过request.body取,注意需要自己转格式

【三】RESTful API介绍

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。

【1】规范十条

数据的安全保障

  • 使用相对安全的https协议

url地址中带接口标识

版本

数据即是资源

请求方式,增删改查 crud

  • GET :从服务器取出资源(一项或多项)
  • POST :在服务器新建一个资源
  • PUT :在服务器更新资源(客户端提供改变后的完整资源)
  • PATCH :在服务器更新资源(客户端提供改变的属性)
  • DELETE :从服务器删除资源

过滤

响应中带状态码

-http响应状态码
	-1xx 请求正在处理
    -2xx 正常响应
    -3xx 资源重定向
    -4xx 客户端异常
    -5xx 服务端异常
    
-自定制状态码
	- 自己定义一些状态码,会在接口文档中描述该状态码是什么意思

响应中带信息描述

如
{
    'code':200,
    'message':'请求成功'
}

针对不同操作有不同规范

如
查询一条数据
{
    code:200,
    message:查询成功,
    result:{...}
}
查询多条数据
{
        code:200,
    message:查询成功,
    result:[{...},{...},{...}]
}

返回数据中带链接

  • 有时候返回图片需要返回图片地址链接

【四】序列化和反序列化

  • aip接口开发最核心常见的一个过程就是序列化,所谓序列化就是把数据转换格式
  • 序列化分为两个阶段【序列化和反序列化】
  • 序列化:把自己能识别的对象转变成别人能识别的对象
  • 反序列化:把自己不能识别的对象转换为能识别的对象

【五】CBV源码分析

浏览器输入地址,首先执行的就是views.IndexView.as_view()

可以分析出as_view()是一个绑定给类的方法

点进去发现as_view是一个闭包函数,调用as_view相当于调用view

view里面有这么一行代码self = cls(**initkwargs),这里的cls指的是IndexView

所以self指的就是IndexView类的对象

继续看view 可以发现view返回值是self.dispatch(request, *args, **kwargs)

所以本质就是IndexView类的对象调用了dispatch方法

点进dispath方法查看

    def dispatch(self, request, *args, **kwargs):
        # 可以发现他就是拿到当前的请求方法,将方法小写,然后做一个成员判断
        if request.method.lower() in self.http_method_names:
            # 这里的self就是当前视图类的对象,在这个对象里面去找有没有对应的方法
            # 很显然对于常见的get post请求都是有的
            # 将这个方法赋值给handler
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
            # 最后的fan'hu
        return handler(request, *args, **kwargs)
posted @ 2024-04-21 21:38  HuangQiaoqi  阅读(109)  评论(0编辑  收藏  举报