RailsでAPIを作っていると、様々なパラメータを順不同で渡したくなることがあります。例えば、ページ位置とかソート方法とか。そんなときはクエリパラメータをAPIのURLに含めると便利です。次のようなURLのハテナ以降の部分がクエリパラメータです。
http://api.example.com/debug?sort=asc&page=3
クエリパラメータの読み取り方をまとめます。
結論
- クエリパラメータを一つづつ読み取るには、
params[キー]
を使用します。 - クエリパラメータをまとめて取得したいときは、
request.query_parameter
を使用します。 - クエリパラメータとして配列も渡せます。
ルーティング
ルーティングは、クエリパラメータを含めずに普通に定義します。
@route.rb
# /debug へのルーティングを定義 get 'debug', to: 'application#debug'
一つづつ読み取る
クエリパラメータを読み取る処理はコントローラに記述します。次のようなクエリパラメータのsortの値を読み取るにはparams[:キー]
を使います。
URL
http://api.example.com/debug?sort=asc
コントローラにて、params
でsortパラメータを読み取ります。
def debug unless params[:sort].blank? sort = params[:sort].to_s end end
まとめて読み取る
可変個のクエリパラメータをまとめて取得するには、request.query_parameter
を使用します。
URL
http://api.example.com/debug?sort=asc&fruit=apple&name=taro
コントローラにて、request.query_parameter
をeach
で回してパラメータを読み取ります。
def debug hash = {} request.query_parameters.each do |key, value| hash[key] = value.to_s end end
配列を読み取る
クエリパラメータのキーに[]
を付けると配列になります。
URL
http://api.example.com/debug?name[]=tom&name[]=jon&name[]=ema
コントローラにて、params[:name]を取得すると配列で取得できます。eachで回す必要はありません。
def debug unless params[:name].blank? name = params[:name] end end