当前位置: 首页 > news >正文

Restful API接口规范(以Django为例)

Restful API接口规范(以Django为例)

Restful API的接口架构风格中制定了一些规范,极大的简化了前后端对接的时间,以及增加了开发效率

  • 安全性保证–使用https
  • 路径中带 api标识
  • 路径中带版本号
  • 数据即资源,通常使用名词操作
  • 请求方式决定操作资源的方式
    • get 获取数据
    • post 增加数据
    • put 修改数据
    • delete 删除数据
  • 响应状态码
    • http响应状态码:1 2 3 4 5
    • 自己定制的状态码
  • 响应中带提示
    • msg
  • 请求地址中带查询参数–》只针对于查询所有
  • 响应中带链接地址
  • 操作符合如下规范
    • 查所有: 数组 列表
    • 查单条: 对象
    • 新增: 返回新增的对象
    • 删除:空文档
    • 修改:返回修改后的对象

Restful API与传统设计的区别

在之前的url设计中,我们通常会这么写

  • http://localhost:8000/get(查询用户)

  • http://localhost:8000/add(新增用户)

  • http://localhost:8000/update(更新用户)

  • http://localhost:8000/detele(删除用户)

即所有交互全部在后端执行,request请求的方法全部为get或post方法,

因此需要在后端进行各种校验和if判断非常繁琐

根据Restful API接口规范修改

  • http://localhost:8000/api/(查询用户)

    • request请求方法:GET
  • http://localhost:8000/api/(新增用户)

    • request请求方法:POST
  • http://localhost:8000/api/id/(更新用户)

    • request请求方法:PUT
  • http://localhost:8000/api/id/(删除用户)

    • request请求方法:DELETE

根据请求方式在后端执行不同的代码块,后端无需再对数据类型再次校验

示例

以Django框架为示例:

根据不同路由执行方法

# urls.py
urlpatterns = [path('admin/', admin.site.urls),path('find_all/', app.views.find_all),path('find/', app.views.find),path('insert/', app.views.insert),path('delete/', app.views.delete),path('change/', app.views.change),
]
# views.py
def find_all(request):if request.GET.get('data') == 'find_all':response = {'code': '200', 'msg': "查询成功", 'results': results}response = json.dumps(response)return JsonResponse(response, safe=False)return HttpResponse('查询所有')def find(request):if request.GET.get('data') == 'find':response = {'code': '200', 'msg': "查询成功"}response = json.dumps(response)return JsonResponse(response, safe=False)return HttpResponse('查询单个')def insert(request):if request.method == 'POST':response = {'code': '200', 'msg': "添加成功"}return JsonResponse(response, safe=False)return HttpResponse('新增一个')def delete(request):if request.method == 'POST':response = {'code': '200', 'msg': "删除成功"}return JsonResponse(response, safe=False)return HttpResponse('删除一个')def change(request):if request.method == 'POST':response = {'code': '200', 'msg': "修改成功"}return JsonResponse(response, safe=False)return HttpResponse('修改一个')

根据Restful API规范修改后的示例

# urls.py
urlpatterns = [path('admin/', admin.site.urls),path('app/', app.views.task.as_view()),path('app/<str:u_id>/', app.views.task_detail.as_view()),
]
# views.py
class task(View):# 获取所有def get(self, request):response = {'code': '200', 'msg': "查询成功"}return JsonResponse(response, safe=False)# 新增def post(self,request):response = {'code': '200', 'msg': "添加成功"}return JsonResponse(response, safe=False)class task_detail(View):# 根据id获取def get(self, request, u_id):response = {'code': '200', 'msg': "获取成功"}return JsonResponse(response, safe=False)# 根据id删除def delete(self, request, u_id):response = {'code': '200', 'msg': "删除成功"}return JsonResponse(response, safe=False)# 根据id修改def put(self, request, u_id):response = {'code': '200', 'msg': "修改成功"}return JsonResponse(response, safe=False)

相关文章:

Restful API接口规范(以Django为例)

Restful API接口规范(以Django为例) Restful API的接口架构风格中制定了一些规范&#xff0c;极大的简化了前后端对接的时间&#xff0c;以及增加了开发效率 安全性保证–使用https路径中带 api标识路径中带版本号数据即资源&#xff0c;通常使用名词操作请求方式决定操作资源…...

AI助力,程序员压力倍增?

讲动人的故事,写懂人的代码 你知道程序员现在在AI辅助编程时最头疼的事情是什么吗?就是怎么在改代码的时候保住小命。 大家都听过程序员因为工作太累导致过劳湿的事情。 无论是写新功能、修bug,还是更改系统配置,都得改代码。 现在有了AI的帮助,本应该轻松很多,为什么…...

LoRA微调

论文&#xff1a;LoRA: Low-Rank Adaptation of Large Language Models 实现&#xff1a;microsoft/LoRA: Code for loralib, an implementation of “LoRA: Low-Rank Adaptation of Large Language Models” (github.com) 摘要 自然语言处理的一个重要的开发范式包括&#…...

45.基于SpringBoot + Vue实现的前后端分离-驾校预约学习系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的驾校预约学习系统设计与实现管理工作…...

系统思考—时间滞延

“没有足够的时间是所有管理问题的一部分。”——彼得德鲁克 鱼和熊掌可以兼得&#xff0c;但并不能同时获得。在提出系统解决方案时&#xff0c;我们必须认识到并考虑到解决方案的实施通常会有必要的时间滞延。这种延迟有时比我们预想的要长得多&#xff0c;特别是当方案涉及…...

SSM项目转Springboot项目

SSM项目转Springboot项目 由于几年前写的一个ssm项目想转成springboot项目&#xff0c;所以今天倒腾了一下。 最近有人需要毕业设计转换一下&#xff0c;所以我有时间的话可以有偿帮忙转换&#xff0c;需要的私信我或&#xff0b;v&#xff1a;Arousala_ 首先创建一个新的spr…...

VUE3.0对比VUE2.0

vue3.0 与 vue2.0的不同之处有以下几点&#xff1a; 数据响应式原理 3.0基于Proxy的代理实现监测&#xff0c;vue2.0是基于Object.defineProperty实现监测。 vue2.0 通过Object.defineProperty&#xff0c;每个数据属性被定义成可观察的&#xff0c;具有getter和setter方法&…...

车内AR互动娱乐解决方案,打造沉浸式智能座舱体验

美摄科技凭借其卓越的创新能力&#xff0c;为企业带来了革命性的车内AR互动娱乐解决方案。该方案凭借自研的AI检测和渲染引擎&#xff0c;打造出逼真的数字形象&#xff0c;不仅丰富了车机娱乐内容&#xff0c;更提升了乘客与车辆的互动体验&#xff0c;让每一次出行都成为一场…...

OR36 链表的回文结构

描述 对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为回文结构。 给定一个链表的头指针A&#xff0c;请返回一个bool值&#xff0c;代表其是否为回文结构。保证链表长度小于等于900。 测试样例&#xff1a; 1->…...

【译】微调与人工引导: 语言模型调整中的 SFT 和 RLHF

原文地址&#xff1a;Fine-Tuning vs. Human Guidance: SFT and RLHF in Language Model Tuning 本文主要对监督微调&#xff08;SFT, Supervised Fine Tuning &#xff09;和人类反馈强化学习&#xff08;RLHF, Reinforcement Learning from Human Feedback&#xff09;进行简…...

kylin java.io.IOException: error=13, Permission denied

linux centos7.8 error13, Permission denied_linux open error13-CSDN博客 chmod -R 777 /home/zengwenfeng/kkFileView-4.2.1 2024-04-15 13:15:17.416 WARN 3400 --- [er-offprocmng-1] o.j.l.office.LocalOfficeProcessManager : An I/O error prevents us to determine…...

前端面试01总结

1.Js 中!x为true 时,x可能为哪些值 答: 1.false&#xff1a;布尔值false 2.0或-0&#xff1a;数字零 3.""或’或 &#xff08;空字符串&#xff09;&#xff1a;长度为0的字符串 4.null&#xff1a;表示没有任何值的特殊值 5.undefined&#xff1a;变量未定义时的默认…...

算法--目录

algorithm: 十种排序算法 二分法-各种应用 algorithm: 拓扑排序 算法中的背包问题 最长子序列问题 前缀和-解题集合 差分数组-解题...

ArcGIS Pro 3D建模简明教程

在本文中&#xff0c;我讲述了我最近一直在探索的在 ArcGIS Pro 中设计 3D 模型的过程。 我的目标是尽可能避免与其他软件交互&#xff08;即使是专门用于 3D 建模的软件&#xff09;&#xff0c;并利用 Pro 可以提供的可能性。 这个短暂的旅程分为三个不同的阶段&#xff1a;…...

24届数字IC设计/验证秋招总结贴——先看这个

文章目录 前言一、经验篇二、知识学习篇三、笔试篇3.1 各大公司笔试真题3.2 华为机试——数字芯片笔试题汇总 四、面试篇4.1 时间节点4.2 提前批4.3 正式批 前言 为方便快速进行查找该专栏的内容&#xff0c;将所有内容链接均放在此篇博客中 整理不易&#xff0c;欢迎订阅~~ …...

带洞平面三角分割结果的逆向算法

先标不重复点&#xff0c;按最近逐个插入。 只说原理。 不带洞的 1 2 4 2 3 4 两个三角形 结果 1 2 3 4 无重复 无洞 1 2 6 1 2 3 6 1 2 3 7 6 1 2 3 4 7 6 1 2 3 4 5 7 6 1 2 3 4 1 5 7 6 1 2 3 4 1 6 5 7 6 最终结果 1 2 3 4 1 6 5 7 6 按重复分割 1 2 3…...

MGRE-OSPF接口网络类型实验

OSPF接口网络类型实验 一&#xff0c;实验拓扑 初始拓扑&#xff1a; 最终拓扑&#xff1a; 二&#xff0c;实验要求及分析 要求&#xff1a; 1&#xff0c;R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2&#xff0c;R1/R4/R5为全连的MGRE结构&#xff0c;R…...

ChatGPT科研利器详解:写作论文轻松如玩游戏

ChatGPT无限次数:点击直达 ChatGPT科研利器详解&#xff1a;写作论文轻松如玩游戏 引言 在当今科技日新月异的时代&#xff0c;人工智能技术的应用越来越广泛&#xff0c;其中自然语言处理领域的发展尤为迅猛。ChatGPT作为一款先进的文本生成模型&#xff0c;为科研工作者提供…...

vue3从精通到入门23:定义全局变量

在vue2中&#xff0c;我们知道vue2.x是使用Vue.prototype.$xxxxxxx来定义全局变量&#xff0c; 比如定义一个全局的工具函数。 // 定义 ... Vue.prototype.$utilsutils;// 使用 this.$utils() ... 在vue3中我们无法使用this&#xff0c;提供了globalProperties&#xff1b; …...

反爬虫之代理IP封禁-协采云IP池

反爬虫之代理IP封禁-协采云IP池 1、目标网址2、IP封禁4033、协采云IP池 1、目标网址 aHR0cDovL3d3dy5jY2dwLXRpYW5qaW4uZ292LmNuLw 2、IP封禁403 这个网站对IP的要求很高&#xff0c;短时间请求十几次就会遭关进小黑屋。如下图&#xff1a; 明显是网站进行了反爬处理&…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...