前提
REST(REpresentational State Transfer)の設計原則
・リソースは一意に特定できる
・状態を持たない
・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 にアクセス。
次回は外部からデータをPOSTしてみましょう。