Rails 5で超簡単にREST APIを作成してCRUD処理を実装する方法

article

はじめに

Railsのscaffoldは、1つのコマンドで、リソースのコントローラ、モデル、テンプレートを作成することができます。このチュートリアルでは、わずか数ステップで簡単なAPIを作成します。

このチュートリアルでは、PCにRuby on Rails 5が正常にインストールされていることを前提に説明します。

私が作成した他のチュートリアルのルールに従って、今回は野球選手のリストを管理するためのAPIを作成します。

プロジェクトのディレクトリを作成

Rails 5には「-api」オプションがあり、これはプロジェクトにビューが必要ないことを意味します。

Railsで新しいAPIプロジェクトを作成するには、以下を実行します。

rails new player_api --api
cd player_api

scaffoldを利用してリソースを生成する

今回のプロジェクトはAPIとして作成されているため、コントローラとモデルのみを作成します。scaffoldingでテンプレートが生成されることはありません。

rails g scaffold Player name:string age:integer

./app/controllers/players_controller.rb を見てみましょう。以下のようなコードが表示されるはずです。生成されたコントローラは、APIでないコントローラと見た目が異なることに注意してください。

具体的には、メソッドはJSONのみを受け取り、返します

class PlayersController < ApplicationController
  before_action :set_player, only: [:show, :update, :destroy]

  # GET /players
  def index
    @players = Player.all

    render json: @players
  end

  # GET /players/1
  def show
    render json: @player
  end

  # POST /players
  def create
    @player = Player.new(player_params)

    if @player.save
      render json: @player, status: :created, location: @player
    else
      render json: @player.errors, status: :unprocessable_entity
    end
  end

  # PATCH/PUT /players/1
  def update
    if @player.update(player_params)
      render json: @player
    else
      render json: @player.errors, status: :unprocessable_entity
    end
  end

  # DELETE /players/1
  def destroy
    @player.destroy
  end

  private
    # アクション間で共通の設定や制約を共有するには、コールバック(before_action)を使用します
    def set_player
      @player = Player.find(params[:id])
    end

    # 信頼できるパラメータのみ通過させる
    def player_params
      params.require(:player).permit(:name, :age)
    end
end

データのシード化とDBへの変更点の移行

データベースにプレイデータを追加してみましょう。./db/seeds.rb ファイルに以下のコードを追加するだけです。

Player.create(name: 'Ogino Takashi', age: 36)
Player.create(name: 'Fujiwara Kyota', age: 21)
Player.create(name: 'Nakamura Shogo', age: 29)

以下の2つのコマンドを使用して、変更内容をマイグレートし、シードします。

rails db:migrate
rails db:seed

サーバーを起動する

rails s

動作確認

サーバーが起動した状態で、Webブラウザーを開いて http://localhost:3000/players にアクセスすると、すぐにリソースのGETができます。アクセスすると、シードされたレコードのJSONが表示されるはずです。

今度はRESTクライアントを使って、POSTとDELETEアクションを確認してみましょう。

以下の例では、LinuxやMacOSシステムにデフォルトでインストールされていることが多いcurlを使用しています。

以下のようにして、IDが1の選手をDELETEすることができます。

curl -X DELETE http://localhost:3000/players/1

次に、以下の方法で新しい選手をPOSTしてください。

curl -X POST -H "Content-Type:application/json" -d '{ "name": "Yasuda Hisanori", "age": "22" }' http://localhost:3000/players

以下は、DELETEとPOSTの操作後の結果です。

Ruby on Railsを学習するのにおすすめな教材

タイトルとURLをコピーしました