zoukankan      html  css  js  c++  java
  • RESTFULL 01 规范

    RESTFULL规范

    一:什么是RESTFULL

    它是一个规范,面向资源架构

    - REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
    - REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
    - REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
    - 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
    - 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)
    

    二:RESTFULL API 规范(10条)

    1 API与用户的通信协议,总是使用HTTPs协议
    2域名

    3 版本

    • URL,如:https://api.example.com/v1/

    • 请求头 跨域时,引发发送多次请求-把版本号放在请求头中

      127.0.0.1/book/1

    4 路径,视网络上任何东西都是资源,均使用名词表示(可复数) 必须说出来
    127.0.0.1/get_all_book/ 以前你这么写
    127.0.0.1/books/
    5 method,通过请求方式来表示进行的操作

    • GET :从服务器取出资源(一项或多项)
    • POST :在服务器新建一个资源
    • PUT :在服务器更新资源(客户端提供改变后的完整资源)
    • PATCH :在服务器更新资源(客户端提供改变的属性)
    • DELETE :从服务器删除资源

    ​ 127.0.0.1/books/ get请求:表示获取所有图书
    ​ 127.0.0.1/books/1 get请求:表示获取id为1的图书
    ​ 127.0.0.1/books/ post请求:表示新增一本书
    ​ 127.0.0.1/books/ delete请求:表示删除一本书
    ​ 127.0.0.1/books/ put/patch请求:表示修改一本书
    6 过滤,通过在url上传参的形式传递搜索条件
    7 状态码
    ​ 1 开头:服务器正在处理
    ​ 2 开头:服务器处理成功
    ​ 3 开头:重定向
    ​ 4 开头:客户端错误
    ​ 5 开头:服务器错误
    ​ 注意:在返回的数据中携带状态码
    8 错误处理,应返回错误信息,error当做key

    {
        error: "Invalid API key"
    }
    

    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写resful规范的接口

    路由系统:

    urlpatterns = [
        url(r'^users/$', views.Users.as_view()),
        url(r'^users2/$', views.user2),
    
    ]
    

    视图函数:

    import json
    
    def  user2(request):
        if request.method=='GET':
            dic = {'status':200,'name': 'lqz2', 'age': 18}
            return HttpResponse(json.dumps(dic))
        elif request.method=='POST':
            dic = {'status': 200, 'msg': '修改成功'}
            return JsonResponse(dic)
    
    class Users(View):
        def get(self, request):
            dic = {'status':200,'name': 'lqz', 'age': 18}
            return HttpResponse(json.dumps(dic))
    
        def post(self, request):
            dic = {'status': 200, 'msg': '修改成功'}
            return JsonResponse(dic)
    

    四、CBV源码执行过程

    -路由写成:url(r'^books/', views.Books.as_view()),
    -当程序启动,第二个位置其实已经放了一个函数的内存地址了(as_view内部view这个函数)
    -比如来了一个get请求,拿到第二个位置参数内存地址加括号执行(request,*args,**kwargs),其实就是view(request,*args,**kwargs)
    		-本质就是执行了dispatch(request,*args,**kwargs)方法
    		-dispatch方法内部通过请求方式(get,post),反射出要执行的方法,去执行,然后返回
    

    五、APIView的源码执行流程

    比如get请求来了,执行View的as_view方法内部的view闭包函数,view闭包函数中执行了dispatch方法,
    现在再执行dispatch,就已经不是View的dispatch,是APIView的dispatch方法了

  • 相关阅读:
    SQL Server 2005 数据定义语言触发器(Data Definition Language Triggers)[翻译]
    sqlserver 存储过程例子
    微软CEO鲍尔默:科技产业终将成为经济救世主
    poj:2689用筛选法选素数求区间[L,U]的所有素数
    ZOJ Problem Set 1002 Fire Net
    去除多余括号
    模板元编程:求N的阶乘
    算法导论10.2习题
    奇数阶魔方算法
    TSQL 编程常用例子
  • 原文地址:https://www.cnblogs.com/prodigal/p/10594616.html
Copyright © 2011-2022 走看看