什么是resful restful其实就是一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息。比如:给用户一个url,根据method不同在后端做不同的处理,返回结果必须使用JSON # 学习的目的: # 1.如何设计url链接地址 # 2.如何设计响应的数据格式 #状态码都有哪些? #method都有哪些? #常见请求头有哪些? #你是用什么开发的restful接口? 使用django rest framework框架。 # 为什么要使用django rest framework框架? 在编写接口时可以使用django rest framework框架, 如果不使用:也可以做,那么就可以django的CBV来实现,开发者编写的代码会更多一些。 如果 使用:内部帮助我们提供了很多方便的组件,我们通过配置就可以完成相应操作,如: 序列化, 解析器, 频率组件啦,
10条规范
''' 1)通常使用https请求 2)域名:有api关键字出现 -- https://api.baidu.com (可能涉及跨越问题) -- https://baidu.com/api 3)版本:不同版本需要标注 -- https://example.com/api/v1 | -- https://example.com/api/1 -- https://example.com/api/v2 | -- https://example.com/api/2 4)资源:请求的目标数据称之为资源,资源一般都用名词复数表示 -- https://example.com/api/v1/books (之前不规范的案例: /get_books/) 5)操作方式:不从请求链接体现操作方式,从请求方式上决定操作方式 -- get:https://example.com/api/v1/books 获取所有 -- post:https://example.com/api/v1/books 新增一本 -- put:https://example.com/api/v1/book/1 更新id=1的一本 -- patch:https://example.com/api/v1/book/1 更新id=1的一本 -- delete:https://example.com/api/v1/book/1 删除id=1的一本 6)资源过滤:通过接口传递参数来过滤资源 -- https://example.com/api/v1/books?limit=10 限制10条 7)状态码:返回数据要标准状态码,通过在数据中 {"status": 0} -- SUCCESS("0", "查询成功") -- NODATA("1xx", "非正确,无数据,显示基本信息") -- FEAILED("2xx", "查询失败") 8)错误信息:请求失败需要标注错误信息 {"msg": "请求参数不合法"} 9)操作结果:请求操作成功的返回结果 {"results": []} -- get:返回资源列表 | 返回单一资源 -- post:返回单一新增资源 -- put:返回更新的资源 -- patch:返回更新的资源 -- delete:返回空文档 10)子资源返回资源接口:返回的资源如果有子资源,返回子资源的链接地址,如查找书,书的封面图片就可以url表示 '''
总结
#1.url链接设计:采用https方式,有api关键字,有版本需要明确版本,请求链接用名词来表示资源,具体的操作方式采用请求方式来确定 #2.url响应数据设计:需要明确 状态码、错误信息、成功结果,子资源一般用子资源的接口来标注
django下resful接口规范的编写
class Books(View): # 获取所有图书 def get(self, request): print(type(request)) response = {'status': 100, 'data': None} books = models.Book.objects.all() # 先构造出所有书籍的字典的列表 ll = [{'name': book.name, 'price': book.price} for book in books] # 返回数据是json格式数据 response['data'] = ll return JsonResponse(response, safe=False) def put(self, request, pk):0 # print(request.PUT) import json data=json.loads(str(request.body,encoding='utf-8')) name=data.get('name') price=data.get('price') ret = models.Book.objects.filter(pk=pk).update(name=name,price=price) print(ret) return JsonResponse({'status': 100, 'msg': '修改成功'}) def post(self, request, pk): print(pk) print(request.method) print(request.body) print(request.POST) print(request.GET) name = request.POST.get('name') price = request.POST.get('price') print(name) ret = models.Book.objects.filter(pk=pk).update(name=name,price=price) print(ret) return JsonResponse({'status': 100, 'msg': '修改成功'})