zoukankan      html  css  js  c++  java
  • rest_framework--RESTful规范

    #####RESTful规范#####
    
    一、什么是restful
        restful其实就是一种软件架构风格,跟技术毫无关系。是一种面向资源编程的方法。
        说起面向资源编程,我想起了之前了解到的面向过程编程,面向对象编程
    
    二、restful的10种规范(直接copy了)
        (1)、API与用户的通信协议,总是使用HTTPs协议。
        (2)、域名
            https://api.example.com       尽量将API部署在专用域名(会存在跨域问题)
            https://example.org/api/      API很简单
        (3)、版本
            URL,如:https://api.example.com/v1/
            请求头              跨域时,引发发送多次请求
        (4)、路径,视网络上任何东西都是资源,均使用名词表示(可复数)
                https://api.example.com/v1/zoos
                https://api.example.com/v1/animals
                https://api.example.com/v1/employees
        (5)、method
                GET  :从服务器取出资源(一项或多项)
                POST :在服务器新建一个资源
                PUT  :在服务器更新资源(客户端提供改变后的完整资源)
                PATCH  :在服务器更新资源(客户端提供改变的属性)
                DELETE :从服务器删除资源
        (6)、过滤,通过在url上传参的形式传递搜索条件
                https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
                https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
                https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
                https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
                https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
        (7)、返回数据必须带上状态码,也可以是自己写的状态码
        (8)、错误处理,应返回错误信息,error当做key。{'error':错误信息}
        (9)、返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。
                GET /collection:返回资源对象的列表(数组)
                GET /collection/resource:返回单个资源对象
                POST /collection:返回新生成的资源对象
                PUT /collection/resource:返回完整的资源对象
                PATCH /collection/resource:返回完整的资源对象
                DELETE /collection/resource:返回一个空文档
        (10)、Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,
              使得用户不查文档,也知道下一步应该做什么。
                  {"link": {
                  "rel":   "collection https://www.example.com/zoos",
                  "href":  "https://api.example.com/zoos",
                  "title": "List of zoos",
                  "type":  "application/vnd.yourformat+json"
                    }}
    
    三、怎么基于django写restful规范代码呢(用CBV)
        路由层代码:
            url(r'login/',views.Login.as_views())
    
        视图层代码:
            from django.views import View
            class Login(View):
                def post(self,request,*args,**kwargs):
                    response = {'status':100,'msg':None}
                    name = request.POST.get('name')
                    password = request.POST.get('password')
                    if name == '朱宇' and password == '123':
                        response['msg'] = '登陆成功'
                    else:
                        response['msg'] = '登陆失败'
                        response['status'] = 101
                    return JsonResponse(response)
    
        又想起点东西写写吧,
        1、这里request.POST.get('name')  --->  取的是name这个key对应value的最后一个值
        2、JsonResponse(response)   --->  假如response光只是字典可以这样写,但是有列表的话,必须把safe=False,默认为True
        3、再看路由层层代码,as_view(),这里是加了括号的,所以在django程序启动时,就会执行,它是类的方法,执行结果时返回了一个
           view函数的内存地址,等路由来的时候,便会加括号执行view函数,view函数的返回值是dispatch(self, request, *args, **kwargs)
           的返回值。所以会执行dispatch方法
           下面是View类中的dispatch方法源码:
                def dispatch(self, request, *args, **kwargs):
                if request.method.lower() in self.http_method_names:
                    handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
                else:
                    handler = self.http_method_not_allowed
                return handler(request, *args, **kwargs)
           我们可以从request对象中知道本次请求的请求方法,如果在http_method_names这个列表里的话,通过反射获得该请求方法(小写)命名
           方法的内存地址,并去执行,执行完毕return回去
  • 相关阅读:
    二、Mecanim 动画系统(第二部分)
    二、Mecanim 动画系统(第一部分)
    二、对象和类型(第三部分)
    二、对象和类型(第二部分)
    二、对象和类型(第一部分)
    一、核心C#(第二部分)
    一、Unity编辑器
    一、核心C#(第一部分)
    反射(Reflection)一、
    RSA算法(二)
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/10130191.html
Copyright © 2011-2022 走看看