zoukankan      html  css  js  c++  java
  • 面试连RESTful都不知道 ?那你是全宇宙最low的小菜鸟!内含REST framework 配置。

    1.1 什么是RESTful 

        1. REST与技术无关,代表的是一种软件架构风格(REST是Representational State Transfer的简称,中文翻译为“表征状态转移”)

        2. REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识

        3. 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性

        4. 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)1.1 RESTful API设计规范

    1.1 RESTful API设计规范

           1、API与用户的通信协议,总是使用HTTPs协议

           2、域名 

            1)子域名方式

              https://api.example.com                         尽量将API部署在专用域名(会存在跨域问题)

              https://www.example.com

            2)url方式

              https://example.org

              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、常见状态码

    '''1. 2XX请求成功'''
    # 200 请求成功,一般用于GET与POST请求
    # 201 Created - [POST/PUT/PATCH]:用户新建或修改数据成功。
    # 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    # 204 NO CONTENT - [DELETE]:用户删除数据成功。
    '''2. 3XX重定向'''
    # 301 NO CONTENT - 永久重定向
    # 302 NO CONTENT - 临时重定向
    '''3. 4XX客户端错误'''
    # 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误。
    # 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    # 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    # 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录。
    # 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    # 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    # 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    '''4. 5XX服务端错误'''
    # 500 INTERNAL SERVER ERROR - [*]:服务器内部错误,无法完成请求
    # 501 Not Implemented     服务器不支持请求的功能,无法完成请求
    
    更多状态码参考:https://www.runoob.com/http/http-status-codes.html

        8、错误处理,状态码是4xx时,应返回错误信息,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实现REST framework 

    urls.py:

    urlpatterns = [
        url(r'^users', Users.as_view()),
    ]

    views.py:

    from django.views import View
    from django.http import JsonResponse
     
    class Users(View):
        def get(self, request, *args, **kwargs):
            result = {
                'status': True,
                'data': 'response data'
            }
            return JsonResponse(result, status=200)
     
        def post(self, request, *args, **kwargs):
            result = {
                'status': True,
                'data': 'response data'
            }
            return JsonResponse(result, status=200) 

     1.3 REST framework 基本使用

      1、安装 

          pip install djangorestframework

      2、djangorestframework 介绍

          1. djangorestframework 主要使用 APIView,其实APIView实质是对 View 进行继承加工了更多功能

          2. 请求来了 APIView首先执行 self.dispatch 方法,此方法对 request 进行了再次封装

     

     

     

     

     

    '''1. 2XX请求成功'''# 200 请求成功,一般用于GET与POST请求# 201 Created - [POST/PUT/PATCH]:用户新建或修改数据成功。# 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)# 204 NO CONTENT - [DELETE]:用户删除数据成功。'''2. 3XX重定向'''# 301 NO CONTENT - 永久重定向# 302 NO CONTENT - 临时重定向'''3. 4XX客户端错误'''# 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误。# 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。# 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。# 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录。# 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。# 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。# 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。'''4. 5XX服务端错误'''# 500 INTERNAL SERVER ERROR - [*]:服务器内部错误,无法完成请求# 501 Not Implemented     服务器不支持请求的功能,无法完成请求
    更多状态码参考:https://www.runoob.com/http/http-status-codes.html

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/onerose/p/11114252.html
Copyright © 2011-2022 走看看