zoukankan      html  css  js  c++  java
  • CHENGDU3-Restful API 接口规范、django-rest-framework框架

    Restful API 接口规范、django-rest-framework框架

    问题:什么是API?

    答:API是接口,提供url.
    接口有两个用途:
    为别人提供服务,前后端分离。

    为什么使用前后端分离?

    答:主要为了数据的解耦,提高开发效率。
    如果更新了数据,web页面需要更改,而且网站的前端页面变动很大,后端也可能更改,会非常麻烦。
    使用前端框架VUE.js,能快速搭建前端项目,不需要依赖后端。
    后端只需做序列化,返回json数据即可,并不涉及更多操作。

    Restful API规范?

    答:之前我们是没有用rest api规范的,都是通过django的url自己来做的,后来我们选择用了rest api。
    (1):API与用户的通信协议,使用的是http协议
    (2):域名尽量部署在专有域名之下,若API很简单,不会进一步扩展,可以考虑放在主域名下。
    (3):应将api的版本号放入url,还可以将版本号放入Http请求头信息中,但不如放在url中方便。
    也可以放在子域名上(放在子域名上会存在跨域的问题,)
    (4):在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,
    而且所用的名词往往与数据库的表格名对应。一般来说,
    数据库中的表都是同种记录的"集合",所以API中的名词也应该使用复数。
    (5):如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
    (6)根据请求方式的不同,来区分不同的行为。post----get----put----patch----delete。
    (7):服务器向用户返回的状态码和提示信息。
    (8):返回json数据。

    常用的请求方式有那些?

    答:Get :获取数据,Post:创建数据,Patch:部分修改
    Put :全部修改,DELETE:删除数据,
    Options:如果有跨域,会先发一个option请求,先做预检,完了在执行自己发的请求

    常见的状态码有那些?

    答:200:响应成功,302:重定向,403:Forbidden
    404:找不到页面,500:服务端代码有误

    谈谈你对restful framework的认识?

    答:我们一开始是没有用restful framework,
    用django写一些装饰器或中间件也能实现。
    但是它为我们事先提供了一部分接口,
    常用的有:获取版本,认证,权限,分流 ,
    我们只需要按照restful的规范,只需要写几个类就好了,或者在配置文件里面配置一下就可以使用。
    尤其是在用户访问频率限制的时候,restful里面都已经封装好了,我们直接调用它的方法就行了。
    我们写的时候是基于CBV模式写的,这个和django中的CBV是一样的, 请求先进来会走dispatch方法,根据请求方法不同反射执行不同的方法。 我们写的类是继承APIView的View,去执行它的dispatch先找自己的,自己没有就找父类的。
    restful framework执行流程? restful framework请求进来到达路由.as_view(),在as_view里面return了一个view函数,请求进来先执行一个view函数。 as_views调用了dispath方法根据请求方式的不同,触发不同的方法。 initialize_request这个方法接收客户端的request请求,再重新封装成新的request。请求一些相关的东西放到request中 然后进行初始化,获取版本,认证调用request.user方法,检查权限,检查限制访问。 执行对应视图函数。 对返回结果再次进行加工。重要的功能在APIviews的dispath中实现。

    Django Rest Framework 的的请求生命周期

    TTP请求 —> wsgi —> 中间件 —> 路由分发 —> 执行对应类的dispatch方法 —> 视图函数 —>返回 
    采用CBV的请求方式。

    经过“中间件”时,依次执行中间件内部的 process_request--->process_view--->process_template_response
    ---->process_exception---->process_response

    restful framework中包括那些?

    答:有版本,认证,权限,访问频率的限制,路由系统,视图,渲染器,序列化,分页,解析器。

    认证?

    答:执行认证功能,确认进行后续操作的用户是被允许的,perform_authentication方法返回经过认证的用户对象,
    传入的request是重新封装过的。

    版本?

    功能的更新迭代。
    可以放在url,也可以放在请求头,但不是很方便,也可以放在子域名上,但存在跨域的问题。
    可以用三种方法实现:get传参方式,基于url正则传参
    如果url中有版本信息,就获取发送到服务端的版本,返回一个元组.

    权限?

    答:如果用户通过认证,检查用户是否有权限访问url中所传的路径,如用用户访问的是没有没有权限的路径,则会抛出异常。

    访问频率的限制?

    答:作用是检查用户是否被限制了访问主机的次数。

    解析器

    答:对请求数据进行解析,对请求体进行解析。


    如何进行序列化的?

    答:有两种方法实现
    一:从数据去取出数据,return response
    二:从数据库求出数据,赋值给instance,设置是否是单对象,再进行赋值,然后return response(.data)返回。
    ser = UsersSerializer(instance=user_list,many=True)
    return Response(ser.data)

    序列化?

    答:解决QuerySet序列化问题。
    序列化:
    基本序列化:单对象,多对象。instance=user_list,many=True
    跨表序列化:
    复杂序列化:
    基于Model实现序列化:
    生成url:
    全部生成url:
    请求数据验证:




  • 相关阅读:
    CNN comprehension
    Gradient Descent
    Various Optimization Algorithms For Training Neural Network
    gerrit workflow
    jenkins job配置脚本化
    Jenkins pipeline jobs隐式传参
    make words counter for image with the help of paddlehub model
    make words counter for image with the help of paddlehub model
    git push and gerrit code review
    image similarity
  • 原文地址:https://www.cnblogs.com/djfboai/p/10022423.html
Copyright © 2011-2022 走看看