Faradayの役割
Faradayは、Rubyで書かれたHTTPクライアントライブラリで、RubyGemsとして提供されています。利用シーンとしては、Railsプロジェクトから外部のAPIなどにアクセスする例などが一般的でしょう。
なお、RubyにはHTTPクライアントライブラリとして標準で添付されているNet::HTTPがあり、require 'net/http'でインクルードすれば利用でき、Faradayを使わなくても実装することができます。
ただし、Net::HTTPを使うとパラメーターや設定などが複雑になってしまうところを、Faradayを使うことでよりシンプルに、HTTPクライアントとしてアクセスする部分を実装できるメリットがあります。
また、Faradayは内部的にはデフォルトでNet::HTTPを使用しています。その意味ではNet::HTTPのラッパーともいえるでしょう。
Faradayの基本的な使い方
ここからはFaradayの基本的な使い方について解説します。
Faradayの初期化
Faradayを初期化するには、Faraday.newを宣言します。通常、1つのAPIのエンドポイントのURLは変わらないので、初期化時に以下のようにURLを指定します。
connection = Faraday.new(url: 'http://example.com')
初期化時には特にアクセスが発生するわけではなく、あくまでも接続のための準備の段階です。
このあと、connection.[HTTPリクエストメソッド]〜のように呼び出すことで実際に指定したURLへのアクセスが発生します。例えばgetメソッドならconnection.getと呼び出します。
なお、Faraday.new(〜) do 〜 endのようにしてブロックの中で初期化オプションを指定することができます。オプションには以下があります。
オプション | 設定例 | 意味 |
---|---|---|
request | :url_encoded | POST時にパラメーターを強制的にURLエンコードする。 |
response | :logger | 標準出力にリクエスト/レスポンスを出力する。 |
adapter | Faraday.default_adapter | リクエスト時に使用するアダプターを指定する。ここではFaradayのデフォルトであるNet::HTTPが使用される。 |
オプションを指定して初期化するサンプルコードは以下です。
connection = Faraday.new(url: 'http://example.com') do |faraday| faraday.request :url_encoded end
HTTPリクエスト
実際にリクエストするには、connection.[HTTPリクエストメソッド] [URI], [パラメーターのハッシュ]といった形式で呼び出します。例えば「http://example.com/articles」にGETでリクエストする場合は以下のように記述します。
connection = Faraday.new(url: 'http://example.com') connection.get '/articles'
リクエストメソッドがPOST、PUT、PATCH、DELETEの場合も基本形は同じで、呼び出すメソッドがそれぞれpost、put、patch、deleteメソッドに対応します。
パラメーターを指定する場合は、URI指定に続いてハッシュを記述します。例えば「http://example.com/articles?page=1&count=10」にGETする場合は以下のように記述します。
connection = Faraday.new(url: 'http://example.com') connection.get '/articles', page: 1, count: 10
その他のリクエストメソッドの場合でも同様に指定することができます。また、GETメソッドを呼び出している箇所を以下のようにブロックとして記述することもできます。
connection.get do |request| request.url '/articles', page: 1, count: 10 end
ブロックにした場合は、ブロックに渡した変数からURLメソッドを呼び出す必要があります。
HTTPレスポンス
リクエスト後にサーバーから受け取ったレスポンスボディは、以下のように取得できます。
connection = Faraday.new(url: 'http://example.com') response = connection.get '/articles' p response.body
レスポンスには以下のメソッドが用意されています。
メソッド | 意味 |
---|---|
status | HTTPステータス |
body | レスポンスボディ |
response_headers | レスポンスヘッダー |