验证 api 控制器中的 post 参数

validating post params in api controller

是否有推荐的方法来验证 rails 4 API 的控制器操作中的任何输入参数?

我知道我可以将参数列入白名单,但是如果我想检查它们是否提供了所需的值怎么办?

请假设没有模型验证,我必须在控制器中验证 POST JSON。

作为示例,让我们使用一个创建 Person 的示例 JSON。

{
  "person": {
    "firstname": "Joe",
    "lastname": "Bloggs",
    "age": "99",
    "starsign": "virgo",
    "address": {
      "line1": "123 street",
      "city": "NYC",
      "zip": "90210"
    }
  }
}

假设所有这些字段都是必需的,检查它们是否具有值的最佳方法是什么(忘记检查数值等,只检查是否存在)。如果缺少一个或多个,还会 return 一条错误消息。

我知道如果我要创建一个这样的人,模型验证将是最好的方法:

Person.new(params)

但我实际上并没有这样做,所以我需要另一种方法来检查值!

你会在控制器动作中做的是写类似

 params.require(:person).require(:firstname, :lastname)

如果未提供 person 参数,这将引发错误,然后您应该捕获该错误并执行所需的行为,其中应包括通知用户未提供 person 参数。

https://github.com/ruby-json-schema/json-schema 将满足您的需求。它可以根据提供的架构验证 json 数据。