【发布时间】:2019-03-20 04:45:33
【问题描述】:
我正在使用 JSON 作为前端和后端之间的格式构建 Rails 5+ API。
我希望能够创建单个记录或多个记录,具体取决于是否发送 JSON 对象数组。
请注意,我没有使用 JSON:API 规范,而是 JSON 对象作为根属性出现。
# Create a single child object for the associated parent
POST api/v1/parents/1/children PARAMS: { child_name: "Alpha" }
# Create multiple children objects for the associated parent
POST api/v1/parents/1/children PARAMS: [{ child_name: "Alpha" }, { child_name: "Bravo" }]
在控制器中,我必须区分发送的是单个对象还是数组。如果设置了 Content-Type="application/json" 标头,Rails 似乎会自动将 JSON 数据转换为 params["_json"] 键,我正在使用它来判断是否传递了数组。
class ChildrenController < ApplicationController
def create
@parent = Parent.find(params[:parent_id])
if params["_json"] && params["_json"].is_a?(Array)
@children = []
params["_json"].each do |child_attributes|
@children << @parent.children.create!(child_attributes)
end
render json: @children
else
@child = @parent.children.create!(child_params)
render json: @child
end
end
def child_params
params.permit(:child_name)
end
end
问题
- 使用
params["_json"]是判断数组是否通过的标准方法吗?这似乎很老套,但我不确定有更好的方法。 - 如果传递了一个JSON对象数组,我怎么还能使用StrongParameters
child_params方法呢?目前,如果用户传递一个 JSON 对象数组,他们可以放置他们想要的任何属性,而我不会将它们过滤掉。 - 是否有更好的方法来实现此功能?我不必为单个和多个创建都使用单个端点,我只是认为拥有一个可以处理单个或多个对象的 API 端点会更方便。
- 我还计划为
update操作创建一个端点,该端点也可以接受单个或多个对象。这是一种不好的做法吗?
【问题讨论】:
标签: arrays json ruby-on-rails-5 rails-api