RESTful API中的异常Exception处理有两个基本要求,需要明确业务意义的错误消息以及hhtp状态码。良好的错误消息能够让API客户端纠正问题。...在本文中,我们将讨论并实现Spring的REST API异常处理。.../producer" } 对于我们的业务应用,应该提供更详细的有关业务的错误信息 HTTP/1.1 404 Content-Type: application/json { "status":...2. error_code表示REST API特定的错误代码。此字段有助于传递API /业务领域中特定信息。比如类似Oracle错误ORA-12345 3. message字段表示人类可读的错误消息。...5. information_link字段指定有关错误或异常的详细信息的链接。 Spring REST错误处理 Spring和Spring Boot提供了许多错误/异常处理选项。
但是,我也曾遇到过一些让 REST 蒙羞的 API 例子,错误使用 HTTP 状态码、纯文本响应、不一致的模式、插入端点中动词......你的API最糟糕的事情莫过于返回一个带有200 OK状态码的错误响应。 这是最差的语义,相反,应该返回一个能准确描述错误类型的有意义HTTP状态码。...例如,如果你选择某个POST端点返回201 Created,那么对于每个POST端点都应使用相同的HTTP状态码。为什么?因为消费者不应该担心在哪种情况下哪个方法在哪个端点上会返回哪个状态码。...了解401未授权和403禁止之间的区别 如果我每看到一次开发人员甚至有经验的架构师搞砸这个问题就能得到一个25美分硬币……在处理REST API中的安全错误时,很容易弄混错误是与身份验证还是授权(又称权限...我强烈建议您试一试这些框架,它们将帮助您构建美观、优雅且设计精良的REST API。 结束语 我们都应该努力使API变得易于使用。无论是对于消费者,还是我们自己的开发人员同伴。
内容协商将主要基于Accept头来选择使用哪个可用的转换器,但是也可以使用其他HTTP头来确定资源特定格式的表述。 6....客户端错误 在客户端错误的情况下,自定义异常被定义并映射到适当的错误代码。 简单地从Web层的任何位置抛出这些异常,将确保Spring将相应的状态代码映射到HTTP响应上。...REST API的一部分,因此应该只在对应于REST的适当层中使用;例如,如果存在DAO/DAL层,则不应该直接使用上面的自定义异常。...api.version> 这些库用于将REST资源的表述转换为JSON或XML。...在本系列的下一篇文章中,我将重点讨论 API的可发现性、高级内容协商以及其它的处理和传输资源状态的方式。 这篇文章的所有代码都可以在Github上找到。
文章目录 一、DRF框架自带异常 二、自定义异常 一、DRF框架自带异常 REST 框架的视图处理各种异常,并处理返回适当的错误响应。 处理的异常包括: 在 REST 框架中定义的异常。...detail 例如,以下请求: DELETE http://api.example.com/foo/bar HTTP/1.1 Accept: application/json 可能会收到一个错误响应,指示该资源上不允许使用该方法...二、自定义异常 您可以通过创建一个处理程序函数来实现自定义异常处理,该函数将 API 视图中引发的异常转换为响应对象。这允许您控制 API 使用的错误响应样式。...如果处理程序返回,则将重新引发异常,Django将返回标准的HTTP 500“服务器错误”响应。...' } 请注意,将仅对引发的异常生成的响应调用异常处理程序。
比如: %X{X-REST-API:-},%X{X-RPC-SERVICE:-},%X{X-ORIGIN-INFO:-},%X{X-USER-ID:-},%X{X-BIZ-NAME:-},%X{X-BIZ-ID...:-} X-REST-API:入口 API, 全局透传 X-RPC-SERVICE:入口 RPC, 每个服务入口处新增 X-ORIGIN-INFO:来源信息(调用方应用名:IP:服务名) X-USER-ID...如果我是订单服务的负责人,当我去排查问题的时候根据日志就知道当前这个错误是上游哪个系统和哪个接口调用导致的。 日志中还带上了用户信息,知道是哪个用户的请求。...异常告警 除了用户反馈功能异常,开发也应该在第一时间知道出问题了。所以异常告警一定要做。...除了快速排查异常问题之外,对于性能优化的时候,我们也可以直接根据 traceId 去查看这个 API 对应的耗时情况,前提是这个 traceId 就是跟你们的 APM 系统一致就行。
区别与其他架构风格的最本质属性 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture) Django...api.example.com/v1/ 请求头 跨域时,引发发送多次请求 路径,视网络上任何东西都是资源,均使用名词表示(可复数) https://api.example.com/v1/zoos https...sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序 https://api.example.com/v1/zoos?...{ error: "Invalid API key" } 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范 GET /collection:返回资源对象的列表(数组) GET /collection...,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
区别与其他架构风格的最本质属性 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture) RESTful...API很简单 版本 URL,如:https://api.example.com/v1/ 放到请求头中 跨域时,引发发送多次请求...sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序 https://api.example.com/v1/zoos?...{ error: "Invalid API key" } 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。...,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
列出对于构建 Python 库 API 有用的建议清单。 简洁性 在 README 文件中写入简单的客户端代码。...- 检查 API 中是否包含了不应该有的东西,牢记,要小心所谓的“抽象漏洞定理”( The Law of Leaky Abstractions)。...- 将底层实现中常见的错误进行封装,避免给用户直接报错。例如当 API 支持多个数据引擎的时候,出现数据库连接错误时,其显示信息应该一样。...不要在 if isinstance(duck, LibDuck) 或者 if type(duck) == LibDuck) 这样的语句中引发异常。...首先尝试使用 quack,如果错误则引发 TypeError 异常,并打印明确的错误信息。 总结 我的 API 旨在将简单的事情变的简洁,将复杂的事情变为现实,将错误的事情永远杜绝。
- 检查 API 中是否包含了不应该有的东西,牢记,要小心所谓的“抽象漏洞定理”( The Law of Leaky Abstractions)。...例如在 Djando 的 REST 框架中, CursorPagination 这个类仅仅支持一个固定大小的属性值:page_size,其原因就是这个类没有 get_page_size 这个方法。...- 将底层实现中常见的错误进行封装,避免给用户直接报错。例如当 API 支持多个数据引擎的时候,出现数据库连接错误时,其显示信息应该一样。...不要在 if isinstance(duck, LibDuck) 或者 if type(duck) == LibDuck) 这样的语句中引发异常。...首先尝试使用 quack,如果错误则引发 TypeError 异常,并打印明确的错误信息。 总结 我的 API 旨在将简单的事情变的简洁,将复杂的事情变为现实,将错误的事情永远杜绝。
注意: 如果客户端发送格式错误的内容,则访问 request.data 可能会引发 ParseError 。...默认情况下, REST framework 的 APIView 类或者 @api_view 装饰器将捕获错误并返回 400 Bad Request 响应。...如果客户端发送的请求内容无法解析(不同于格式错误),则会引发 UnsupportedMediaType 异常,默认情况下会被捕获并返回 415 Unsupported Media Type 响应。...注意:调用 .user 或 .auth 属性时可能会引发 WrappedAttributeError 异常。...除非由于某种原因需要大幅度定制 REST framework ,否则应该始终对返回 Response 对象的视图使用 APIView 类或 @api_view 装饰器。
概览 本文将举例说明如何使用Spring来实现REST API的异常处理。我们将同时考虑Spring 3.2和4.x推荐的解决方案,同时也会考虑以前的解决方案。...它还允许我们在REST API中实现统一的异常处理机制。 在使用自定义解析器之前,让我们回顾一下现有的异常解析器。 3.1....对于REST API来说,状态码实际上并没有足够的信息显示给客户端——响应也必须有一个响应体,以便服务器能够提供更多关于故障的信息。...对于Spring REST服务的异常处理来说,这种方法是一种一致且易于配置的机制。...总结 本教程讨论了在Spring中实现REST API异常处理机制的几种方法,从旧的机制开始,然后是Spring 3.2中的,最后是4.x和5.x中的。
关于异常:有哪些异常类型,各自会在什么场景抛出 接下来逐个去看 命名空间 在REST API文档中,数量众多API是按照特性(feature)来分组的,如下图 在ES的Java库Java API...之下,然后再通过下一级package进行分类,这个分类与上图的feature相对应,例如索引相关的,在REST API中的feature是Index APIs,那么在Java API Client中,完整的...集合不会为空 对于单值属性,我们在使用的时候判断是否为空是个常规操作,这样是为了避免直接使用时可能出现的空指针异常 而对于集合,Java API Client 已经确保了API返回的集合非空,我们只需要检查集合中是否有内容...在Java API Client中一共有两大类异常 第一类是由es服务端返回的错误引发的,例如es服务端的校验未通过,或者es服务端自己内部出现异常等,这些情况下抛出的异常是ElasticsearchException...第二类是因为请求未能成功到达es服务端而引发的,例如网络故障,es服务不可用等,这些情况下抛出的异常是TransportException,这些是lower-level implementation抛出的
简要介绍下各工程: Account:net core Web API类型,为前端提供Rest服务 Account.Common:公共工程,与具体业务无关,目前里边仅仅有两个类,自定义业务异常类及错误码枚举类...这里允许http://localhost:65062(我的前端站点)、任意标头、任意请求方式 6、异常处理 按照个人以前惯例,异常处理采用异常过滤器,这里也不意外, 过滤器定义如下: public...,如果是由我们业务代码主动引发的业务级别异常,也就是类型为自定义BusinessException,则直接设置相应json结果状态码及 错误信息为我们引发异常时定义的状态码及错误信息;如果是框架或数据库操作失败引发的...,被动式的异常,这种错误信息不应该暴露给前端,而且,这种服务器内部处理出错,理应统一设置状态码为500,还需要记录异常堆栈,如上的else分支所做。 ...1)路由 基于WebAPI或者说Rest的路由,我一向倾向于用特性路由,而非MVC默认路由,因为更灵活,也更容易符合Rest模式。来看具体控制器: ?
使用 GraphQL,我们可以获得字段级的检测,并清楚了解哪个解析器花了多长时间、常见错误以及调用了哪些字段。这个字段级检测有助于智能地弃用不再使用的字段。...API 探索:我们花了很长时间浏览 API 文档,并弄清楚特定字段使用哪个端点。一旦我们有了一个端点,我们就会复制 URL 并在 Postman 中进行尝试。...这引发了整个 PayPal 的兴趣,团队开始开发在他们的应用程序中使用 GraphQL 的示例程序。 这是新的吸引人的事情。...对于核心平台 API 团队,我们还没有完全说服他们。当我们介绍 GraphQL 概念时,有时我们被告知 REST 也可以这样做。...非常感谢 Mark Stuart 在 PayPal 中领导 GraphQL 的采用,激励我分享我的 GraphQL 经验,并激励我们的开发者社区。
(方便事后排查) 如果程序报错了,我们应该尽可能的隐藏后台的错误,返回给前台就是服务器错误(你返回给用户用户也看不懂呀,如果是黑客,那可能还会利用报错袭击服务器) 常见的几种异常情况 像这种就比较可怕了...,None 需要自己处理 可以根据 exc 的类型再细化处理 if isinstance(exc, '哪个异常'): # 再怎么处理 api/exception.py 记得自己把报错信息记到日志里面去...object at 0x000001FED2CD9EF0> # 这里后期应该写成系统日志才对(这只是演示的伪代码) print('%s - %s -...'api.apps.ApiConfig', 'rest_framework', # 注册 drf ] # 2.在 restframework 的配置中配置该自定义异常模块 REST_FRAMEWORK...'EXCEPTION_HANDLER': 'api.exception.exception_handler', # 全局配置异常模块 }
本文将介绍在使用Spring Boot构建REST API的时候如何进行合适的错误处理。 ? 在过去几年里,使用Spring构建REST API已经成为Java开发人员的标准方法。...如果你对如何开发基本的REST API并不熟悉,那么你应该先阅读这篇关于Spring MVC的文章或另一篇有关构建Spring REST服务的文章。...让错误响应更清晰 在本文中,我们将实现一个通过REST API来检索鸟类(代表一个对象)的应用程序,代码托管在GitHub上。这个示例包含了本文描述的所有功能,以及比较多的错误处理场景。...这里另外还有一些资源,可对本文起到补充作用: Baeldung - 使用Spring对REST进行错误处理 Spring Blog - Spring MVC中的异常处理 了解基础知识 为什么API应有一个统一的错误格式...附录 译文来源:Spring Boot REST API错误处理指南-csdn
REST 前后端分离 API-ApplicationProgrammingInterface 为了应付千变万化的前端需求 REST:RepresataionsStateTrans 20000 Fieding...博士提出 RESTful:遵守REST规范的技术设计的软件可以称为RESTful REST规范 URL代表一个资源,一个资源应该是一个名词 动作有HTTP的methode方法提供 URL应该包含版本信息...None, data=empty, **kwarg) 反序列化 验证 is_valid: 验证数据是否合法,返回boolean 在使用从外部传入的数据之前,必须使用此函数进行验证 如果验证失败,返回数据错误异常...', # json渲染器 'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器...的请求和反馈类会引发并处理APIException在dispatch之前,会进行身份验证,权限检查,流量控制支持的属性有authentication_classes: 列表或者元祖,身份验证类 permisson_classes
那么我们应该如何用springmvc产出更符合restful的错误信息呢? restful异常处理设计 若有异常发生,rest建议我们通过设置HTTP状态码的方式大体地区分失败的原因。...大多数rest API设计者认为,尽可能地重用HTTP规范定义的状态码是最好的,因为许许多多的http客户端都能理解这些错误情况的绝大多数,并且,“重用”这件事鼓励行为的一致性,这对开发有好处。...下面的例子是我觉得比较好的rest错误情况表述(例子是json格式的。xml的类似): {"status": 404,"code": 40483,"message": "Oops!...我认为在使用http客户端时,处理响应的流程如下: 要捕获住所使用的http客户端组件声明的所有异常。...若是从业务维度来细分错误码,我认为是可行的,但这里是从一个非业务维度细分,值得商榷(作者至少应该拿出更好的例子来)。
最近开发学习中用到了REST API,处于懵懂,此REST,非彼rest,不是我们理解的含义,这是一种缩写,REpresentational State Transfer,再具体一些就是Resource...学习REST,必须动手实践,用起来才能慢慢体会,否则只能停留于理论,但是基础的理论学习,还是必须,我主要是参考了,阮一峰老师的《RESTful API 设计指南》,概括精辟,没有任何废话,总结引用于此,...https://example.org/api/ 应该将API的版本号放入URL。...sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。 ?...REST,可能会有一个感性的认识,对于任何一门技术来说,实践都是最重要的方法,动起手来,体会一下,理解就会不同,欢迎朋友们互相交流。
1、什么时候使用异常 异常对于处理程序的异常情况很有用,但是,并不是所有错误情况的解决方案。有时,返回布尔值FALSE很好。有时,抛出异常比返回奇怪的错误代码要好得多。...让我们看一些具体的例子: 如果创建将用户输入保存到数据库的功能,则当数据库连接失败时,应引发异常。 对于相同的功能,你将创建一个验证器以检查用户的输入。提供无效值时,不应引发异常。...Exception提供了各种API,可以轻松地跟踪异常的来源。...引发自定义异常允许客户端代码以公认的方式处理错误情况。...对于错误情况,我们应该始终抛出最准确的异常。不可避免地,一个异常可能适合多个异常,在这种情况下,可以选择一个异常。 有意义的异常消息对可维护项目大有帮助。 ?
领取专属 10元无门槛券
手把手带您无忧上云