• 【Django】RESTful API接口设计风格


    它是一种web软件结构的API开发风格,注意它仅仅只是代表着一种风格,并不代表着约束、标准。

    一、协议、域名和版本

    尽量使⽤https协议,使⽤专属域名来提供API服务,并在URL⾥标注api版本,如下

    https://api.example.com/v1
    https://www.example.com/api/v1
    
    • 1
    • 2

    二、 URI(统⼀资源标识符)

    在RESTful架构中,每个⽹址代表⼀种资源(resource),这个⽹络地址就是URI(uniform resource identifier), 有时也被称为URL(uniform resource locator)。因为URI对应⼀种资源,所以⾥⾯不能有动词,只能有名词⼀般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使⽤复数。

    https://api.example.com/v1/users
    ⽤户列表资源地址

    https://api.example.com/v1/users/{id}
    ⽤户id=5资源。注意:这⾥是users/5,⽽不是user/5,API中的名词应该使⽤复数。⽆论⼦资源或者所有资源。

    https://api.example.com/v1/users/{id}/articles
    ⽤户id=5发表的⽂章列表

    非RestFul设计,以往我们都会这么写:

    http://xxx.com:8080/get/getArticle (查询文章)
    http://xxx.com:8080/post/addArticle (新增文章)
    http://xxx.com:8080/update/updateArticle (更新文章)
    http://xxx.com:8080/delete/deleteArticle (删除文章)

    RestFul设计风格:

    GET http://xxx.com:8080/get/articles(查询文章)
    POST http://xxx.com:8080/post/articles(新增文章)
    PUT http://xxx.com:8080/update/articles(新增文章)
    DELETE http://xxx.com:8080/dalete/articles(删除文章)

    三、HTTP动词

    对于资源的具体操作类型,由HTTP动词表示。
    常⽤的HTTP动词有下⾯四个(括号⾥是对应的SQL命令)

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

    还有三个不常⽤的HTTP动词。

    PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。
    HEAD:获取资源的元数据。
    OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

    四、过滤信息(Filtering)

    如果记录数量很多,服务器不可能都将它们返回给⽤户。API应该提供参数,过滤返回结果。
    下⾯是⼀些常⻅的参数。

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

    五、状态码(Status Codes)

    服务器向⽤户返回的状态码和提示信息,常⻅的有以下⼀些(⽅括号中是该状态码对应的
    HTTP动词)。
    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 - [*]:服务器发⽣错误,⽤户将⽆法判断发出的请求是
    否成功。

    六、错误处理

    如果状态码是4xx,服务器就应该向⽤户返回出错信息。⼀般来说,返回的信息中将error作为键名,出错信息作为键值即可。

    {
     error: "Invalid API key"
    }
    
    • 1
    • 2
    • 3

    七、返回结果

    GET /collection:返回资源对象的列表(数组)
    GET /collection/resource:返回单个资源对象
    POST /collection:返回新⽣成的资源对象
    PUT /collection/resource:返回完整的资源对象
    PATCH /collection/resource:返回完整的资源对象
    DELETE /collection/resource:返回⼀个空⽂档

    在这里插入图片描述

  • 相关阅读:
    HTML+CSS+JS制作一个迅雷看看电影网页设计实例 ,排版整洁,内容丰富,主题鲜明,简单的网页制作期末作业
    TDengine高可用探讨
    [转]x86_64的基本架构
    STM32F4x之中断一
    【前后缀技巧】2022牛客多校3 A
    八款流行无线黑客工具,非常实用
    基于maven的项目搭建(已跑通)
    基于AlexNet卷积神经网络的手写体数字倾斜校正系统研究-附Matlab代码
    循环结构--for循环
    java计算机毕业设计课程与成绩管理MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/YZL40514131/article/details/125457830