0

出于好奇,在返回 JSON 的 API 中是否有任何流行的标准来返回服务器端异常(和相应的详细信息)?异常可以是代码中未捕获的异常或开发人员放置的抛出异常。

目前我正在根据他们的Wiki 定义设置 HTTP 状态代码

我的 JSON 响应看起来像这样:

HTTP Code: 401

{'error': 'Authentication required.', 'message': 'You must be authenticated to perform that action.'}
4

4 回答 4

1

本机 ECMAScript 错误对象的标准结构是:

{
    name: ...,
    message: ...
}

其中“name”是错误的类型(对应构造函数的名称,如“Error”、“SyntaxError”等)。例如,在您的示例中,您可以使用名称“AuthentificationError”。

于 2012-08-05T16:57:02.347 回答
1

您可以查看 JSON-RPC (http://en.wikipedia.org/wiki/JSON-RPC)。

在成功的情况下,响应是这样的:

{
    "result": ...(returned data)...
    ...
}

如果出现错误,响应是这样的:

{
    "error": ...(error details)...
    ...
}

发生错误时,必须存在“error”属性,并且不得返回“result”属性。如果没有错误,则不得设置“错误”属性。这样,您可以仅根据响应的内容来区分错误和成功的响应,而无需检查标头(如响应代码)。

于 2012-08-05T17:12:19.450 回答
0

是的,你也可以这样做。

正如我们所知,Web 服务器允许我们为 HTTP 错误创建自定义错误页面,在这些自定义错误页面中,您必须提供 JSON 回复

示例:
将以下内容添加到您的 WEB-INF/web.xml:

<error-page>  
       <error-code>401</error-code>  
         <location>/autherror.jsp</location>  
</error-page>

在 autherror.jsp 文件中编码完成所需 JSON 回复所需的逻辑。

于 2012-08-05T16:53:04.853 回答
0

尝试对您发送的错误更详细一点。在某些地方建议使用此结构,以便为使用您的 API 的用户和开发人员提供足够的信息

"error":{
       "code":"410",
       "long":"410001",
       "message":"cannot connect to DB",
       "developer":"Connection to the DB was unsuccessful due to ...",
       "documentation": "mysite.com/help/errors/..."
   }
  1. 为错误返回正确的 HTTP 代码。错误地返回代码 200 是不好的做法。

  2. 使用您自己的错误 ID 扩展代码

  3. 提供粗略概述错误原因的短消息。考虑为开发人员添加更详细的消息。请记住,API 错误消息有 99.9% 的时间被开发人员阅读,因此通过提供技术细节(在合理范围内)让他们感到高兴,以便他们能够尽快解决。

  4. 如果您保留有关 api 和错误代码的公共文档,只需添加 url。

于 2013-11-29T02:24:05.203 回答