【问题标题】: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 键值对),仅此而已。

    除此之外,它们在验证和错误处理方面实际上非常相似。我敢肯定这是故意的。它们都包含相同或非常相似的验证方法,例如minmaxminLengthverifying 等。bindFromRequestvalidate 都以累积而不是累积的方式处理错误快速失败,并且两者都有fold 轻松处理错误的方法:

    someForm.bindFromRequest.fold (
        formWithErrors => ...,
        value => ...
    )
    
    request.body.validate[A].fold (
        errors => ... ,
        value => ...
    )
    

    虽然并非适用于所有人,但也有 JSON transformers,它提供了在绑定到对象之前和之后(或从不)操作 JSON 结构的强大功能方法。

    无论是否使用 REST API,我都倾向于尽可能使用 JSON 验证,因为它比 Forms 感觉不那么笨重,而且通常更容易将较小的 ReadsWrites 组合在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多