为什么POST数据应该嵌套?

the*_*eva 1 json ruby-on-rails

我使用Rails作为API服务器,我想知道为什么发送到服务器的数据需要嵌套.这似乎是定义params的首选方式:

def user_params
  params.require(:user).permit(:first_name, :last_name, :password, :username, :email)
end
Run Code Online (Sandbox Code Playgroud)

这将是发送到创建路由的相应JSON:

{
    "user": {
        "username": "lorem",
        "first_name": "ipsum",
        "last_name": "dolor",
        "password": "sit",
        "email": "amet"
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这是发布数据的首选方式?为什么JSON不能:

{
    "username": "lorem",
    "first_name": "ipsum",
    "last_name": "dolor",
    "password": "sit",
    "email": "amet"
}
Run Code Online (Sandbox Code Playgroud)

Ars*_*Ali 5

这些不是在为您创建资源时发送的唯一参数,其他参数是:

  1. utf8 有价值的 ?
  2. authenticity_token 用随机字符串
  3. commit有价值的SaveUpdate

因此逻辑很明显:Rails将所有用户归属参数分组到user密钥内,因此,它更容易阅读,更容易被代码解释,并且更容易将相关参数列入白名单.

不仅如此,有时你会尝试通过一个请求创建多个资源,比如用户有很多书,所以你想创建一个用户,同时创建书籍 - 这就是所谓的嵌套资源,在这种情况下,它会是这样的:

{
  "user": 
  {
    "username": "john_don",
    "books":
    {
      "0":
      {
        "author_id": 1
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我希望你明白这个主意.