LoginSignup
3
3

More than 3 years have passed since last update.

Rails標準ライブラリのnet/httpを使ってAPI通信をする

Last updated at Posted at 2020-07-16

本記事について(お断り)

この記事は、しがないプログラミング初心者がお勉強よろしくプログラミング・技術に触れるべく、行ったことの備忘録として書き綴ったものです。至らぬ点、誤解を招く表現など、ご指摘がありましたら甘んじて受け入れます🙇‍♂️

外部APIとの通信

プロダクトに機能を追加する際、外部APIに通信する必要が出てきた。APIという言葉そのものをよく理解していなかったものの、以下のQiitaの記事がとても分かりやすくまとめてくれていたので、参考に載せておきます。ありがとうございました。
WebAPIについての説明

net/httpを使う

API通信を行う時、HTTPClientやrest-clientなどの優秀なgemライブラリがあるようです。どれを使うか迷いましたが、せっかくRailsに標準でライブラリがあるので、まずはそれを使ってみようと思います。

コード

今回行ったのは、外部APIにGETリクエストを送り、レスポンスを受け取るだけの実装です。

require 'net/http'
require 'uri'

uri = URI.parse('https://example.com')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

header = { 'Authorization' => 'Bearer password' }
uri.query = URI.encode_www_form { q: test, hoge: fuga }

response = http.get(uri.request_uri, header)

まずは初めの3行でクライアントの用意を行なっています。

uri = URI.parse('https://example.com')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

use_ssl = truehttpsを使う時は必ずtrueにしておかないといけないそうなので、忘れないように設定します。
use_ssl=(bool)

次の2行で、リクエスト内容を設定してます。

header = { 'Authorization' => 'Bearer token' }

ヘッダーに認証情報を埋め込むための変数を作成してます。今回のAPI通信ではBearer認証を求められていたのですが、これを知らなくてレスポンスが<401 Unauthorized>ばかり帰ってきてて詰まりました。

uri.query = URI.encode_www_form { q: test, hoge: fuga }

クエリパラメータを作成してます。URI.encode_www_formにハッシュを渡すことで、q=test&hoge=fugaのようにクエリパラメータとして使える文字列に変換してくれます。

最後に、getメソッドでリクエストを送り、結果を受け取ります。

response = http.get(uri.request_uri, header)

getにはパスと先ほど準備したヘッダー情報を与えています。

get(path, header = nil, dest = nil) -> Net::HTTPResponse

# => <Net::HTTPOK 200 OK readbody=true>

これで期待していたインスタンスを受け取ることができました!

参考

Ruby 2.7.0 リファレンスマニュアル ライブラリ一覧 net/httpライブラリ Net::HTTPクラス
net/httpライブラリを使って、RubyでHTTP通信してみた

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3