旅好きエンジニアのメモ

旅のこと映画、統計、会計、プログラミングなど、気の向くままに語ります

rails5でapiを作成する方法

apiの改修することはあれども今までapiの作成を初めからしたことなかったので 簡単に作った時のメモをしておきます。

環境

ruby 2.4.2p198 Rails 5.1.4 sqlite3(初期設定のものを使っています)

アプリ作成

まず、適当にrails アプリ作りましょう。

rails new webapp

例として著者(Articles)を検索するapiを作成します。

マイグレーションファイル

マイグレーションファイルはこんな感じです db/migrate/20170808181112_create_articles.rb

class CreateArticles < ActiveRecord::Migration[5.0]
  def change
    create_table :articles do |t|
      t.string :title
      t.text :content
      t.index [:title,:content]
      t.timestamps
    end
  end
end

migrateしてテーブル作りましょう

rails db:migrate
モデル

モデルを書きましょう。(特にvalidation checkとかは書いてません。active record 使うためだけに書いてます) models/article.rb

class Article < ActiveRecord::Base
end
ルーティング

ルーティングはこんな感じでv1とかバージョニング管理できるようにしています。 routes.rb

Rails.application.routes.draw do
  namespace :api, {format: 'json'} do
    namespace :v1 do
      namespace :article do
        get "/" , :action => "index"
      end
    end
  end
end
コントローラー

最後にコントローラーです。一応タイトルで検索できるようにしています。 controllers/api/v1/article_controller.rb

module Api
  module V1
    class Api::V1::ArticleController < ApplicationController
      def index
          @article = Article.where("title = ?", params[:title])
          render json: @article
      end
    end
  end
end

ちなみにキャッシュ作れるのでこっちのほうが早くなります。

module Api
  module V1
    class Api::V1::ArticleController < ApplicationController
      def index
          @article = Rails.cache.fetch('article', expires_in: 60.seconds) do
            Article.where("title = ?", params[:title])
          end
          render json: @article
      end
    end
  end
end

"params[:title]"は渡ってくるパラメータです。params[]はrailsでうまくやってくれているので 例えば以下のように検索すれば params[:title]は"sample"になります。 http://localhost:3000/api/v1/article?title=sample

以下だと、 params[:title]は"sample" params[:content]は"aaa"になります。 http://localhost:3000/api/v1/article?title=sample&content=aaa

データを入れる

では、サーバーを立ち上げる前にデータを入れてみましょう。 以下コマンドでコンソールに入ります。

rails c

コンソールでデータを1件だけ作ります。

data=Article.new
data.title = "sample"
data.content = "aaa"
data.save!

先程作ったデータがあるか確かめます。

Article.first
確認

最後にサーバーを立ち上げてチェックしましょう。

rails s

ブラウザ(cheromeとか)で以下のurlを打ってみると先程いれたデータがjsonで返ってくるのが確認できるはずです。 http://localhost:3000/api/v1/article?title=sample

まとめ

rails5はapiだけの機能のアプリも作れますのでそちらでアプリを作っても良いかもしれません。 そのときの作り方はオプションでapi付けるだけです。

rails new weapp --api

これを機にapi開発をやってみてはいかがでしょうか。