こんにちは。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形式のデータを簡単に準備することができるので、今回はこちらを利用します。
id
、name
、grade
を返してくれるよう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を使って、取得したデータを非同期で画面に表示させたいと思います!
それでは、最後までご覧いただきありがとうございました!