RESTful规范

RESTful规范

什么是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': '修改成功'})
View Code

 

posted @ 2019-05-15 19:09  pdun  阅读(171)  评论(0编辑  收藏  举报