【Django】Django REST framework

Django REST framework

1.Restful 设计风格

1.1 Restful 概念

REST这个词,是 Roy Thomas Fielding 在他2000年的博士论文中提出的。

Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写,可以根据单词含义翻译为“表现层状态转化”。

如果一个架构符合REST原则,就称它为 RESTful 架构。

例如对于后端数据库中保存了商品的信息,前端可能需要对商品数据进行增删改查,那相应的每个操作后端都需要提供一个API接口,如下表格所示:

请求方法 请求地址 后端操作
GET /goods 获取所有商品
POST /goods 增加商品
GET /goods/1 获取编号为1的商品
PUT /goods/1 修改编号为1的商品
DELETE /goods/1 删除编号为1的商品

Restful 设计架构有以下特点:

  1. 每一个URL代表一种资源。
  2. 客户端和服务器之间,传递这种资源的某种表现层。
  3. 客户端和服务器之间,通过 HTTP 动词,对服务器端的资源进行获取、修改、删除等操作,实现“表现层状态转化”。

1.2 Restful 设计方法

  1. 协议

    API与用户的通信协议,总是使用 HTTPS 协议。

  2. 域名

    应该尽量将 API 部署在专用域名之下。

    https://api.example.com
    

    如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

    https://example.org/api/
    
  3. 版本

    应该将API的版本号放入 URL。

    https://api.example.com/v1/
    
  4. 路径(Endpoint)

    路径又称“终点”(endpoint),表示 API 的具体网址。

    在 Restful 架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。

    举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。

    https://api.example.com/v1/zoos
    https://api.example.com/v1/animals
    https://api.example.com/v1/employees
    
  5. HTTP 动词

    对于资源的具体操作类型,由HTTP动词表示。

    常用的HTTP动词有下面五个(括号里是对应的SQL命令)。

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

    还有两个不常用的HTTP动词。

    HEAD:获取资源的元数据。
    OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
    

    如下是一些简单的示例:

    GET /zoos:列出所有动物园
    POST /zoos:新建一个动物园
    GET /zoos/ID:获取某个指定动物园的信息
    PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
    PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
    DELETE /zoos/ID:删除某个动物园
    GET /zoos/ID/animals:列出某个指定动物园的所有动物
    DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
    
  6. 过滤信息(Filtering)

    如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

    如下是一些常见的参数。

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

    参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。

  7. 状态码(Status Code)

    服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。

    200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
    201 CREATED - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值