Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Ruby製HTTPクライアント用gemの「Faraday」を使おう

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール 第11回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2019/04/03 11:00

 前回まで、ファイルアップローダーの代表的なgemであるCarrierWave/Refile/Shrineと、Rails 5.2から導入されたActiveStorageの基本的な使い方を紹介しました。今回は、HTTPクライアントライブラリであるFaradayを紹介します。

目次

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 レスポンスヘッダー

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 竹馬 力(チクバ ツトム)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5