通过HTTPD传递JSON错误响应

通过HTTPD传递JSON错误响应,json,apache,intercept,Json,Apache,Intercept,我所在的团队正在为他们的应用程序创建一个API接口,以便将数据公开给需要它的网站。他们以JSON格式发送请求和响应,但目前在以下问题上受阻 他们编写了API以响应缺少所需数据的请求,错误代码为422: 422不可处理实体(WebDAV;RFC 4918)-请求已被删除 格式正确,但由于语义错误而无法遵循 处理请求并从应用程序服务器返回有效的JSON响应对象,但HTTPD服务器当前正在拦截响应,并在generic ErrorDocument中输入422错误 想知道是否有办法: 禁用ErrorDoc

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

他们编写了API以响应缺少所需数据的请求,错误代码为422:

422不可处理实体(WebDAV;RFC 4918)-请求已被删除 格式正确,但由于语义错误而无法遵循

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

想知道是否有办法:

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

    ErrorDocument 422${RESPONSE_BODY}


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

    在不知道API的URL结构的情况下,我建议在我创建的JSON API中使用类似的内容,该API使用PHP作为框架。将其放入服务器或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
    
    然后可能是这样的:

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

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

    现在提供答案,但您可以提供API设置的示例路径。您不需要使用真正的域/主机,但是结构概述会很好。