首页
学习
活动
专区
圈层
工具
发布

FastAPI HTTP 状态码与请求异常处理避坑全解:从 404 到 500,4 种自定义异常方式全演示

在 API 接口开发的入门阶段,很多开发者会忽略 HTTP 状态码和请求异常处理,比如查询用户不存在时返回 200+{data:null},或者遇到数据库连接失败时直接抛出默认的 500 Internal...; 4xx(客户端错误状态码):表示客户端发送的请求有错误; 5xx(服务器错误状态码):表示服务器在处理请求时出现错误。...请求已成功处理,创建了新的资源 400 客户端错误 Bad Request 请求参数有错误,如缺少必填参数、参数类型错误、参数格式错误 401 客户端错误 Unauthorized 用户未登录或登录状态已过期...403 客户端错误 Forbidden 用户已登录,但无权限访问该资源 404 客户端错误 Not Found 请求的资源不存在 500 服务器错误 Internal Server Error 服务器在处理请求时出现错误...问题:使用错误的 HTTP 状态码,如查询用户不存在时返回 400 而不是 404。

23010

REST API 最佳实践

因为 API 在这种客户端-服务器通信中起着至关重要的作用,所以我们在设计 API 时应该始终考虑到最佳实践。这有助于维护它们的开发人员和那些使用它们的人,在履行职责时不会遇到问题。...param1=23¶m2=432 在这种情况下,API响应不会返回任何资源。而是执行一个操作并将结果返回给客户端。因此,您应该在URL中使用动词而不是名词,来清楚的区分资源请求和非资源请求。...此外,搜索引擎也更喜欢使用连字符来分隔单词,使用连字符分隔单词,它们让搜索引擎更准确地理解 URL 中的单词和短语,这样搜索引擎就可以索引单个单词,有助于 SEO,很容易检索到这个 URL,排名靠前。...如一个使用连字符的 REST API URL 可能如下所示: https://api.example.com/users/john-doe 而使用下划线的 URL 则可能如下所示: https://api.example.com...表示永久移动 4XX 客户端错误,如 400 表示错误的请求,404 表示未找到资源 5XX 服务器端错误,如 500 表示内部服务器错误 13.提供有用的错误消息 除了提供恰当的HTTP状态代码外

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    什么是RESTful,REST api设计时应该遵守什么样的规则?

    如何使用REST API?HTTP 动词REST API 通过各种 HTTP 请求方法,使前端与服务器的通信过程更容易,最常用的方法是:GET : 用于读取服务器上的数据。POST : 用于创建数据。.../v1/users/15、URL分页分页可以轻松处理大量请求结果,例如,Web 服务包含数百或数千个页面,当请求显示其所有页面时,将获得相同数量的结果作为回应。...limit=106、使用连字符增加可读性最好用连字符-,而不是_或者驼峰,在所有 RESTful API 中,连字符等同于空格。...,使用小写字母将确保命令的正确性,即使 URL 是用大写字母输入的,但反之则不然:比如上面第6个url最好不要写成:https://www.wljslmz.cn/v1/users/1/Start-Sork...400:错误请求(客户端应修改请求)401:未经授权,凭据无法识别403:禁止,凭据接受但没有权限404:未找到,资源不存在410:消失了,资源以前存在但现在不存在429:请求过多,用于速率限制,应包含重试标头

    1.5K30

    探索RESTful API开发,构建可扩展的Web服务

    介绍当我们浏览网页、使用手机应用或与各种互联网服务交互时,我们经常听到一个术语:“RESTful API”。它听起来很高深,但实际上,它是构建现代网络应用程序所不可或缺的基础。...同样,RESTful API也有一些设计原则:统一接口: API应该具有统一的接口,使其易于理解和使用。状态无关性: 客户端和服务器之间的交互不应该包含关于请求的状态信息。每个请求应该是完全独立的。...资源导向: API应该基于资源进行操作,而不是行为。资源可以是任何东西,如用户、产品或订单。自描述性: API响应应该包含足够的信息,以便客户端能够理解如何使用该响应。...如果查询返回了结果,我们提取资源信息并将其编码为JSON格式返回给客户端。如果未找到资源,我们返回404错误响应。实现POST请求实现POST请求时,我们的目标是在服务器上创建新资源。...将JWT包含在每个请求中: 客户端在发送请求时,将JWT包含在请求的Authorization头部中。服务器可以解码JWT并验证用户的身份。

    1.9K00

    Python使用HTTP来循环抓取数据

    现在需要帮助客户了解如何使用Python的requests库发送HTTP请求。首先,我得回忆一下requests库的基本用法,可能客户是刚开始学习这个库,所以需要从安装开始讲起。首先,安装部分。...还可以提到检查状态码是否成功,比如response.raise_for_status()方法,这样可以在出错时抛出异常。错误处理也是关键。...比如网络问题、超时或者无效的URL,这时候requests会抛出异常,比如ConnectionError、Timeout等。应该建议客户使用try-except块来捕获这些异常,并给出示例代码。...超时可以防止请求挂起太长时间。SSL验证有时在测试环境需要禁用,但生产环境不建议。具体案例实操以下是使用Python的requests库发送HTTP请求的详细指南,包含基础到进阶的用法:1....else: print(f"请求失败,状态码:{response.status_code}")# 更简洁的方式(失败时抛出异常):response.raise_for_status() # 状态码非

    73510

    Python 工匠: 异常处理的三个好习惯

    继续阅读前,我希望你已经了解了下面这些知识点: 1.异常的基本语法与用法 2.为什么要使用异常代替错误返回 3.为什么在写 Python 时鼓励使用异常 只做精准的异常捕获 假如你不够了解异常机制,就难免会对它有一种天然恐惧感...如果你也有过开发后端 API 的经验,那么你一定知道,这样的系统都需要制定一套“API 错误码规范”,来为客户端处理调用错误时提供方便。...最初编写 process_image 时,我虽然把它放在了 util.image 模块里,但当时调这个函数的地方就只有 “处理用户上传图片的 POST 请求” 而已。...如果你用过 requests 模块,你可能已经发现它请求页面出错时所抛出的异常,并不是它在底层所使用的 urllib3 模块的原始异常,而是通过 requests.exceptions 包装过一次的异常...最后再总结一下要点: 1.只捕获可能会抛出异常的语句,避免含糊的捕获逻辑 2.保持模块异常类的抽象一致性,必要时对底层异常类进行包装 3.使用“上下文管理器”可以简化重复的异常处理逻辑   -python

    1K40

    【译】构建RESTful API的13种最佳实践

    从理论上讲,任何人都可以在不到五分钟的时间内快速启动数据 API——无论是 Node.js,Golang 还是 Python。 我们将探讨在构建 RESTful API 时应考虑的 13 种最佳实践。...客户端-服务器模型:RESTful API 遵循客户端-服务器模型,其中服务器为数据提供服务,而客户端连接到服务器以使用数据。...因此,你将调用以下端点:GET api.com/authors。 当你读取请求时,你无法判断 API 响应是否只包含一个或所有作者。因此,API 端点应该使用复数资源。...400(Bad Request):代表客户端错误。也就是说,请求的格式不正确或缺少请求参数。 401(Unauthorized):未授权,你尝试访问你没有权限的资源。...通常,API 的版本号包含在 API URL 中,例如:api.com/v1/authors/3/books。 8.通过 HTTP 标头发送元数据 HTTP 标头允许客户端随其请求发送其他信息。

    2.4K10

    第二章 你第首个Electron应用 | Electron in Action(中译)

    在传统的基于浏览器的应用程序中,不允许客户端代码向其他服务器发出请求。通常,客户端代码向服务器发出请求,然后将请求代理给第三方服务器。当它返回时,它将响应代理回客户机。...列表2.17 使用Fetch API请求远程资源....我们将处理两种最可能的情况:当用户提供一个URL,该URL通过了输入字段的验证检查,但实际上并不有效;当URL有效,但服务器返回400或500级错误时。 我们添加的第一件事是处理任何错误的能力。...我们使用另一个匿名函数传递带有错误消息的URL。这主要是为了提供更好的错误消息。如果不希望在错误消息中包含URL,则没有必要这样做。 图2.32 在获取、解析和呈现链接时捕获错误: ....如果是,它将请求传递给处理链中的下一个操作。如果没有成功,那么我们将抛出一个错误,这将绕过处理链中的其余操作,并直接跳到handleError()步骤。

    5.7K30

    架构必备「RESTful API」设计技巧经验总结

    这样的错误。 使用复数形式 当你从/posts请求多个帖子的时候,这样的URL看起来更明了: ? 更多有关混合类型的信息,请看下文:“使用根级别的‘me’端点(URL)”。...使用HTTP状态码和错误响应 因为我们使用了HTTP方法,所以我们应当使用HTTP状态码。 我喜欢使用这些状态码: 对于数据错误 400:请求信息不完整或无法解析。...422:请求信息完整,但无效。 404:资源不存在。 409:资源冲突。 对于鉴权错误 401:访问令牌没有提供,或者无效。 403:访问令牌有效,但没有权限。...我们希望让客户端应用程序能够阻止任何无效的电子邮件或密码太短的请求,但外部人员可以像我们的客户端应用程序一样在需要的时候直接访问API。 如果email字段丢失,则返回400。...尝试从客户端创建请求时,JWT已经过期。 2. 将刷新令牌提交到/renew。 3. 通过将刷新令牌进行哈希与数据库中保存的进行匹配。 4. 成功后,创建新的JWT访问令牌并延长到期时间。 5.

    2.6K30

    已解决:SSLException: Unrecognized SSL message, plaintext connection

    当客户端期望建立一个SSL连接,而服务器发送的却是一个非SSL(明文)的响应时,便会抛出此异常。这种情况常见于以下场景: 客户端错误地通过非SSL端口尝试建立SSL连接。...// 尝试通过HTTPS连接到服务器 URL url = new URL("https://example.com/api"); HttpsURLConnection conn = (HttpsURLConnection...三、错误代码示例 以下是一个可能导致该异常的错误代码示例: public void connectToServer() { try { // 错误:使用https协议,但端口为非...e.printStackTrace(); } } 错误分析: 代码中使用了https协议,但连接的却是80端口(通常用于HTTP)。...端口配置:SSL/TLS通常使用443端口,确保在连接时使用正确的端口号。 服务器配置:确保服务器正确配置了SSL证书,并能够响应SSL/TLS请求。

    2K10

    微服务 day17:基于Zuul网关实现路由转发、过滤器

    修改申请令牌的程序解析返回的错误: 由于 restTemplate 收到400或401的错误会抛出异常,而 spring security 针对账号不存在及密码错误会返回 400 及 401,所以在代码中控制针对...400 或 401 的响应不要抛出异常。...客户端请求网关 /api/learning,通过路由转发到 /learning 客户端请求网关 /api/course,通过路由转发到 /course 路由配置 在 appcation.yml...打算使用课程图片信息获取的 API 进行测试我,这里的课程图片信息获取的URL为 /course/coursepic/get ,所以由于课程管理已经添加了授课拦截,这里为了测试网关功能暂时将 url /...error:处理请求时发生错误调用 filterOrder:此方法返回整型数值,通过此数值来定义过滤器的执行顺序,数字越小优先级越高。

    4.4K20

    Flask 学习-45.Flask-RESTX 自定义参数校验和自定义错误内容 error_msg 使用

    :{args}') 请求示例,sex不是可选项的时候会报400 POST http://127.0.0.1:5000/api/v1/register HTTP/1.1 User-Agent: Fiddler...当您有可能需要一些时间来处理的论点时,这可能会很有用。 但是,通常最好将错误捆绑在一起并一次性发送回客户端。可以在 Flask 应用程序级别或特定的 RequestParser 实例上指定此行为。...inputs 匹配入参 flask_restful.inputs 常用的一些数据校验 url: 会判断这个参数的值是否是一个url,如果不是,那么就会抛出异常。 regex: 正则表达式。...help: 错误信息。 如果验证失败后,将会使用这个参数指定的值作为错误信息。 trim: 是否要去掉前后的空格。...type: 可以使用python自带的一些数据类型(如str或者int),也可以自定义类型 2022年第 12期《python接口web自动化+测试开发》课程,9月17号开学!

    1.6K40

    flask 应用程序编程接口(API)最后一节

    分级系统 分级系统原则是说当客户端需要与服务器通信时,它可能最终连接到代理服务器而不是实际的服务器。...jsonify()函数返回一个默认状态码为200的瓶Response对象,因此在创建响应之后,我将状态码设置为对应的错误代码。 API将返回的最常见错误将是代码400,代表了“错误的请求”。...当客户端想要开始与API交互时,它需要使用用户名和密码进行验证,然后获得一个临时令牌。只要令牌有效,客户端就可以发送附带token的API请求以通过认证。一旦令牌到期,需要请求新的令牌。...带令牌的请求 当你编写一个API时,你必须考虑到你的客户端并不总是要连接到Web应用程序的Web浏览器。...pC1Nu9wwyNt8VCj1trWilFdFI276AcbS" API友好的错误消息 你是否还记得,在本章的前部分,当我要求你用一个无效的用户URL从浏览器发送一个API请求时发生了什么?

    6.2K10

    Python 工匠:异常处理的三个好习惯

    异常处理工作由“捕获”和“抛出”两部分组成。“捕获”指的是使用 try ... except 包裹特定语句,妥当的完成错误流程处理。...为什么在写 Python 时鼓励使用异常 (建议阅读 “Write Cleaner Python: Use Exceptions”) 三个好习惯 1....如果你也有过开发后端 API 的经验,那么你一定知道,这样的系统都需要制定一套“API 错误码规范”,来为客户端处理调用错误时提供方便。...最初编写process_image时,我虽然把它放在了 util.image模块里,但当时调这个函数的地方就只有 “处理用户上传图片的 POST 请求” 而已。...如果你用过 requests 模块,你可能已经发现它请求页面出错时所抛出的异常,并不是它在底层所使用的 urllib3 模块的原始异常,而是通过 requests.exceptions 包装过一次的异常

    82140

    Python 工匠: 异常处理的三个好习惯

    异常处理工作由“捕获”和“抛出”两部分组成。“捕获”指的是使用 try...except 包裹特定语句,妥当的完成错误流程处理。...为什么在写 Python 时鼓励使用异常 (建议阅读 “Write Cleaner Python: Use Exceptions”) 三个好习惯 1....如果你也有过开发后端 API 的经验,那么你一定知道,这样的系统都需要制定一套“API 错误码规范”,来为客户端处理调用错误时提供方便。...最初编写 process_image 时,我虽然把它放在了 util.image 模块里,但当时调这个函数的地方就只有 “处理用户上传图片的 POST 请求” 而已。...如果你用过 requests 模块,你可能已经发现它请求页面出错时所抛出的异常,并不是它在底层所使用的 urllib3 模块的原始异常,而是通过 requests.exceptions 包装过一次的异常

    1.1K30

    HTTP状态码详解:从400到504的故障排查指南

    客户端错误(4xx) 2.1 400 Bad Request 含义:服务器无法理解客户端的请求,通常由于语法错误或参数问题。 常见原因: 请求参数缺失或格式错误(如JSON语法错误)。...请求头Content-Type不匹配(如需要application/json但发送了text/plain)。 URL包含非法字符(如未转义的空格)。...使用工具(如Postman)验证请求格式。 对URL特殊字符进行编码(如encodeURIComponent)。 2.2 404 Not Found 含义:请求的资源不存在。...总结与最佳实践 4.1 状态码速查表 状态码 类型 含义 典型场景 400 客户端错误 请求语法错误 参数缺失、JSON格式错误 404 客户端错误 资源不存在 URL拼写错误 406 客户端错误 响应格式不匹配...无论是客户端参数错误(400)、资源不存在(404),还是服务端崩溃(500)、网关超时(504),本文提供的解决方案和代码示例都能为你提供参考。下次遇到问题时,不妨对照排查,或许能事半功倍!

    1.5K10

    http状态码一览表

    302——在其他地址发现了请求数据 303——建议客户访问其他URL或访问方式 304——客户端已经执行了GET,但文件未变化 305——请求的资源必须从服务器指定的地址得到 306——前一版本HTTP...中使用的代码,现行版本中不再使用 307——申明请求的资源临时性删除 400——错误请求,如语法错误 401——请求授权失败 402——保留有效ChargeTo头响应 403——请求不允许 404——...400-499 用于指出客户端的错误。 500-599 用于支持服务器错误。 HttpServletResponse 中的常量代表关联不同标准消息的状态码。...浏览器会自动连接到新的URL。 302 (Found/找到) 与 301有些类似,只是定位头信息中所给的URL应被理解为临时交换地址而不是永久的。...400 (Bad Request/错误请求) 400 (SC_BAD_REQUEST)指出客户端请求中的语法错误。

    1.9K70

    三个好习惯,帮你写好Python里的异常处理

    异常处理工作由“捕获”和“抛出”两部分组成。“捕获”指的是使用 try...except 包裹特定语句,妥当的完成错误流程处理。...为什么在写 Python 时鼓励使用异常 (建议阅读 “Write Cleaner Python: Use Exceptions”) 三个好习惯 1....如果你也有过开发后端 API 的经验,那么你一定知道,这样的系统都需要制定一套“API 错误码规范”,来为客户端处理调用错误时提供方便。...最初编写 process_image 时,我虽然把它放在了 util.image 模块里,但当时调这个函数的地方就只有 “处理用户上传图片的 POST 请求” 而已。...如果你用过 requests 模块,你可能已经发现它请求页面出错时所抛出的异常,并不是它在底层所使用的 urllib3 模块的原始异常,而是通过 requests.exceptions 包装过一次的异常

    1.5K20
    领券