読者です 読者をやめる 読者になる 読者になる

Rubyで簡単にAPIサーバーを作れるGrapeを使ってみた

やろうやろうと思ってやっていなかったのでやってみた。

Grapeについて

GrapeRubyREST APIサーバー書くときに使えるGem。
そのままRackでも動かせるし、SinatraとかRailsにマウントもできる。

使い方

Railsで使うときの使い方を紹介します。
環境は、

まずは普通にrailsアプリを作る

rails new hoge -d mysql

Gemfileに書いて

gem 'grape'

インストール

bundle install

事前にモデルを作っておく

rails g model huga value:string

APIを作る

ディレクトリはこんな感じで作るらしい

mkdir -p app/api/huga
vim app/api/huga/api.rb

実装はこんな感じ

module Hugas
  class API < Grape::API
    format :json

    resource :hugas do
      get '/' do
        Huga.all
      end

      params do
        requires :value, type: String
      end
      post '/' do
        Huga.create({
          value: params[:value]
        })
      end
    end
  end
end

リソースのブロックの中にget,post…とかって書いていく。
paramsを書いとくとバリデートとかもできる。

設定周り

  • ルーティング
    config/route.rbに以下のように追記
mount Hugas::API => '/'
  • パスを通す
    config/application.rbに追記
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
  • migrate(モデル作ったらすぐやっておいても可)
rake db:create && rake db:migrate

実行してみる

rails s

トップページはいつものRails画面のはずなので、「http://localhost:3000/hugas」にアクセスして空のJSONが返ってきてれば多分うまくいっている。

f:id:syguer:20140708235725p:plain

Chromepostmanとか使ってデータを登録してみる。

f:id:syguer:20140709000115p:plain

うまくいってるっぽい

f:id:syguer:20140709000135p:plain

他にも認証周りとかいろいろできるらしいので、もっと普通に使ってみたいところ。
ただ、そんなに規模が大きくないならSinatraで書くのと大差ない気もした

おまけ

ついでに前から触りたかったAngularJSを使ってAPIにアクセスするアプリを作ってみた。
といってもpublicの下にゴリゴリ書いてアクセスするだけだけれどもw
お題は異動になった同僚の送別会で渡す物を決めるために、候補の中からどれがいいか投票するアプリってやつ。

f:id:syguer:20140709000823p:plain

ソースはgithubにあります。
https://github.com/syguer/voter

そもそも設計がおかしいのを除いても多分色々イケてないのでプルリクお待ちしてます!