Restful

Web应用模式

  • 在开发web应用中,有两种应用模式;
    • 前后端不分离
    • 该模式中,前端页面看到的效果由后端控制,有后端渲染页面或者进行重定向,也就是后端控制前端的展示,前后端的耦合度很高-------适用于纯网页应用

在这里插入图片描述

  • 前后端分离

    • 该模式中,后端仅返回前端需要的数据,不在进行渲染页面的操作,不再控制前端页面的显示效果.而前端用户看到什么效果,从后端请求的数据如何加载到前端中,由前端决定,后端仅需开发一套逻辑对外提供数据即可.
    • 此应用模式中,前后端耦合度较低.此时我们通常将后端开发的每个视图视为一个接口,或者API,前段通过访问接口来对数据进行增删改查

    在这里插入图片描述

RESTful设计方法

域名
  • 应尽量将API部署在专用域名下

    https://api.example.com
    
版本
  • 将API的版本号放入URL中

    http://www.example.com/app/1.0/foo
    
    http://www.example.com/app/1.1/foo
    
    http://www.example.com/app/2.0/foo
    
路径
  • 表示API的具体网址,每个网址代表一种资源

  • 资源作为网址,只能有名词,且所用名词往往与数据库的表明对应

    GET /products :将返回所有产品清单
    POST /products :将产品新建到集合
    GET /products/4 :将获取产品 4
    PATCH(或)PUT /products/4 :将更新产品 4
    
  • API中的名词应使用复数,无论子资源或者所有资源

    获取单个产品:http://127.0.0.1:8080/AppName/rest/products/1
    获取所有产品: http://127.0.0.1:8080/AppName/rest/products
    

HTTP动词

  • GET----从服务器获取资源
  • POST----在服务器中新建一个资源
  • PUT----在服务器更新资源(客户端提供改变后的完整资源)
  • DELETE----从服务器删除资源
  • PATCH----在服务器更新资源(客户端提供改变的属性)
  • HEAD----获取资源的元数据
  • OPTIONS----获取信息,关于自愿的哪些属性是客服端可以改变的

过滤信息(Filtering)

  • 参数设计允许存在冗余,即允许API路径和URL参数偶尔有重复

    ?limit=10:指定返回记录的数量
    ?offset=10:指定返回记录的开始位置。
    ?page=2&per_page=100:指定第几页,以及每页的记录数。
    ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
    ?animal_type_id=1:指定筛选条件
    

状态码(Status Codes)

200 OK - [GET]:服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
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] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

错误处理(Error handling)

  • 若状态码为以4开头,那么服务器就应该向用户返回出错信息,返回格式应该以键值对方式返回,error为键,出错信息为值

    {
        error: "Invalid API key"
    }
    

REST接口开发的核心任务

  • 将数据库数据进行序列化为前端需要的数据格式,并返回;

  • 将前端发送的数据反序列化为模型类对象,并保存到数据库中

  • 序列化与反序列化
    • 序列化------将数据库中的对象,转换为json形式,传给前端
    • 反序列化-----将前端传递过来的数据,转为数据中的对象,保存在数据库中

同源策略

  • 相同的协议,相同的域名,相同的端口.ajax才能获取数据

Djando REST framework(DRF)

特点:

  • 提供了定义序列化器Serializer的方法,可根据Django ORM或其他库自动序列化/反序列化

  • 提供了丰富的类视图(CBV),Mixin扩展类,简化视图的编写

  • 丰富的定制层级:函数视图(FBV),类视图(CBV),视图集合到自动生成API,满足各种需要

  • 身份认证和权限认证的支持

  • 内置了限流系统

  • 直观的API web界面

  • 可扩展性,插件丰富

DRF 工程搭建

  • 安装DRF

    pip install djangorestframework
    
  • 添加rest_framework应用

    INSTALLED_APPS=[
        ...
        'rest_framework'
    ]
    

    pip install djangorestframework
    
  • 添加rest_framework应用

    INSTALLED_APPS=[
        ...
        'rest_framework'
    ]
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值