通过HTTPD传递JSON错误响应

时间:2014-04-24 01:49:19

标签: json apache intercept

我合作的团队正在为他们的应用程序创建一个API接口,以便将数据公开给需要它的网站。他们以JSON格式发送请求和响应,但目前在以下问题上受到阻碍。

他们已经编写了API以响应缺少必需数据的请求,其中包含422错误代码:

  

422 Unprocessable Entity(WebDAV; RFC 4918) - 请求是   格式良好但由于语义错误而无法遵循。

处理请求并从应用程序服务器返回有效的JSON响应对象,但HTTPD服务器当前正在拦截响应并为422错误输入通用ErrorDocument。

想看看是否有办法:

  1. 禁用ErrorDocument拦截,只需通过Apache服务器透明地从应用程序服务器返回JSON响应
  2. 使用ErrorDocument处理程序,但将响应主体注入返回的消息 - 即

    ErrorDocument 422 $ {RESPONSE_BODY}

  3. 欢迎任何其他建议。我们的临时解决方案只是返回200响应并在响应中定义错误代码,但如果可能,宁愿使用HTTP错误代码。

1 个答案:

答案 0 :(得分:0)

在不知道你的API的URL结构的情况下,我会建议类似于我在我创建的使用PHP作为框架的JSON API中使用的内容。将其放在服务器或Web应用程序的根目录下的.htaccess文件中。

ErrorDocument  422     /error/422

这样做会将422错误发送到/error/422的网址路径。这假设您的服务器设置如下:

http://api.mygreatserver.net/error/422

我的.htaccess中也有一条规则可以像这样路由流量:

RewriteRule     ^([a-z_-]+)/([0-9]+)/?$   index.php?controller=$1&id=$2 [QSA]

所以基本上/error/422在幕后转换为index.php?controller=error&id=422。 PHP脚本路由到error,然后error行为422 ......等等,瞧!

如果以某种方式将API本身定位为域的路径,如下所示:

http://www.mygreatserver.net/api/error/422

它可能是这样的:

ErrorDocument  422     /api/error/422

一般目标是将任何422发送到您控件中的预定路径。然后在该控制器中,您发送任何您想要的自定义内容。