zoukankan      html  css  js  c++  java
  • restful规范和restframework框架

    什么是接口?

    接口可以理解为url就是接口.

    那么在其他语言里面接口也可以是约束类

    restful规范是什么?

    RESTful是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

    URL:

    1.url体现版本

    2.url体现是API

    3.用HTTPS

    4.条件

    5.面向资源编程

    6.根据method的不用进行不同的操作

    7.响应时添加状态码

    常见的状态码

    200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
    201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
    202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    204 NO CONTENT - [DELETE]:用户删除数据成功。
    400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
    401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
    406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
    状态码

    Response('...',status=200)

    8.不同的操作给不同的返回值

      GET:返回全部的数据

      POST:返回新的数据(规范是返回新的数据,但是我们要根据业务逻辑看新的数据是否有价值,)

      GET:获取单挑数据

      PUT:返回修改的数据

      PATCH:返回修改的数据

      DELETE:返回空

    9.返回错误信息

    10.详细信息.

    你理解的restful规范?

    restful是一个规范,规定API如何编写,通过它我们可以让api更加简洁可维护

    比如,最直观的根据method的不同进行不同的操作,原来这些都是url设置的

    除此之外:

      -api标识

      -版本

      -面向资源编程

      -状态码

      -返回值

      -错误信息

      -hypemedia link

    RestFrameWork框架是什么?

    帮助我们快速的开发符合restful规范的接口

    有什么功能:

    1.路由

    2.视图

    3.版本

    4.认证

    5.权限

    6.频率

    7.解析器

    8.序列化

    9.分页

    10.渲染器

     谈谈你对 django restframework的认识:

      -路由

        -可以通过as_view传参数,根据请求方式的不同执行响应的方法

        -可以在url中设置一个结尾类似于.json

      -视图

        -帮助开发者提供了一些类,并在类提供了很多的方法供我们使用

      -版本

        -在url中设置version参数,用户请求传入参数时,在request.version中获取版本,根据版本的不同做不同的处理

      -认证

        - 写一个类并注册到认证类,在类的authticate方法中编写认证逻辑

          -认证成功(user,auth)

          -rase AuthticateFaild(..)

          -None 继续

      - 权限

        -写一个类并注册的权限类,在类的has_permission方法中写权限逻辑

        -True  

        -False

       -频率限制

        -写一个类并注册的权限类,在类的allow_requset/wait 方法中写权限逻辑

        -匿名

        -用户

        返回True  或者False  如果返回False 那么要执行wait

      -解析器:

        -根据ContentType请求头,选择不同的解析器对请求体中的数据进行解析.

        Content-Type : url-formedo

        Content-Type :application/json

      -分页

        -对从数据库中取到的数据进行分页处理. SQL---> limit offset

          -根据页码:http://www.luffycity.com/api/v1/student/?page=1&size=10

          -根据索引:http://www.luffycity.com/api/v1/student/?offset=60(游标位置)&limit=10

          -根据加密:

      -序列化

        对queryset序列化以及对请求数据格式校验

      -渲染器

        -根据url中传入的后缀,决定在数据如何渲染到页面上.

    视图都继承了哪些类?

     认证是怎么实现的?

    在用户登录的时候进行判断是否登录过来决定是更新还是创建token

    (update_or__create)下次访问的时候要带着token进行访问.

    如果认证失败则抛出异常,认证成功需要返回一个元组

    (request.user,request.auth)

    为什么要更新token?

    如果你的token一直是同一个值的话,那么如果别人获取了你的token值,就可以

    伪造你进行一些不是你个人意愿的操作

    你的认证是只给一个视图还是全局的?

    这个认证是可单视图也可以是全局的,

    因为在源码里边,他先会去你编写的类authentication_classes里面取你设置的认证

    如果没有就去settings里面找.在settings设置了就可以进行全局认证

    如何实现访问频率的限制?

    主要分为匿名用户和非匿名用户两种类型,

    先讲讲匿名用户

    假设我们一分钟限制最多访问10次

    当请求进来的时候,以IP为key,值是一个列表,列表里套着时间戳,最新的时间放在最左边

    1.如果用户在20秒内访问了10次,那么列表里就有10个时间戳,当他再次访问的时候

    拿访问的时间-60秒跟10次最旧的时间相比,如果比它小,那么不能进行访问.

    2.如果访问的时间大于10个,那么把列表的10个清空放置最新的时间

    用户的话就可以用用户名为key来实现.

    本质上这种方式只能够防小白,稍微有经验的都会用代理IP然后随机获取进行访问

    或者随机用不同的用户进行爬取信息

    面试回答规范

    频率的限制分两种:

    一种是匿名用户

    当匿名用户访问的时候,把它的IP为key,value值对应一个列表里面装访问的时间戳,

    下一次匿名用户访问的时候,对比列表的时间戳的时间戳,把不符合的剔除跳.超时的.

    然后再对比他的个数

    如果是用户的话那么把用户名作为key

    这是看自己源码学习的,但是我想啊

    对于匿名用户来说,如果他有很多代理的IP随机访问,那么我们就捕捉不到他,不能给他做

    频率的限制.

    默认将访问记录放在了缓存中: redis/mecached

  • 相关阅读:
    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
    Java生鲜电商平台-电商会员体系系统的架构设计与源码解析
    Java生鲜电商平台-优惠券系统的架构设计与源码解析
    Java生鲜电商平台-促销系统的架构设计与源码解析
    Java生鲜电商平台-电商支付流程架构实战
    Java生鲜电商平台-商城后台架构与原型图实战
    还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
    后端程序员就靠它吃饭了,推荐一份夯实基础的操作系统书单!
    学习计算机基础必读的4本经典入门书籍,自学编程必备书单!
    这份Java Web必读书单,值得所有Java工程师一看!
  • 原文地址:https://www.cnblogs.com/chenxuming/p/9370009.html
Copyright © 2011-2022 走看看