REST API出错响应的设计(转)

REST API应用很多,一方面提供公共API的平台越来越多,比如微博、微信等;一方面移动应用盛行,为Web端、Android端、IOS端、PC端,搭建一个统一的后台,以REST API的形式提供服务,也成为常见的开发模式。只是一个服务做得久了,就发现API的接口设计,如果能在一开始就好好设计一下,实在是功德无量的事。讨论API接口设计的文章已有不少,本文重点谈一谈当请求处理出现异常的时候,出错响应的内容和格式的设计。

比较自然的想法是,当有错误发生时,在响应中设置恰当的HTTP Status Code来指明这次请求是因为什么出错的。因为HTTP协议的标准性,绝大多数客户端可以理解收到的HTTP状态码,从而带来一致的体验。

但是,HTTP协议不可能定义出所有的出错可能,满足各种各样的服务的需求。事实上,用来表示请求出错的HTTP状态码只有24个,其中有18个4xx状态码用来表示客户端错误,6个5xx妆台码用来表示服务端错误。作为API的提供者,我们当然希望能够尽可能的规范我们的出错信息,提供更多的信息给调用者。因为API使用起来越是方便简单,客户就越有可能继续使用我们提供的服务,同时,当出现问题需要排查的时候,我们的工作也更加容易。

下面这个出错返回,列出了我认为错误信息里应当包含的内容。

{
    "status": 404,
    "code": 40483,
    "message": "Oops! It looks like that file does not exist.",
    "developerMessage": "File resource for path /uploads/foobar.txt does not exist.  Please wait 10 minutes until the upload batch completes before checking again.",
    "moreInfo": "http://www.mycompany.com/errors/40483",
    "requestId": "x3kdsa32k23ds32e"
}

status

Status的内容与HTTP状态码内容相同,这个字段的存在,使得错误信息自包含,客户端只需要解析HTTP响应的body部分,就可以获取所有跟这次出错相关的信息。

code

自定义错误码。自定义错误码的长度和个数都可以自己定义,这样就突破了HTTP状态码的个数限制。例子中的错误码是40483,其中404代表了请求的资源不存在,而83则制定了这次出错,具体是哪一种资源不存在。

message

用户可理解的错误信息,应当根据用户的locale信息返回对应语言的版本。这个错误信息意在返回给使用客户端的用户阅读,不应该包含任何技术信息。有了这个字段,客户端的开发者在出错时,能够展示恰当的信息给最终用户。

developerMessage

该出错的详细技术信息,提供给客户端的开发者阅读。可以包含Exception的信息、StackTrace,或者其它有用的技术信息。

moreInfo

给出一个URL,客户端开发站访问这个URL可以看到更详细的关于该种出错信息的描述。在该URL展示的网页中,可以包含该出错信息的定义,产生原因,解决办法等等。

requestId

请求ID,服务为每一个请求唯一生成一个请求ID,当客户端开发者无法自助解决问题时,可以联络服务开发者,同时提供该请求ID。一个好的服务,服务开发者应当可以根据此ID,定位到该次请求的所有相关log,进而定位问题,解决问题。

Reference

https://stormpath.com/blog/spring-mvc-rest-exception-handling-best-practices-part-1/

http://www.cnblogs.com/xinzhao/p/4904194.html

时间: 2024-09-20 00:24:33

REST API出错响应的设计(转)的相关文章

设计师不应该错过的响应式设计框架

  当下最火热的框架就是Bootstrap和 Foundation了. 随着响应式设计框架越来越火,一个巨大的争议出现了:为什么一个专业的设计师还需要用这些框架呢? 许多人宣称响应式框架是可怕的,因为他们根本不懂一点点html和css的知识.下面是另一些具有标志性的反对使用框架的意见: 设计师可以写自己的框架,如果他们懂得一点点html和css的知识的话就更应该自己写. 基于框架的网站加载非常慢. 基于框架的网站看起来大同小异. 伴随多余的div标签,5000+行的css后者更多的javascr

Web API核查表:设计、测试、发布API时需思考的43件事

当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是基于TCP/IP创建的.TCP/IP建立在一系列的管道上.当然,你也需要考虑Web服务器.应用程序框架或者是API框架. API从设计到测试以至最终的发布需要经历一个漫长的过程,本文将主要探讨Web API从设计到最终发布,开发者可能忽略或者应该注意的东西. HTTP篇 HTTP 1.1规范RFC2616是一个非常大的文档,下面我们节选了一些可能会对API产生影响的

设计师不应该错过的响应式设计框架(含优缺点分析)

Ethan Marcotte称响应式设计是基于网格建立一个网站.Marcotte定义这项技术后,响应式设计框架开始出现,主要是css和JavaScript的结合.许多框架都是开源的,可以免费下载和快速定制. 当下最火热的框架就是Bootstrap和 Foundation了. 随着响应式设计框架越来越火,一个巨大的争议出现了:为什么一个专业的设计师还需要用这些框架呢? 许多人宣称响应式框架是可怕的,因为他们根本不懂一点点html和css的知识.下面是另一些具有标志性的反对使用框架的意见: 设计师可

《响应式Web设计性能优化》一1.1 响应式设计存在的问题

1.1 响应式设计存在的问题 我曾与我的一个团队和产品经理参加了一个产品规划会议,讨论重新设计我们的视频区块,我们的团队主管提出了可以让这个区块具备响应式体验的方案.我们勾勒了这样一张页面,它会去加载默认的HTML5视频播放器,不过会根据用户所使用的设备来调整播放器的大小以及加载不同视频类型的资源与播放列表.这样我们的页面将会非常漂亮,能够适应更多的浏览设备,而且我们的视频就可以面向以前被拒之门外的各种设备的观众了. 这时我们的产品经理皱起鼻子说道:"我们的响应式首页出来之后,我就开始觉得我们的

响应式设计实战:IE10优化版cnBeta诞生记

中介交易 SEO诊断 淘宝客 云主机 技术大厅 这两年来,已经有不少互联网产品开始应用响应式设计,以跨越不同设备和浏览器的限制.而自从IE10发布之日起,各种声音就围绕在开发者们的周围.作为响应式设计的攻城利器,IE10增加了对十几种HTML5 API的支持,例如Web Sockets.Web Workers.历史API.拖曳API和文件API,访问微软IE10开发者指南可以看到完整的支持列表.而如何通过HTML5技术为一个传统布局的站点快速开发出基于瀑布流风格的响应式版,也是开发者们关注的热点

Html5响应式设计实现九宫格

自从响应式设计的理念提出以来,越来越大的网站采用这种思想.各类大型网站也如雨后春笋般的涌了出来.如:小米商城,天猫等. 至于响应式设计的概念等大家可以去百度百度,我这里就不相信讲解了.直接为大家带来源码,用Html5实现响应式的九宫格.代码如下: <!DOCTYPE html> <html> <head> <title>html5响应式九宫格</title> <meta http-equiv="Content-Type"

非响应式设计的viewport

整理自:Viewport Meta Tag For Non-Responsive Design 中文原文:非响应式设计的viewport 请尊重版权,转载请注明来源,多谢-- 大家已经非常熟悉响应式网页设计了吧,但是我们通常会忽略很多旧的没有采用响应式设计的网站,其实这类网站在移动终端的用户体验更为关键--因为它们没有对移动设备做任何优化. 通用viewport 对于响应式网站,大家通常都会这样定义: 1 <meta name="viewport" content="w

WEB响应式设计:响应式Web设计的CSS框架分享

文章简介:Web布局设计新方式-响应式设计,应用越来越广泛,在这里为大家分享10个用于响应式Web设计的CSS框架,让您的开发工作越来越轻松. Web布局设计新方式-响应式设计,应用越来越广泛,在这里为大家分享10个用于响应式Web设计的CSS框架,让您的开发工作越来越轻松. 1) Less Framework Less框架是一个用于设计自适应网站的CSS网格系统,它包含4个布局和3套预设布局,这些都以一个单一网格为基础.Less框架的目标是更高效地创建多布局网站,并在布局之间保持一致. 2)

响应式设计Media Queries的技巧

文章简介:在这篇文章中,将向大家介绍制定高质量的Media Queries需要注意的一些事项. 我们都知道,Media Queries是实现响应式设计的秘密武器.在这篇文章中,将向大家介绍制定高质量的Media Queries需要注意的一些事项. 让内容确定断点 很多时候,在响应式设计中,你经常看到的断点值是:320px.480px.768px和1024px等. 不要使用流行的设备尺寸(320px是iPhone设备的竖屏尺寸,480是iPhone设备横向屏幕尺寸,768px是iPad竖向屏幕尺寸