我与之合作的团队正在为其应用程序创建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
发送到控件中的预定路径。然后在该控制器内,发送您想要的任何自定义内容。