#簡単なAPI作成
####今回実装する環境
Railsのバージョンは$rails -v
コマンドで確認できます。
今回は Rails 5.2.3 の環境で実装します。
###1. APIモードのプロジェクト作成
APIモードでプロジェクトを作成する場合は、
プロジェクト製作コマンドに--api
オプションを付与することで作成できます。
$ rails new SampleAPI --api
エラーがなく終了したら終わりです。
###2. Model, Controller作成
次にModel, Controllerを作成します。
今回は面倒を省くためScaffold
を利用します。
Userのモデルにuser_id, name, title, textの項目を所持するように作成します。
rails generate scaffold モデル名 項目1:タイプ 項目2:タイプ ・・・
で作成できます。
$ cd SampleAPI
$ rails generate scaffold users user_id:integer name:string title:string text:text
create ・・・
で終わっていれば問題ありません。
###3. マイグレーション
Controllerは以下のように作成されます。
class UsersController < ApplicationController
before_action :set_user, only: [:show, :update, :destroy]
# GET /users
def index
@users = User.all
render json: @users
end
# GET /users/1
def show
render json: @user
end
# POST /users
def create
@user = User.new(user_params)
if @user.save
render json: @user, status: :created, location: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /users/1
def update
if @user.update(user_params)
render json: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
# DELETE /users/1
def destroy
@user.destroy
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
def user_params
params.require(:user).permit(:user_id, :name, :title, :string, :text)
end
end
モデルは何も書いてない状態です。
class User < ApplicationRecord
end
モデルが作成されたので、マイグレーションを行います。
"マイグレーション = データベースのアップデート作業" と考えてください。
$ rails db:migrate
== 20190620183244 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0025s
== 20190620183244 CreateUsers: migrated (0.0026s) =============================
このような結果があれば問題ありません。
###4. 動作確認その1
では、サーバーを起動してみましょう。
$ rails server
サーバーを起動したら、http:localhost:3000/usersにアクセスします。
この時点ではまだデータがない状態なので、白いページに[ ]
のみ出力されていると思います。
データを保存することで[ ]
の中にデータが入った状態で出力されます。
###5. データを保存
実際にデータをいれてみましょう。
####Restlet Client
今回はwebブラウザにGoogle Chromeを使います。
Google ChromeにRestlet Clientをインストールして使用します。
拡張機能で検索可能です。
Restlet Clientは視覚的にわかりやすいのでオススメです。
####APIのサーバ側にデータ送信&保存
まずrake routes
を実行してください。
$ rake routes
rake aborted!
・・・
もし、rake abortedと表示されたらコマンドの先頭にbundle execを付け足してください。
表示されないの理想です。
$ bundle exec rake routes
Prefix Verb URI Pattern
Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
・・・
このような出力が得られます。
usersの項目のPOSTは
/usersのURLで usersのcreateアクションを呼ぶことがその行からわかります。
=> localhost:3000/usersにデータJSON形式でPOSTするとデータが作成(保存)される
では、実際にやってみましょう。
このようにデータ作成が成功すれば適切にサーバが動いています。
###6. 動作確認その2
最後にwebブラウザなどで指定のURLにアクセスした時、JSON形式のデータが返されるかを確認します。
しっかりとデータがJSON形式で返されていることがみて取れます。
これでAPIの機能を持ったサーバができたと言えます。