常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式

目前开发的项目很大程度上是为明年的国产化做准备了,所以借这个机会把用了十年的自研系统全部重写,订立更严格的规范,本文记录一下返回格式及对应状态码。

在这里插入图片描述

常见 HTTP 状态码及解释

HTTP 状态码用于表示客户端请求的响应状态,它们分为五类:2xx 表示成功,3xx 表示重定向,4xx 表示客户端错误,5xx 表示服务器错误。以下是各类状态码的详细解释。

2xx 成功响应

状态码含义解释
200OK请求成功,服务器返回了请求的数据。GET 请求通常返回数据,PUT/POST 请求返回更新或创建的数据。
201Created请求成功创建了新资源,通常用于 POST 或 PUT 请求。响应头包含新资源的 URL。
202Accepted请求已接受,但尚未完成处理,通常用于异步任务。
204No Content请求成功,但服务器未返回内容,常用于删除操作或不需返回内容的操作。

3xx 重定向

状态码含义解释
301Moved Permanently资源的 URL 已永久更改,客户端应重定向到新的 URL,响应头包含 Location 字段。
302Found资源的 URL 暂时更改,客户端通常会重定向到响应头中的 Location 字段。
304Not Modified资源未更改,客户端可以使用缓存版本,通常用于浏览器缓存优化。

4xx 客户端错误

状态码含义解释
400Bad Request请求有误,服务器无法处理,通常由于无效的请求参数。错误详情通常在响应体的 errors 字段中返回。
401Unauthorized未经授权,通常是由于缺少或无效的身份认证(如 Token)。
403Forbidden已认证用户无权访问该资源,即使认证通过也无法访问。
404Not Found资源未找到,通常表示客户端请求的 URL 或资源不存在。
405Method Not Allowed请求方法不被允许,例如对只支持 GET 的资源使用了 POST。
422Unprocessable Entity请求格式正确,但语义错误,服务器无法处理。例如,提交了无效的数据格式。

5xx 服务器错误

状态码含义解释
500Internal Server Error服务器内部错误,可能是未知问题或代码异常导致无法完成请求。
502Bad Gateway作为网关或代理的服务器从上游服务器收到无效响应,通常表示服务器之间的通信问题。
503Service Unavailable服务器暂时无法处理请求,通常用于服务器维护或过载。
504Gateway Timeout作为网关或代理的服务器未能在规定时间内从上游服务器获得响应。

状态码使用建议

成功场景

  • 200 OK:用于数据获取(GET 请求)和数据更新(PUT 请求)的成功响应。
  • 201 Created:用于新资源创建成功,POST 或 PUT 请求中常见。
  • 204 No Content:用于不返回数据的请求,例如删除或不需返回内容的请求。

错误场景

  • 400 Bad Request:用于无效参数错误,并返回详细的 errors 信息。
  • 401 Unauthorized:用于身份认证失败。
  • 403 Forbidden:用于权限不足时的响应。
  • 404 Not Found:用于资源不存在的情况,客户端请求的 URL 错误时常见。
  • 422 Unprocessable Entity:用于语义错误或数据校验失败,并可返回具体错误信息。

系统级别问题

  • 500 Internal Server Error502 Bad Gateway503 Service Unavailable:用于服务器内部、网关或资源不可用等问题,通常表明可以稍后重试请求。

示例响应结构

设计响应结构时,可以包含 statuscodemessagedataerrors 等字段,以便前端能快速判断响应结果。

成功响应结构示例
{"status": "success","code": 200,"message": "获取用户信息成功","data": {"user": {"id": 1,"username": "user123","email": "user123@example.com","phone": "12345678901","role": "admin"},"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"errors": []
}
错误响应结构示例
{"status": "error","code": 400,"message": "请求参数错误","data": {},"errors": [{"field": "username","message": "用户名不能为空"},{"field": "password","message": "密码长度必须大于6个字符"}]
}
错误响应格式(带有数据)
  1. 部分成功的数据: 在一些批量操作(如文件上传或数据验证)中,前端可能希望了解哪些请求成功,哪些失败,以便更好地展示处理状态。
  2. 默认值提示: 当输入缺少时,data 可以返回可用的默认值或推荐值。

如果允许在错误情况下返回 data,建议在 errors 中提供尽可能详细的说明,以便前端清楚如何使用 data 中的内容。可以考虑以下格式:

{"code": 400,"message": "请求参数错误,部分数据不可用","data": {"user": {"username": "user123",     // 部分有效数据"email": "user123@example.com"},"defaults": {"role": "guest"             // 默认值或推荐值}},"errors": [{"field": "phone","message": "手机号格式不正确"},{"field": "password","message": "密码长度必须大于6个字符"}]
}

结构设计建议

  • dataerrors 可共存,允许在错误响应中返回部分有效数据及详细错误信息。
  • message 提供简短描述,便于用户理解。
  • code 以 HTTP 状态码的数字形式显示,便于客户端判断请求状态。
  • codestatus 可以考虑合并

这种设计能确保数据结构清晰,便于前后端调试与维护。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解JVM

文章目录 1. JVM内存区域划分2. JVM中类加载过程类加载(1)类加载的基本流程(2)双亲委派模型 《深入理解java虚拟机》 在这本书前,面试官对于JVM也不是很了解。 这本书主要还是写个一下开发 JVM 的人。 1. JVM内存区域…

启动软件是用例吗

沙亚雄 2020-8-13 14:06 潘老师,你好,最近读了您的软件方法,结合自己的项目发现始终有一个疑问?那就是启动软件算不算一个用例,因为软件在启动的时候一般都要实例化一些对象,读一些配置文件等等。那启动软…

Ubuntu22.04中使用CMake配置运行boost库示例程序

Ubuntu22.04中使用CMake配置运行boost库示例程序 boost是一个比较强大的C准标准库,里面有很多值得学习的东西,比较asio网络库可以用来编写C TCP客户端或者TCP服务端接收程序。本文主要讲解如何在Ubuntu22.04中使用Cmake配置boost库,以及运行…

指标+AI+BI:构建数据分析新范式丨2024袋鼠云秋季发布会回顾

10月30日,袋鼠云成功举办了以“AI驱动,数智未来”为主题的2024年秋季发布会。大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程。 作为大会的重要环节之一,袋鼠云数栈产品经理潮汐带来了…

Windows配置NTP时间同步

Windows下实现NTP时间同步 1、Windows时间服务(W32Time)2、Windows 时间同步的工作原理3、配置和管理 Windows 时间同步3.1 命令行工具:w32tm3.2 控制面板中的设置 4. 高级设置(Windows Server 环境)5.调整时间同步的间隔5.1 通过组策略调整时…

系统安全第七次作业题目及答案

一、 1.RBAC0 RBAC1 RBAC2 RBAC3 2.属性 身份标识 3.接入访问控制 资源访问控制 网络端口和节点的访问控制 二、 1.B 2.A 3.ABE 4.BCD 5.ABC 三、 1. 答:基于属性的访问控制(ABAC)是通过对实体属性添加约束策略的方式实现主、客体之…

Golang进阶

1.面向对象 1.1.golang语言面向对象编程说明 Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。Golang 没有类(class),Go 语言的结构体(st…

Node(节点)、Menu(菜单) 和 Tab(标签页)之间的关系

在系统开发中,尤其是在涉及到前端界面设计和后台管理系统时,我们经常会看到 Node(节点)、Menu(菜单) 和 Tab(标签页) 这几个概念。这些概念有不同的用途和功能,理解它们之…

Python数据分析案例64——杭帮菜美食探索数据分析可视化

案例背景 杭州是真没啥美食呀.....但是 总是还是有好吃的店家,于是就发挥专业长处,进行一下分析,看看杭帮菜的一些特点。。例如看看品种分布啊,类型分布啊,行政区的分布啊,店铺评分的一些分布啊&#xff0…

基于SSD模型的路面坑洼检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 基于SSD模型的路面坑洼检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili (一)简介 基于SSD模型的路面坑洼检测系统是在 Py…

《Python编程实训快速上手》第四天--字符串操作

一、处理字符串 1、单引号和双引号 Python中单双引号均可以表示字符串,区别在于: 1、双引号中可以使用到单引号 2、单引号字符串中如果要使用单引号,要使用到转义字符 \ \ \t \n \\ 原始字符串 在开始的引号前加r&#xf…

泷羽sec学习打卡-Windows基础命令

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于windows的那些事儿-Base 一、Windows-BaseWindows有哪些版本呢,有什么区别呢&#xff1f…

Node.js——fs模块-文件夹操作

1、借助Node.js的能力,我们可以对文件夹进行创建、读取、删除等操作 2、方法 方法 说明 mkdir/mkdirSync 创建文件夹 readdir/readdirSync 读取文件夹 rmdir/rmdirSync 删除文件夹 3、语法 其余的方法语法类似 本文的分享到此结束,欢迎大家评论区…

VMware Fusion和centos 8的安装

资源 本文用到的文件:centos8镜像 , VMware 软件包 , Termius 文件链接: https://pan.baidu.com/s/1kOES_ZJ8NGN-BnJl6NC7Sg?pwd63ct 安装虚拟机 先 安装 vmware ,然后打开,将下载的 iso 镜像拖入 拖入镜像文件iso Continue, 然后随便选…

【嵌入式开发——ARM】1ARM架构

嵌入式领域,使用ARM架构的芯片公司可不占少数吧,intel的x86架构主要占据PC、服务器市场,ARM架构主要占据移动市场。x86架构和ARM架构不同的主要原因,是背后使用的计算机指令集不同。计算机有自己的语言系统(汇编&#…

LabVIEW扫描探针显微镜系统

开发了一套基于LabVIEW软件开发的扫描探针显微镜系统。该系统专为微观尺度材料的热性能测量而设计,特别适用于纳米材料如石墨烯、碳纳米管等的研究。系统通过LabVIEW编程实现高精度的表面形貌和热性能测量,广泛应用于科研和工业领域。 项目背景 随着纳…

JavaScript day01 笔记

一、引入方式 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中 1️⃣内部 通过 script 标签包裹 JavaScript 代码&#xff08;一般就写在</script>的…

【Git】Liunx环境下Git的使用:“克隆,提交,推送“

目录 一、常用参数 二、我们为什么要使用Git&#xff1f; 三、创建远程仓库 第一步&#xff1a;创建对应代码托管平台账号。 第二步&#xff1a;在托管平台创建仓库 第三步&#xff1a;完善仓库内容&#xff08;选择性使用&#xff09; 开源和私有 四、克隆远程仓库到本…

机器人零位、工作空间、坐标系及其变换,以UR5e机器人为例

机器人中的主要坐标系 在机器人中&#xff0c;常用的坐标系包括&#xff1a; 基坐标系&#xff08;Base Frame&#xff09;&#xff1a;固定在机器人基座上的坐标系&#xff0c;用于描述机器人的整体位置和方向&#xff0c;是其他所有坐标系的参考点。 连杆坐标系&#xff08…

JavaSE:运算符 (学习笔记)

目录 一&#xff0c;算术运算符 【1】 共同点&#xff1a; 【2】 不同点&#xff1a; 二&#xff0c;关系运算符 三&#xff0c;逻辑运算符 2&#xff0c;&和&&的区别和联系 { |和||的区别和联系 }---两题类似 四&#xff0c;赋值运算符 五&#xff0c;拓展…