はじめまして。WEBサービス開発グループで2018年度新入社員の松村です。
みなさんは、Padrinoを聞いたことがありますか?
まず、Padrinoについて簡単に説明させていただきます。
Padrinoとは
Sinatraを基にRubyで書かれた、MVC構造のWEBフレームワークです。
嬉しいポイントは、Ruby on Rails(以下 Rails)と同様Active Recordの恩恵を受けることができるという点です。
開発環境
OS : macOS High Sierra 10.13.6
Rubyバージョン: 2.3.7
RubyGemsバージョン : 2.7.6
Padrinoバージョン : 0.14.3
インストール方法
お使いのパソコンにRuby(Rubyバージョンが1.9以前だと、自分でRubyGemsをインストールする必要がある。)がインストールされている状態で下記コマンドを実行し、Padrinoをインストールします。
1 |
$ gem install padrino |
下記コマンドで実行結果のようにバージョンを表示し、インストールされたことを確認する。
1 |
$ padrino -v |
実行結果
1 |
Padrino v. 0.14.3 |
以上で環境構築は終了です。
では、本題に移ります。
今回は、サッカーチーム作成し、作成されたチームを取得したいと思います。
APIサーバの実装の仕方
1.プロジェクトを作成します。
1 |
$ padrino g project niftyCup -d activerecord |
2.1で作成したプロジェクトに移動し、必要なgemをインストールします
1 |
$ bundler install --binstubs |
3.アプリケーションを作成します。
1 |
$ padrino g app football |
4. チーム作成、取得用のコントローラを作成します。
1 |
padrino g controller team get:index post:create --app football |
5. チームを登録するモデルを作成し、DBに反映させます。
1 2 |
$ padrino g model Team name:string $ rake db:migrate |
以上で下準備は完了です。
続いて、主にファイルを編集していきます。
6. 今回はGetリクエストへのレスポンスをjson形式にするため、tilt-jbuilderというgemを使用します。
1 |
gem "tilt-jbuilder" |
1 |
$ bundle install |
7. Get、Postリクエスト用のルーティングを設定をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
require 'tilt/jbuilder.rb' NiftyCup::Football.controllers :team do get :index do @teams = Team.all #Active Recordで全チームを@teamsに格納 jbuilder :'team/team_index' end post :create do params = JSON.parse(request.body.read) team = Team.new(name: params['name']) team.save! end end |
8. 設定完了後、Getリクエストのレスポンス用にjbuilderファイルを作成します。
1 |
json.teams @teams, :id,:name |
9. 今回は、CSRF設定をfalseにします。
1 |
set :protect_from_csrf, false |
10. プロジェクト下でローカルサーバーを立ち上げます。
1 |
$ padrino s |
11.実際にcurlコマンドを実行し、postリクエストでチーム作成後、getリクエストで取得できるか確認しましょう。
1 |
$ curl -X POST -H "Content-type: application/json" -d '{"name":"balck"}' // blackチーム作成 |
1 |
$ curl http://localhost:3000/football/team |
実行結果
1 |
{"teams":[{"id":14,"name":"balck"}]} |
無事に新チーム作成、チームを取得できていますね。
今回はPadrinoを用いて、簡易APIサーバーを構築しました。
今回初めて触れ、Railsに似ており、Railsユーザーは比較的容易に開発を行えるのではないかと感じました。
やはり、Active Recordを使用できる点が一番嬉しいですね。