🐰
Rails で配列のクエリパラメータを受け取るには、渡す際のキーに[]を追記する
Ruby on Rails
で REST API を開発しています。
配列のクエリパラメータを渡す場合について調べたので備忘録を残します。
要約
- そもそも配列のクエリパラメータを渡す場合のルールが明確に定義されているわけではなく、言語やフレームワーク側で制御されている
- 配列にしたいクエリパラメータに
[]
を追記する
そもそもの定義について
URI(URL)
に関する標準ドキュメントである、RFC 3986 には配列のクエリパラメータを渡す際の作法について明確に定義されているわけではありません。
配列のクエリパラメータを渡す際の作法については、言語やフレームワークによって異なる制御がされているとのことです。
参考
Rails では、クエリパラメータに [] を追記する
タイトルのとおりです。
クライアント側でカンマ区切りの文字列を Rails API
に渡して Rails
側で Split したりする方法は考え付きましたがなんとなくスマートじゃない気がしたので調べたところ Rails
では以下のように制御を行っていることがわかりました。
# client
https://example.com/api/animals?names[]=cat&names[]=dog&names[]=sheep
上記のように、クエリパラメータに []
(角かっこ)を付加して Rails
側に渡せば、配列として解釈してくれます。
# ruby
def index
names = params[:names]
# names -> ["cat", "dog", "sheep"]
end
また、この方法でクエリパラメータを受け取る場合、型推論や変換は行われず常に文字列となるため、注意が必要です。
さいごに
[]
で配列化する方法は PHP
や express(node.js)
でも採用されている方法だそうです。
id=1&id=2&id=3
みたいに渡す方法しか使ったことがなかったので勉強になりました。
参考
Discussion