APIをつくってみる

こんにちは。oda@エンジニア1年目です。

業務でAPIにリクエストを送って、返ってきたデータを非同期で画面に描画するという処理をすることがあります。

最近、ふと思いました。

「APIを自分で作ったことがないぞ」

というわけで、今回は自分でAPIを作ってみます。

(以下、Rails 6.1.6を使用しています。)

そもそもAPIって?

  • API(Application Programming Interface)は、そのアプリケーションにアクセスするための窓口であり、リクエストを送ると決められた形式でレスポンスを返してくれます。
  • 私が日頃やっているのはJavaScriptを使ってこのAPIにリクエスト送り、返ってきたデータを画面に描画するというものです。

事前準備

今回は以下のように設定したStudentモデルのデータを返すAPIを作ります。

Studentモデルには以下のデータを準備しました。

id(integer) name(string) grade(integer)
1 Alice 3
2 Bob 1
3 Charlotte 1
4 Daniel 2
5 Edward 3

APIの作成

controllerの作成

まずは、controllers/api/students_controller.rbを作成し、indexアクションを追加します。

次のコマンドを使うと作成できます。

bin/rails g controller api::students index

できあがったapi/students_controller.rbは次のとおりです。

class Api::StudentsController < ApplicationController
  def index
  end
end

すべてのStudentを取得できるようindexアクションに次のとおり追加します。

class Api::StudentsController < ApplicationController
  def index
    @students = Student.all # ここを追加
  end
end

ルーティングの修正

api/students_controller.rbにアクセスできるようroutes.rbにルーティングを追加します。

Rails.application.routes.draw do
  namespace :api, format: 'json' do
    resources :students, only: [:index]
  end
end

今回はjson形式でデータが返ってくるようformatを設定しています。

index.json.jbuilderの作成

jbuilderとは、Ruby on Railsにデフォルトで含まれているGemです。

これを使うとjson形式のデータを簡単に準備することができるので、今回はこちらを利用します。

idnamegradeを返してくれるようview/api/index.json.jbuilderを次のとおり作成します。

json.set! :students do
  json.array! @students do |student|
    json.extract! student, :id, :name, :grade
  end
end

いざ、アクセス

bin/rails sでサーバを起動したら、http://localhost:3000/api/studentsにアクセスします。

すると、次のように@studentsがjson形式で返ってくることが確認できました。

さいごに

今回はjson形式で取得したデータを返すAPIを作成してみました。

次回はこのAPIを使って、取得したデータを非同期で画面に表示させたいと思います!

それでは、最後までご覧いただきありがとうございました!