【django】RESTful API 设计指南

目录

一、协议

二、域名

三、版本(Versioning)

四、路径(Endpoint)

五、HTTP动词

5.1 CRUD操作:

5.2 其他动词:

六、过滤信息(Filtering)

七、状态码(Status Codes)

八、错误处理(Error Handling)

九、返回结果

十、Hypermedia API

十一、其他

总结


前言:RESTful API 是确保前后端通信高效、一致和可扩展的关键。以下是对您提供的RESTful API设计指南的优化和改造建议,以使其更加清晰、实用且符合现代最佳实践。

一、协议

  • 使用HTTPS:API与用户的通信应始终使用HTTPS协议,以保证数据传输的安全性。
  • 考虑HTTP/2:如果可能,建议使用HTTP/2,它提供了更好的性能和安全性。

二、域名

  • 专用子域名:将API部署在专用子域名下,如https://api.example.com。
  • 主域名下的路径:如果API非常简单且不会有进一步扩展,可以考虑放在主域名下,如https://example.org/api/。

三、版本(Versioning)

  • URL中的版本号:将API的版本号放入URL中,如https://api.example.com/v1/。
  • 头部信息中的版本号:另一种做法是将版本号放在HTTP头信息中,例如Accept: application/vnd.example.v1+json,但不如放入URL直观。


四、路径(Endpoint)

  • 资源导向:每个URL代表一种资源,只使用名词且通常为复数形式。
  • 避免动词:路径中不应包含动词,例如:
GET /zoos:列出所有动物园

POST /zoos:新建一个动物园

GET /zoos/{id}:获取某个指定动物园的信息

PUT /zoos/{id}:更新某个指定动物园的信息(提供该动物园的全部信息)

PATCH /zoos/{id}:更新某个指定动物园的信息(提供该动物园的部分信息)

DELETE /zoos/{id}:删除某个动物园

GET /zoos/{id}/animals:列出某个指定动物园的所有动物

DELETE /zoos/{id}/animals/{animal_id}:删除某个指定动物园的指定动物

五、HTTP动词


5.1 CRUD操作:

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


5.2 其他动词:

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


六、过滤信息(Filtering)

  • 分页:?page=1&per_page=100:指定第几页以及每页的记录数。
  • 排序:?sort=name&order=asc:指定返回结果按照哪个属性排序以及排序顺序。
  • 筛选条件:?animal_type_id=1:指定筛选条件。
  • 冗余允许:允许API路径和URL参数偶尔有重复,如GET /zoo/{id}/animals与GET /animals?zoo_id={id}。


七、状态码(Status Codes)


常见状态码:

  • 200 OK:成功返回用户请求的数据。
  • 201 Created:用户新建或修改数据成功。
  • 202 Accepted:请求已进入后台排队(异步任务)。
  • 204 No Content:用户删除数据成功。
  • 400 Bad Request:用户发出的请求有错误。
  • 401 Unauthorized:表示用户没有权限。
  • 403 Forbidden:表示用户得到授权,但访问被禁止。
  • 404 Not Found:请求的资源不存在。
  • 406 Not Acceptable:用户请求的格式不可得。
  • 410 Gone:请求的资源被永久删除。
  • 422 Unprocessable Entity:创建对象时发生验证错误。
  • 500 Internal Server Error:服务器发生错误。


八、错误处理(Error Handling)


错误响应:对于4xx和5xx状态码,应向用户返回详细的错误信息。
示例:

{
  "error": "Invalid API key"
}


九、返回结果


规范:

  • GET /collection:返回资源对象的列表(数组)。
  • GET /collection/resource:返回单个资源对象。
  • POST /collection:返回新生成的资源对象。
  • PUT /collection/resource:返回完整的资源对象。
  • PATCH /collection/resource:返回完整的资源对象。
  • DELETE /collection/resource:返回一个空文档。


十、Hypermedia API


HATEOAS:RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法。
示例:

{
  "links": [
    {
      "rel": "self",
      "href": "https://api.example.com/zoos/1",
      "title": "Zoo Details",
      "type": "application/json"
    },
    {
      "rel": "animals",
      "href": "https://api.example.com/zoos/1/animals",
      "title": "List of Animals in Zoo",
      "type": "application/json"
    }
  ]
}



十一、其他

  • 身份认证:推荐使用OAuth 2.0框架进行API的身份认证。
  • 数据格式:尽量使用JSON格式,避免使用XML。
  • CORS支持:确保API支持跨源资源共享(CORS),以便前端应用能够跨域访问API。
  • 限流:实现限流机制,防止滥用API。
  • 日志记录:记录API的访问日志,便于监控和调试。


总结


通过上述优化和改造,您的RESTful API设计将更加符合现代最佳实践,提高API的可用性、安全性和可维护性。希望这些建议对您有所帮助!如果有更具体的需求或问题,请随时告诉我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908578.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙系统的优势 开发 环境搭建 开发小示例

HarmonyOS是面向多智能终端、全场景的分布式操作系统,为消费者提供跨终端的无缝体验.华为开发者联盟从HarmonyOS应用设计、开发、测试、推广变现等环节全方位助力开发者。 开发者可以通过以下步骤学习鸿蒙系统的开发: 基础理论学习: 了解鸿蒙系统概述&a…

「C/C++」C/C++的区别

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

Windows部署rabbitmq

本次安装环境: 系统:Windows 11 软件建议版本: erlang OPT 26.0.2rabbitmq 3.12.4 一、下载 1.1 下载erlang 官网下载地址: 1.2 下载rabbitmq 官网下载地址: 建议使用解压版,安装版可能会在安装软件…

el-table 滚动条重置 手动控制滚动条

最近在使用 el-table 的时候,出现一个问题: 表头过长的时候,会有左右滑动的操作,当我们把表格拉到最右侧,这个时候重新请求数据的话,表格位置还是在最右侧,不会恢复原位。 那我们想恢复原位&a…

推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案

在数字化转型的浪潮中,企业对于数据传输的需求日益增加,特别是在不同网络环境之间的文件共享和传输。为了满足这一需求,FileLink数据跨网摆渡系统应运而生,为企业提供了一种安全、高效的数据传输解决方案。 安全第一,保…

STl学习-迭代器

1.迭代器种类 这五种迭代器的声明如下: truct output_iterator_tag {};//输出迭代器 truct input_iterator_tag{ };//输入迭代器 truct forward iterator tag : public input iterator tag {};//向前迭代器 truct bidirectional iterator tag :public forward iter…

自适应对话式团队构建,提升语言模型代理的复杂任务解决能力

人工智能咨询培训老师叶梓 转载标明出处 如何有效利用多个大模型(LLM)代理解决复杂任务一直是一个研究热点。由美国南加州大学、宾夕法尼亚州立大学、华盛顿大学、早稻田大学和谷歌DeepMind的研究人员联合提出了一种新的解决方案——自适应团队构建&…

临街矩阵乘以自己转置的含义

总结: 临街矩阵* 邻接矩阵转置的(i,j) 位置表示有多少种线路从元素A跳转一条边最终落到元素j的路线. 这个也叫1_degree.

JavaEE-多线程初阶(3)

目录 1.线程的状态 1.1 NEW、RUNNABLE、TERMINATED 1.2 TIMED_WAITING 1.3 WAITING 1.4 BLOCKED 2.多线程带来的风险-线程安全(重点) 2.1 观察线程不安全的现象 2.2 分析产生该现象的原因 2.3 产生线程安全问题的原因 2.3.1 抢占式执行&#x…

江协科技STM32学习- P35 硬件I2C读写MPU6050

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

学习虚幻C++开发日志——定时器

官方文档:虚幻引擎中的Gameplay定时器 | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 定时器 安排在经过一定延迟或一段时间结束后要执行的操作。例如,您可能希望玩家在获取某个能力提升道具后变得无懈可击,…

【简道云 -注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

【表格解决问题】EXCEL行数过多,WPS如何按逐行分别打印多个纸张中

1 问题描述 如图:我的表格行数太多了。打印在一张纸上有点不太好看 2 解决方式 Step01:先选中你需要打印的部分,找到【页面】->【打印区域】->【设置打印区域】 Step02:先选中一行,找到【插入分页符】 Step0…

提高交换网络可靠性之链路聚合

转载请注明出处 该实验为链路聚合的配置实验。 1.改名,分别将交换机1和交换机2改名为S1,S2,然后查看S1,S2的STP信息。以交换机1为例👇。 2.交换机S1,S2上创建聚合端口,将端口加入聚合端口。以S…

SpringMVC笔记 一万字

此笔记来自于B站尚硅谷 文章目录 一、SpringMVC 简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求…

【Hive sql面试题】找出连续活跃3天及以上的用户

表数据如下: 要求:求出连续活跃三天及以上的用户 建表语句和插入数据如下: create table t_useractive(uid string,dt string );insert into t_useractive values(A,2023-10-01 10:10:20),(A,2023-10-02 10:10:20),(A,2023-10-03 10:16…

livp是什么格式文件?这几款软件可以轻松处理!

今天,我们要探讨的是一种可能相对陌生但又颇具特色的文件格式——LIVP。它通常与某些特定的软件或设备相关联,比如某些品牌的相机或视频编辑软件。LIVP文件往往包含了丰富的图像或视频信息,以及与之相关的元数据(如拍摄时间、地点…

贪心算法---java---黑马

贪心算法 1)Greedy algorithm 称之为贪心算法或者贪婪算法,核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则,选取当前最优解因为未考虑所有可能,局部最优的堆叠不一定得到最终解最优 贪心算法例子 Dijkstra while …

基于vue框架的的留守儿童帮扶管理系统c2691(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:留守儿童,帮扶活动,申请记录,帮扶机构,帮扶进度,帮扶人,申请加入记录,参与帮扶记录,地区信息 开题报告内容 基于Vue框架的留守儿童帮扶管理系统开题报告 一、研究背景与意义 在现代化进程中,随着城乡经济差异的不断扩大&a…

MySQL数据库迁移到DM8数据库

1. 达梦新建zsaqks库 2. 打开DM数据迁移工具 3. 新建工程 4. 迁移 - 右击 - 新建迁移 下一步 5. 选择迁移方式 6. MySQL数据源 请输入MySQL数据库信息 7. DM数据库目的 请输入达梦数据库信息 8. 迁移选项 保持对象名大小写(勾选) 9. 指定模式 指定是从数据源复制对象。 10.…