如何使用Liberator验证表单POST数据?

时间:2014-09-16 09:06:53

标签: validation clojure liberator

我应该在Liberator决策树中哪些地方验证表单输入?

:malformed?似乎旨在检测无效的JSON或无效的表单正文。

2 个答案:

答案 0 :(得分:0)

这取决于你在考虑什么样的验证,参见这里讨论是否应该使用HTTP 400 (bad request) for logical error来表示逻辑错误。解释器提供了许多与request-entity-too-large到检查正确媒体类型相关的决策点。我建议查看HTTP status codes上的维基百科页面,以了解哪些返回代码可能最适合您的验证,然后使用它来推动您的解释器决策点相关的建议。

编辑:假设您要返回422.您可以使用processable?运行所需的检查,如果检查失败,其处理程序unprocessable-entity将返回422。或者您可以使用liberator.representation/ring-response从处理程序或操作创建整个响应。另请参阅liberator google group中的讨论。

答案 1 :(得分:0)

我认为使用handle-malformed很好,但你也可以使用handle-unprocessable-entity。更重要的是保持一致。我会从客户端查看它,并决定哪个更有意义,哪个为客户端提供正确的粒度级别或反馈。例如,如果客户端获得足够的反馈来区分缺少的参数和提供的参数,但具有不可接受的值,那么您可能希望对第一个使用handle-malformed,对第二个使用handle-unprocessable-entity 。另一方面,如果您只需要发出提供的(或未提供的)参数的问题,那么只使用handle-malformed可能是正确的选择,因为它会减少您的代码大小并简化所需的逻辑。客户方。

当我发现需要区分这两种类型的失败时,我倾向于首先使用handle-malformed然后将其分解为handle-malformed和handle-unprocessable-entity。