restful规范

时间:2024-10-27 07:19:20

1、开发模式:
1、普通开发(前后端一起写)
2、前后端分离

2、后端开发:
为前端提供URL(API/接口开发)
注:永远返回HttpResponse

3、Django
FBV:基于函数的视图
CBV:基于类的视图
基于反射实现根据不同的请求方式,执行不同的方法
原理:
URL —— view方法 —— dispacth方法 ——反射执行其他
代码:
from import View

		class MyBaseView:
			def dispatch(self, request, *args, **kwargs):
				print('before')
				ret = super(MyBaseView, self).dispatch(request, *args, **kwargs)
				print('after')

		class StudentView(MyBaseView, View):
			def dispatch(self, request, *args, **kwargs):
				print('before')
				ret = super(StudentView, self).dispatch(request, *args, **kwargs)
				print('after')
				return ret

			def get(self, request, *args, **kwargs):
				return

			def post(self, request, *args, **kwargs):
				return

			def put(self, request, *args, **kwargs):
				return

			def delete(self, request, *args, **kwargs):
				return

		return ret
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

面试题:
1、django中间件
process_request 请求执行
process_view 视图函数之前执行
process_response 返回执行
process_exception 报错执行
process_render_template 有render执行
2、使用中间件做过什么?
权限
登录认证
csrf是如何实现的:
去请求体或cookie中获取token
process_view (检查视图是否被@csrf_exempt装饰)
from import csrf_exempt, csrf_protect
@csrf_exempt加上这个装饰器可以不用验证
@csrf_protect加上这个需要csrf验证
特殊:
CBV中加csrf需要from import method_decorator
而且在单独的方法上无效,需要在在dispatch方法上加这样装饰@method_decorator(csrf_exempt)

一、restful规范(建议)
1、根据method不同做不同的操作
2、HTTPs
3、域名写法
子域名的方式:(会存在跨域问题)
URL方式:/api
4、版本:
/api/v1 (版本尽量写在URL)
5、面向资源编程(使用名词)
/api/v1/名词
6、过滤
/api/v1/?status=1&p=1
7、状态码:
200:成功
300:重定向
400:客户端错误
500:服务端错误
详细:
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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

8、错误处理
	{
		error: "Invalid API key"
	}
9、返回结果
	GET /collection:返回资源对象的列表(数组)
	GET /collection/resource:返回单个资源对象
	POST /collection:返回新生成的资源对象
	PUT /collection/resource:返回完整的资源对象
	PATCH /collection/resource:返回完整的资源对象
	DELETE /collection/resource:返回一个空文档

10、Hypermedia API
	{"link": {
	  "rel":   "collection /zoos",
	  "href":  "/zoos",
	  "title": "List of zoos",
	  "type":  "application/+json"
	}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

面试题:谈谈你对restful规范的认识。
原来的web程序时,根据URL不同定位到不同视图函数处理。
rest是一种规范:
面向资源编程
URL中是名词

二、Django rest framwork
pip install djangorestframwork