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

他们已经编写了API来响应缺少422的错误代码的必需数据的请求:


422无法处理的实体(WebDAV; RFC 4918)-请求为
格式正确,但由于语义错误而无法遵循。


请求已得到处理,并且从应用程序服务器返回了有效的JSON响应对象,但是HTTPD服务器当前正在拦截响应,并在通用ErrorDocument中放入422错误。

想看看是否有办法:


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

错误文档422 $ {RESPONSE_BODY}


任何其他建议都将受到欢迎。我们的临时解决方案只是返回200响应并在响应中定义错误代码,但在可能的情况下更愿意使用HTTP错误代码。

最佳答案

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

ErrorDocument  422     /error/422


这是将任何422错误发送到/error/422的URL路径。这是假设您具有如下服务器设置:

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发送到控件中的预定路径。然后在该控制器内,发送您想要的任何自定义内容。

10-07 19:38