はじめに
Ruby on Rails 4を使ってRESTfulなAPIサーバを作ってみます。RoRを触るのは数年ぶりなのでググりながらやってみた結果のメモとなります。
環境
そもそも新しいrubyが入っていなかったので入れます。rvmというのが便利らしい。nodeでいうnvmやnodebrewですね。
あと、mysqlを入れておきます。
よし、下準備ができました。
uname -a Linux mnu13 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux curl -sSL https://get.rvm.io | bash -s stable source ~/.bash_profile rvm install 2.1 rvm use 2.1 ruby -v ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux] gem -v 2.2.2
あと、mysqlを入れておきます。
sudo apt-get install mysql-server mysql-client libmysqlclient-devrootのパスワードはrootとしました。
よし、下準備ができました。
Railsで雛形の作成
railsのgemを入れます。
restserverという名前のプロジェクトを新しく作ります。
色々ファイルが生成されました。
mysqlのrootのパスワードを設定する必要があります。
DBを作ります。
適当なmodelを作ってDBをmigrateします。今回はありがちですがメモアプリということで、タイトルと中身と作者を記録します。
サーバを起動します。
http://localhost:3000/memos
にアクセスすれば、既に簡単なメモアプリが完成しています。
あ、ありのまま今起こったことを話すぜ、railsをinstallして数回CUIを叩いたらメモアプリが出来ていた…jsとかhtmlとかsqlとかそんなチャチなものじゃない、もっと恐ろしいものの片鱗を味わったぜ… (みんな知ってるから!)
gem install rails rails -v Rails 4.1.5
restserverという名前のプロジェクトを新しく作ります。
rails new restserver -d mysql
色々ファイルが生成されました。
mysqlのrootのパスワードを設定する必要があります。
cd restserver vi config/database.yml :s/password:/password: root/ ZZ
DBを作ります。
bin/rake db:create db:migrate
適当なmodelを作ってDBをmigrateします。今回はありがちですがメモアプリということで、タイトルと中身と作者を記録します。
bundle exec rails generate scaffold memo title:string author:string body:text bin/rake db:migrate
サーバを起動します。
bin/rails server
http:/
にアクセスすれば、既に簡単なメモアプリが完成しています。
あ、ありのまま今起こったことを話すぜ、railsをinstallして数回CUIを叩いたらメモアプリが出来ていた…jsとかhtmlとかsqlとかそんなチャチなものじゃない、もっと恐ろしいものの片鱗を味わったぜ… (みんな知ってるから!)
Grapeを使ったRESTful APIの追加
REST APIを追加するにはgrapeというgemが良いらしい。
http://intridea.github.io/grape/docs
Gemfileに
app/api/api.rbを新規作成。versionごとに分けることを見据えておきます。
app/api/api_v1.rbを新規作成。
config/routes.rbに下記を追加。
config/application.rbに下記を追加。
http:/
Gemfileに
gem 'grape'を追加。
bundle install
app/api/api.rbを新規作成。versionごとに分けることを見据えておきます。
require 'api_v1.rb' module API class Base < Grape::API mount API::V1 end end
app/api/api_v1.rbを新規作成。
module API class V1 < Grape::API prefix 'v1' format :json get :hello do { text:'hello' } end resource :memos do get do Memo.all end get ':id' do Memo.find(params[:id]) end post do Memo.create( :title => params[:title], :body => params[:body], :author => params[:author] ) end end end end
config/routes.rbに下記を追加。
mount API::Base => '/api'
config/application.rbに下記を追加。
config.paths.add "app/api", glob: "**/*.rb" config.autoload_paths += Dir["#{Rails.root}/app/api/*"]
動作確認
curl -X POST -H "Content-Type: application/json" -d '{"title":"ramen","author":"mtm","body":"jiro saiko"}' http://localhost:3000/api/v1/memos curl http://localhost:3000/api/v1/memos curl http://localhost:3000/api/v1/memos/1等としてAPIが機能していることを確かめましょう。
今回ここに書いたものは非常に初歩的な例なので、より高度な使い方はgrapeのドキュメントや下記を参照してください。
参考文献
RailsとGrapeで行う最高のWeb API開発
http://qiita.com/anoworl/items/756f01cc3d188ebad139
テストの仕方も含めてやり方が書いてあります。
Grape - RailsでスピーディにAPIを作成!
http://morizyun.github.io/blog/rails-grepe-api-heroku-ruby
twitterぽいAPIの作り方。requireのあたり参考になります。
https://github.com/bloudraak/grape-sample-blog-api
Rails3でgrape使ってAPI付きブログのサンプルを作ってみたよ、というレポジトリ。
簡単インストールから始める初心者のためのRuby on Railsチュートリアル (1/3)
http://www.atmarkit.co.jp/ait/articles/1402/28/news047.html
そもそもRoRってどうやって使うんだっけ、と思って最初にこれを見ました。
http:/
テストの仕方も含めてやり方が書いてあります。
Grape - RailsでスピーディにAPIを作成!
http:/
twitterぽいAPIの作り方。requireのあたり参考になります。
https:/
Rails3でgrape使ってAPI付きブログのサンプルを作ってみたよ、というレポジトリ。
簡単インストールから始める初心者のためのRuby on Railsチュートリアル (1/3)
http:/
そもそもRoRってどうやって使うんだっけ、と思って最初にこれを見ました。