【问题标题】:Play: Reads vs Form播放:阅读与形式
【发布时间】:2014-11-25 03:10:09
【问题描述】:
我正在创建一个带有 JSON 格式的 HTTP REST API。
Play 似乎提供了两种完全不同的方式来解析和验证我的输入:
play.api.data.Form
play.api.libs.json.Reads
它们之间有什么区别,哪个更适合解析 JSON 请求正文,以及验证和错误处理?
如果“取决于”,它取决于什么?
【问题讨论】:
标签:
json
validation
parsing
playframework
httprequest
【解决方案1】:
对于解析带有 JSON 正文的请求,它一直是 Reads。事实上,真的没有办法使用Form 来解析 JSON,因为这不是它的本意。 Forms 完全用于绑定和形成 URL 编码的表单(即 String -> String 键值对),仅此而已。
除此之外,它们在验证和错误处理方面实际上非常相似。我敢肯定这是故意的。它们都包含相同或非常相似的验证方法,例如min、max、minLength、verifying 等。bindFromRequest 和validate 都以累积而不是累积的方式处理错误快速失败,并且两者都有fold 轻松处理错误的方法:
someForm.bindFromRequest.fold (
formWithErrors => ...,
value => ...
)
request.body.validate[A].fold (
errors => ... ,
value => ...
)
虽然并非适用于所有人,但也有 JSON transformers,它提供了在绑定到对象之前和之后(或从不)操作 JSON 结构的强大功能方法。
无论是否使用 REST API,我都倾向于尽可能使用 JSON 验证,因为它比 Forms 感觉不那么笨重,而且通常更容易将较小的 Reads 和 Writes 组合在一起。