はじめに
Ruby on Railsを使ったWebAPI作成をGrapeを使った構成にする。ついでなのでRailsアプリ自体をAPIモードというので新規作成してみる。
今回作る構成は踏み台サーバーとしての構成です。
APIを叩くと他サービスのAPIを叩くという構成にしていきたいので、DBなしの最小の最小構成にしてみます。
Grapeって?
端的に書くと「RubyでREST APIを実装するためのフレームワーク」のことで、RailsにGrapeを組み合わせることで捗って楽だよってやつのようです。
もちろん標準のRailsでControllerで処理を書いて~ってやってもいいのですが、まっさらな状態からWebAPI作るならせっかくだからそういう便利ツールも覚えておこうってことでやってみました。
APIモードでのRailsアプリの作成
プロジェクトを生成する
rails new rails_api_grape --api -T
通常と違うのは–apiオプションを付けているところです。
今回はテスト関連もいらなかったので-Tオプションも指定しています。
gemfileの29行目のコメントアウトを外す。
クロスオリジンでのアクセスを許可するために必要です。
その後プロジェクトがあるディレクトリ配下でbundle installを実行。
corsの設定ファイルを編集
先ほどのbundle installで生成されたファイルが「/config/initializers/cors.rb」にあるので、そのファイルを以下に編集する
# Be sure to restart your server when you modify this file.
# Avoid CORS issues when API is called from the frontend app.
# Handle Cross-Origin Resource Sharing (CORS) in order to accept cross-origin AJAX requests.
# Read more: https://github.com/cyu/rack-cors
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
Grapeのインストール
前回Railsでbootstrap4を使えるようにしたときと同じ感じで、Gemfileに以下を追加し、bundle installコマンドを叩く。
gem 'grape'
ディレクトリの準備
appディレクトリ下に、以下のようにディレクトリを新規作成する
baseAPIを作成し、routesでマウントする。
module Base
class API < Grape::API
mount V1::Root
end
end
Rails.application.routes.draw do
mount Base::API => '/'
end
各APIをマウントするファイル(root.rb)を作成する
module V1
class Root < Grape::API
prefix "api"
version :'v1'
format :json
# mount V1::Tests
end
end
APIを実装する
tests.rb
module V1
class Tests < Grape::API
desc ''
get '/tests' do
{ status: 'SUCCESS', message: 'loaded posts', data: '' }
end
end
end
localhost/api/v1/testsにアクセスしてみる
こんな感じのレスポンスが表示されればOK
これをベースに各処理を追加していく。
{"status":"SUCCESS","message":"loaded posts","data":""}