Rails5には「APIモード」と呼ばれるモードが搭載されており、Railsを使ってAPIを作成する事が可能です(しかも簡単に!)。
仕組みさえ理解したらいくらでも応用が効くので、Railsをある程度学習した人は是非一度体験しておくと良いと思います。
スポンサードリンク
目次
アプリケーションを作成する
まずはRailsのバージョンが5である事を確認しておきます。
$ rails -v Rails 5.2.1
5であればアプリケーションを作成します。
$ rails new rails-api --api
newする時に「–api」オプションを付けるとAPIモードでRailsアプリケーションを作成する事が可能です。
アプリを作成したら bundle install でgemをインストールしましょう。その後、rails s にてサーバーを立ち上げ、localhostでrailsのページにアクセスできるか確認します。
APIでレスポンスとして返すモデルを作成する
次に、モデルを作成します。このモデルが実際にAPIのレスポンスとして返るデータ構造そのものになります。
$ rails g model User name:string email:string age:integer
生成されたマイグレーションファイルは以下の様になります
class CreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| t.string :name t.string :email t.integer :age t.timestamps end end end
内容を確認して問題がなければ rails db:migrate を行なってマイグレーションします。
これでモデルの作成は終了です。
スポンサードリンク
ルーティングを設定する
次に、ルーティングを設定しておきます。ここで設定したルーティングがAPIを返すためのURLなので、以下のように設定しておきましょう。
Rails.application.routes.draw do resources :users, only: [:index, :show] end
この設定によるルーティングは以下の様になります。
Prefix Verb URI Pattern Controller#Action users GET /users(.:format) users#index user GET /users/:id(.:format) users#show
コントローラーを作成する
さて、コントローラが未だできていないので作成していきましょう。
$ rails g controller users index show
今回必要なアクションは「index」と「show」だけなので、このようなコマンドで大丈夫です。
作成されたUsersコントローラを以下の様に変更してみましょう。
class UsersController < ApplicationController def index @users = User.all render json: @users end def show @user = User.find(params[:id]) render json: @user end end
これでAPIを返す準備が整いました。(え!もう!?笑)
APIが返ってくるか確認する
では実際にAPIが返ってくるか確認してみましょう!rails s にてサーバーを立ち上げた後、http://localhost:3000/users にアクセスしてみてください。
無事jsonがレスポンスとして返ってきているのが確認できるかと思います。(ただの空の配列の状態ですが、json形式です。)
今はまだデータが入っていないので、ちょっとデータを入れてみましょう。折角なのでgemを使ってダミーデータを投入してみましょうか。
番外編:fakerを使ってダミーデータを投入する
Gemfileにgemを追加します。
gem 'faker'
$ bundle install してgemをインストールして下さい。
次に、$ vi db/seed.rb で seed.rbを作成します。そこにダミーデータ投入用のコードを記述します。以下をコピペ。
100.times do User.create( name: Faker::Name.name, email: Faker::Internet.email, age: rand(15..60) ) end
保存したら、$ rails:db seed コマンドを実行しすると、ダミーデータが100個投入されます。
(自分の環境では以下の様になりました。fakerは楽にダミーデータが投入できるので良いですね)
#<ActiveRecord::Relation [#<User id: 1, name: "Mariano Bauch DDS", email: "marybethberge@mrazkoch.com", age: 17, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 2, name: "Maragaret Murray", email: "ayakohuels@bailey.org", age: 47, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 3, name: "Ms. Leonie Hoeger", email: "kris@windlergibson.com", age: 29, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 4, name: "Eliseo Stiedemann", email: "simonelemke@johns.co", age: 60, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 5, name: "Melva Watsica", email: "efrainthompson@ritchie.co", age: 34, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 6, name: "Mrs. Kelley McGlynn", email: "loyd@wolffnitzsche.io", age: 39, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 7, name: "Johnnie Klein", email: "toneycasper@hoegergoyette.net", age: 40, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 8, name: "Katrice Durgan", email: "freda@gleasonosinski.net", age: 37, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 9, name: "Grant Ledner", email: "bradygorczany@cainrohan.org", age: 44, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 10, name: "Racheal Ullrich", email: "hymanlittle@haag.name", age: 32, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, ...]> irb(main):002:0>
改めて同じページにアクセスしてみる
では、再度 http://localhost:3000/users にアクセスしてみて下さい。
ちゃんとjsonデータが返ってきています!ついでに http://localhost:3000/users/1 にもアクセスしてみましょう。
idが1のUserデータがきちんとレスポンスとして返ってきていますね!
APIモードで作成したアプリの差分
Rails5でAPIモードでアプリを作成すると、通常のアプリ作成と何が事なるのでしょうか。
正直知らなくても良いのですが、ちょっとした知識として把握しておくと良いかと思います。
sass-rails
uglifier
coffee-rails
therubyracer
jquery-rails
turbolinks
web-console
等のUI関連のgemが省かれています。さらに、APIとして動作するのでビューファイル関連のファイルも一式無いです。ペルパー等もありません。
そして、config/environment/ 配下のファイルについてアセット関連の記述が無くなっていたり、config/initializers/ 配下のアセットやらのファイルもありません。
APIモードでのコントローラはActionController::APIを継承しています。
class ApplicationController < ActionController::API end
まとめ
Rails5のAPIモードについてアプリを実際に作成して解説していきました。
結構作るの簡単じゃないですか?少なくとも僕は「APIを作る」という事は難しそうなイメージだったので最初「Railsで簡単にAPIを作れる」という事を知った時に感動しました。
バックエンドはRailsでAPIを作成して処理を行い、フロントはAPIを使って今流行りのVue.jsを使ってアプリを作ると面白そうだな〜と思ったりしました。
これからもRailsのAPIモードをどんどん活用していきましょう!
未経験から効率よくWebプログラミングを学習したいのであればプログラミングスクールの「テックブースト」をオススメします。オンラインでどこにいても聞き放題です。無料カウンセリングも行なっているので一度話を聞きに行ってみるというのもアリだと思います。
スポンサードリンク
コメントを残す