11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ruby on Rails 簡単なAPI作成(基礎)

Last updated at Posted at 2019-06-20

#簡単なAPI作成
####今回実装する環境
Railsのバージョンは$rails -vコマンドで確認できます。
今回は Rails 5.2.3 の環境で実装します。


###1. APIモードのプロジェクト作成
APIモードでプロジェクトを作成する場合は、
プロジェクト製作コマンドに--apiオプションを付与することで作成できます。

console
$ rails new SampleAPI --api

エラーがなく終了したら終わりです。


###2. Model, Controller作成
次にModel, Controllerを作成します。
今回は面倒を省くためScaffoldを利用します。
Userのモデルにuser_id, name, title, textの項目を所持するように作成します。
rails generate scaffold モデル名 項目1:タイプ 項目2:タイプ ・・・で作成できます。

console
$ cd SampleAPI
$ rails generate scaffold users user_id:integer name:string title:string text:text

create ・・・
で終わっていれば問題ありません。


###3. マイグレーション
Controllerは以下のように作成されます。

/app/controllers/users_controller.rb
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

モデルは何も書いてない状態です。

/app/models/user.rb
class User < ApplicationRecord
end

モデルが作成されたので、マイグレーションを行います。
"マイグレーション = データベースのアップデート作業" と考えてください。

console
$ rails db:migrate
== 20190620183244 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0025s
== 20190620183244 CreateUsers: migrated (0.0026s) =============================

このような結果があれば問題ありません。


###4. 動作確認その1
では、サーバーを起動してみましょう。

console
$ rails server

サーバーを起動したら、http:localhost:3000/usersにアクセスします。
この時点ではまだデータがない状態なので、白いページに[ ]のみ出力されていると思います。
データを保存することで[ ]の中にデータが入った状態で出力されます。


###5. データを保存
実際にデータをいれてみましょう。
####Restlet Client
今回はwebブラウザにGoogle Chromeを使います。
Google ChromeにRestlet Clientをインストールして使用します。
拡張機能で検索可能です。
Restlet Clientは視覚的にわかりやすいのでオススメです。
####APIのサーバ側にデータ送信&保存
まずrake routesを実行してください。

console
$ rake routes
rake aborted!
   ・・・

もし、rake abortedと表示されたらコマンドの先頭にbundle execを付け足してください。
表示されないの理想です。

concole
$ 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するとデータが作成(保存)される

では、実際にやってみましょう。
ezgif-2-5809a0e54296.gif
このようにデータ作成が成功すれば適切にサーバが動いています。


###6. 動作確認その2
最後にwebブラウザなどで指定のURLにアクセスした時、JSON形式のデータが返されるかを確認します。
ezgif-2-e9295659ad28.gif
しっかりとデータがJSON形式で返されていることがみて取れます。
これでAPIの機能を持ったサーバができたと言えます。

11
11
0

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
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?