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

Ruby on Rails

はじめに

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

この記事の概要

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

注意
RailsのプロジェクトをAPIサーバーとして動かす方法ではなく、外部のAPIを叩く方法の説明となります

対象読者

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

筆者の環境

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

実装

JSONPlaceholderについて

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

httpclientの導入

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

# 略
gem 'httpclient'
$ bundle install

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

コードの記述

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

注意
実際にはJSONを叩く用のメソッドをコントローラorモデルに記述して適切な加工等をします(indexメソッドにそのまま記述する場合は少ないかと思います)
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メソッドを使って連想配列型(Hash)に変換しています。

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

終わりに

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

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