⾯试题(restful)
1. 谈谈你对restful 规范的理解?
- restful其实就是⼀套编写接⼝的协议,协议规定如何编写以及如何设置返回值、状态码等信息。
- 最显著的特点:
restful: 给⽤户⼀个url,根据method不同在后端做不同的处理,⽐如:post 创建数据、get获取数据、put和patch修改数据、delete删除数据。
no rest: 给调⽤者很多url,每个url代表⼀个功能,⽐如:add_user/delte_user/edit_user/
- 当然,还有协议其他的,⽐如:
- 版本,来控制让程序有多个版本共存的情况,版本可以放在 url、请求头(accept/⾃定义)、GET参数
- 状态码,200/300/400/500
- url中尽量使⽤名词,restful也可以称为“⾯向资源编程”
- api标⽰:
api.luffycity
www.luffycity/api/
...
.....
2. 你的restful是怎么学的?
- 因为之前公司要写这样项⽬
- 接⼝
- 公司要做前后端分离的项⽬
- 公司要做⼩程序的开发
- 所以就开始学习restful规范,看的技术⽂章阮⼀峰的博客学到的规范。
3. 状态码都有哪些?
4. method都有哪些?
5. 常见请求头有哪些?
6. 你是⽤什么开发的restful接⼝?
使⽤django rest framework框架。
7. 为什么要使⽤django rest framework框架?
restful接口调用实例在编写接⼝时可以不适⽤django rest framework框架,
如果不使⽤:也可以做,那么就可以django的CBV来实现,开发者编写的代码会更多⼀些。
如果使⽤:内部帮助我们提供了很多⽅便的组件,我们通过配置就可以完成相应操作,如:
- 序列化,可以做⽤户请求数据校验+queryset对象的序列化称为json
- 解析器,获取⽤户请求数据request.data,会⾃动根据content-type请求头的不能对数据进⾏解析
- 分页,将从数据库获取到的数据在页⾯进⾏分页显⽰。
还有其他:
- 认证
- 权限
- 访问频率控制
- ...
8. rest framework 视图你都⽤过哪些基类?
a. 继承 APIView
这个类属于rest framework中顶层类,内部帮助我们实现了只是基本功能:认证、权限、频率控制,但凡是数据库、分页等操作都需要⼿动去完成,⽐较原始。
class GenericAPIView(APIView)
def post(...):
pass
b. 继承 GenericViewSet(ViewSetMixin, generics.GenericAPIView)
如果继承它之后,路由中的as_view需要填写对应关系    .as_view({'get':'list','post':'create'})
在内部也帮助我们提供了⼀些⽅便的⽅法:
- get_queryset
- get_object
- get_serializer
注意:要设置queryset字段,否则会跑出断⾔的异常。
# 只提供增加功能
class TestView(GenericViewSet):
serializer_class = XXXXXXX
def create(self,*args,**kwargs):
pass# 获取数据并对数据进⾏操作
c. 继承
- ModelViewSet
- mixins.CreateModelMixin,GenericViewSet
- mixins.CreateModelMixin,DestroyModelMixin,GenericViewSet
对数据库和分页等操作不⽤我们在编写,只需要继承相关类即可。
⽰例:只提供增加功能
class TestView(mixins.CreateModelMixin,GenericViewSet):
serializer_class = XXXXXXX
类的继承关系
9. 认证流程?
-
如何编写?写类并实现authticate
- ⽅法中可以定义三种返回值:
- (user,auth),认证成功
- None , 匿名⽤户
- 异常,认证失败
- 流程:
- dispatch
- 再去request中进⾏认证处理
10. 访问频率控制
- 匿名⽤户,根据⽤户IP或代理IP作为标识进⾏记录,为每⼀个⽤户在redis中创建⼀个列表
{
throttle_1.1.1.1:[1526868876.497521,]
throttle_1.1.1.2:[1526868876.497521,]
throttle_1.1.1.3:[1526868876.497521,]
throttle_1.1.1.4:[1526868876.497521,]
throttle_1.1.1.5:[1526868876.497521,]
}
每个⽤户再来访问时,需要先去记录中剔除以及过期时间,再根据列表的长度判断是否可以继续访问。
如何封IP:在防⽕墙中进⾏设置
- 注册⽤户,根据⽤户名或邮箱进⾏判断。
{
throttle_xxxx1:[1526868876.497521,]
throttle_xxxx2:[1526868876.497521,]
throttle_xxxx3:[1526868876.497521,]
throttle_xxxx4:[1526868876.497521,]
}
每个⽤户再来访问时,需要先去记录中剔除以及过期时间,再根据列表的长度判断是否可以继续访问。
1分钟:40次
11. 接⼝的幂等性?(是否会造成2次伤害)
⼀个接⼝通过1次相同的访问,再对该接⼝进⾏N次相同的访问时候,对资源不造影响,那么就认为接⼝具有幂等性。
⽐如:
GET,第⼀次获取结果、第⼆次也是获取结果对资源都不会造成影响,幂等。
POST,第⼀次新增数据,第⼆次也会再次新增,⾮幂等。
PUT,第⼀次更新数据,第⼆次不会再次更新,幂等。
PATCH,第⼀次更新数据,第⼆次不会再次更新,⾮幂等。
DELTE,第⼀次删除数据,第⼆次不在再删除,幂等。
12. Https和Http区别?
端⼝:
http:80
https: 443
流程:
- ⾃定义证书
- 认证机构

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。