本記事について(お断り)
この記事は、しがないプログラミング初心者がお勉強よろしくプログラミング・技術に触れるべく、行ったことの備忘録として書き綴ったものです。至らぬ点、誤解を招く表現など、ご指摘がありましたら甘んじて受け入れます🙇♂️
外部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 = true
はhttpsを使う時は必ず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通信してみた