LoginSignup
4
3

More than 5 years have passed since last update.

Rails::APIを使ってノンコーディングでAPIサーバーを作る

Posted at

Ruby on Railsを使ってノンコーディングでAPIサーバーを作るRails::APIを使ったバリエーションです。

前提

  • ページングを扱いません
  • モデルの関連を扱いません
  • Ubuntu 14.04
  • Ruby 2.2.5
  • Rails 4.2.6
  • Rails::API 0.4.0
  • MySQL 5.7

準備

OttoでRubyアプリケーション向けの環境を作りました。
ライブラリ類はだいたい入っている前提です。

アプリケーションを作る前は、MySQLで必要なライブラリが入らないので

sudo apt-get install libmysqlclient-dev

を実行します。

Ottoの環境の作り方はottoで構築する環境のubuntuのバージョンを上げるを見てください。
今日の時点では割と高いハードルです。

手順

Railsを直接使うのと比べると

  • config/application.rb編集
  • protect_from_forgeryの無効化

が、なくなります。

Rails::APIをインストール

gem install rails-api

Railsアプリケーションを作成

rails-api new battle_beast -BJTS -d mysql

オプションで次の指定をします。

  • bundle installを行わない
  • javascriptを組み込まない
  • test::unitを組み込まない
  • sprocketsを組み込まない
  • データベースの種類にmysqlを指定

Gemfile編集

使わない

  • spring

を消します。

source 'https://rubygems.org'

gem 'rails', '4.2.6'
gem 'rails-api'
gem 'mysql2'

bundle install

bundle install --without staging production --jobs=4

scaffold

bundle exec rails generate scaffold User name:string

config/database.ymlを修正

username: root
password: root
host: mysql.service.consul

DB作成

rake db:create
rake db:migrate

起動

rackupコマンドが入っていないので、railsコマンドから起動します。

bundle exec rails s -b 0.0.0.0 -p 9292

動作確認

IPアドレスはVirtualBox上の仮想環境のIPアドレスです。
各自の環境に合わせて、適当に読み替えてください。

POST

curl -XPOST 'http://100.92.136.162:9292/users' -H content-type:application/json -d '{
  "user": {"name": "桂歌丸"}
}'

送信するデータにキーuserが必要です。

生成されたuser_controller.rbがStrong Parametersを使っています。

def user_params
  params.require(:user).permit(:name)
end

» Rails4 の Strong Parameters でリクエストパラメータを検証する TECHSCORE BLOG

「params.require(:user).permit(:name, :email)」となっています。
このコードは「params が :user というキーを持ち、params[:user] は :name 及び :email というキーを持つハッシュであること」を検証します。

GET

curl 'http://100.92.136.162:9292/users'

レスポンスは

[{"id":1,"name":"桂歌丸","created_at":"2016-05-04T12:55:05.000Z","updated_at":"2016-05-04T12:55:05.000Z"}]

です。

PUT

curl -XPUT 'http://100.92.136.162:9292/users/1' -H content-type:application/json -d '{
  "user": {"name": "イチロー"}
}'

DELETE

curl -XDELETE 'http://100.92.136.162:9292/users/1'

感想

使い勝手は、Railsコマンドとほとんど変わりません。
設定手順が減る分、楽です。

jsonの形式が変わるのが、要件によっては気になるかもしれません。
特に設定なしでGETするURLがブラウザで開けます。便利です。
例外時のレスポンスがhtmlなのはイマイチでした。

参考

4
3
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
4
3