• 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:
    请求数据验证:




  • 相关阅读:
    AJAX 方式
    Qt程序设计——txt文本中获取字符串的问题
    二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
    Android项目 手机安全卫士(代码最全,注释最详细)之五 splash动画效果
    Navigator 对象
    Dreamweaver中打开CodeSmith文件
    IOS开发:xcode5版本引发的问题
    Ubuntu 13.04 小米2S连接Eclipse真机调试
    Java面试题之四
    c++基础 之 面向对象特征一 : 继承
  • 原文地址:https://www.cnblogs.com/djfboai/p/10022423.html
Copyright © 2020-2023  润新知