旧ブログ(ISSEN)から移行しました

【Rails6】Railsでの外部APIのGET方法

【Rails6】Railsでの外部APIのGET方法

西原月熙
西原月熙3分で読めます

はじめに

Railsで開発していて、外部サービスとAPIを使って連携したい時ってありませんか?
今回はそんなお悩みを解決しようと思います!

この記事の概要

外部APIのGETメソッドを叩く方法を簡単に説明します!
ちなみに「叩く」とは、URLにアクセスすることを指します。

対象読者

  • Railsでの外部APIの叩き方を知らない人

筆者の環境

技術等バージョン
使用パソコンMacBook Pro
OSmacOS Monterey
Ruby2.7.4

実装

JSONPlaceholderについて

今回は、APIのGETをするテスト用のサービスに、JSONPlaceholderというサイトを使用します!

JSONPlaceholder - Free Fake REST API

jsonplaceholder.typicode.com

このサイトはテスト用のエンドポイントを提供してくれているサービスです。
試しに、https://jsonplaceholder.typicode.com/usersを開いてみてください。
仮のユーザーの一覧が出てきたかと思います。
今回はこのURLを対象として情報を取得していきます!

httpclientの導入

今回はhttpclientというgemを使用します。

Gemfile
# 略
gem 'httpclient'
ターミナル
$ bundle install

で、インストールします。

コードの記述

それでは、実際に記述をします。
今回は、usersコントローラーのindexメソッドの中で使用するものとします。

app/controllers/users_controller.rb
class UsersController < ApplicationController
  require 'httpclient'
 
  def index
    client    = HTTPClient.new
    url       = "https://jsonplaceholder.typicode.com/users"
    response  = client.get(url)
    res_json  = JSON.parse(response.body)
  end
 
  # 以下略
end

順番に解説します!

  require 'httpclient'

このrequireでgemのhttpclientが使えるようになるので必ず記述してください!

    client    = HTTPClient.new

この行ではclientという変数にHTTPClientのインスタンスを格納しています。

    url       = "https://jsonplaceholder.typicode.com/users"
    response  = client.get(url)

ここで、urlに格納したURLにhttpclientが用意してあるgetメソッドを使って外部からHTTPのGETメソッドを走らせています!
その結果をresponseという変数に格納しています。

    res_json  = JSON.parse(response.body)

取得した情報はそのままだと文字列(String)になってしまい、扱いづらいです。
そこで、JSON.parseメソッドを使ってRubyのオブジェクト(ArrayHash)に変換しています。

以上で、変数res_json内にhttps://jsonplaceholder.typicode.com/usersに表示されている文字が連想配列として格納されました。
このデータを画面そのまま表示させたかったら、@マークでインスタンス変数にしてあげてください。
DBに保存したかったら、each文で格納させてあげても良いですね。

終わりに

繰り返しになりますが、今回はGETメソッドを叩く方法のみを載せました。
実際の業務では、このデータを加工したりする必要があると思います。
また、取得できなかった場合の例外処理も必要になります。
まずは取得のみからはじめて挙動を確認してみてください😎

Railsの勉強をしたい方はこの本が参考になるかと思いますので興味がある方はぜひ読んで見てください🙇‍♂️

この記事を書いた人

西原月熙
西原月熙

TOKOSのテックリード。上流工程からコーディング、インフラ系まで色々やっている器用貧乏です。最近は特にフロントエンドのキャッチアップに力を入れています💪 好きな音楽はボーカロイドです🤖