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

    面向资源架构:

      十条规范:(并不是强制性的,可以根据项目做出调整)

         1.使用HTTPS协议进行数据之间的传输,保证数据更安全   

         2.域名的区分

        https://api.example.com https://example.org/api/ 

        3.版本可以放在路径中  

       https://api.example.com/v1/zoos 这里的v1即是表示接口版本

        4.通过method区分操作

        get   # 获取资源
        post   # 新增资源
        put(客户端提供改变后的完整资源)/patch(客户端提供改变的属性)   # 更新资源
       delete   # 删除资源

        5.路径    视网络上任何东西都是资源,均使用名词表示(可复数)

        https://api.example.com/v1/zoos
        https://api.example.com/v1/animals
        https://api.example.com/v1/employees

        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.状态码   https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

        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实现

    # 路由编写

    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)
  • 相关阅读:
    使用javap分析Java的字符串操作
    使用javap深入理解Java整型常量和整型变量的区别
    分享一个WebGL开发的网站-用JavaScript + WebGL开发3D模型
    Java动态代理之InvocationHandler最简单的入门教程
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
    Java实现 LeetCode 541 反转字符串 II(暴力大法)
  • 原文地址:https://www.cnblogs.com/python-Arvin/p/11957219.html
Copyright © 2011-2022 走看看