LoginSignup
18

More than 5 years have passed since last update.

RailsではじめてのRESTful API を作ってみた。

Last updated at Posted at 2018-10-09

前提

REST(REpresentational State Transfer)の設計原則:airplane:

・リソースは一意に特定できる
・状態を持たない
・URLはリソースの複数形で表す
・URLは動詞を含めず、HTTPメソッドで操作を指定

RESTに基づいてHTTPメソッドでリソースをCRUD操作できる設計をRESTful とか言ったりする。

RESTful API !!

今回のデータの形式はJSONにしてますが

ちょっと前はXMLが主流だったそうです。
JSONってなにもの?

Rails5を使ってます。

Rails5でないと次に出てくるAPIモードを使えないので注意です。

作ってみよう

1. APIモードを使って新規作成

$ rails new driver_api --api

ディレクトリ移動します

$ cd driver_api

2. 運転手さんのModel、Controller作成

$ rails g scaffold drivers

「render json:」がたくさんあるdrivers_controller.rbができてます。

controllers/drivers_controller.rb
class DriversController < ApplicationController
  before_action :set_driver, only: [:show, :update, :destroy]

  # GET /drivers
  def index
    @drivers = Driver.all

    render json: @drivers
  end

  # GET /drivers/1
  def show
    render json: @driver
  end

  # POST /drivers
  def create
    @driver = Driver.new(driver_params)

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

  # PATCH/PUT /drivers/1
  def update
    if @driver.update(driver_params)
      render json: @driver
    else
      render json: @driver.errors, status: :unprocessable_entity
    end
  end

  # DELETE /drivers/1
  def destroy
    @driver.destroy
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_driver
      @driver = Driver.find(params[:id])
    end

    # Only allow a trusted parameter "white list" through.
    def driver_params
      params.fetch(:driver, {})
    end
end

3. カラムを追加

↓こんな感じにしましょう。

カラム データ型
driver_name String 運転手の名前
tel String 電話番号
car_number String 車両番号
$ rails g migration add_column_to_drivers

上記コマンドでmigrationファイルを作成し、下記add_columnのところを追記します。

db/migrate/xxxxxxxxxx_add_column_to_drivers.rb
class AddColumnToDrivers < ActiveRecord::Migration[5.1]
  def change
    add_column :drivers, :name, :string
    add_column :drivers, :tel, :string
    add_column :drivers, :car_number, :string
  end
end

4. マイグレーションを実行

$ rails db:migrate

5. 運転手データ(driver.csv)を、dbディレクトリに格納

データはこちらです。

6. db/seeds.rbを編集

db/seeds.rb
require 'csv'

CSV.foreach('db/driver.csv') do |row|
    Driver.create(:name => row[0],:tel => row[1],:car_number => row[2])
end

7. マイグレーションを実行

$ rails db:seed

⬆️db:seed なの要注意ですね。

実行してみると

下記コマンドでサーバー起動を実行して、

$ rails s

http://localhost:3000/drivers にアクセス。

運転手データがJSONで返ってくることが確認できる。
drivers_JSON.png

次回は外部からデータをPOSTしてみましょう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18