zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Session cookie 原理
    asp.net core service mesh
    js 常用库
    asp.net core consul
    asp.net core polly
    asp.net core ocelot
    第十五章 享元模式 Flyweight
    第十四章 策略模式 Strategy
    mysql 主从复制
    mysql 执行计划
  • 原文地址:https://www.cnblogs.com/pdun/p/10871469.html
Copyright © 2011-2022 走看看