Railsで使えるGem

Backbone.jsのためにRails3.2でJSON APIをつくる~RABL

投稿日:

github.com/nesquena/rabl

railscasts.com/episodes/322-rabl?language=ja&view=asciicast

Rails3.2ではデフォルトでJSONを提供していて色々json_asっていうのをオーバーライドすればいろいろカスタマイズできるけど、RABLというテンプレートシステムを使うと簡単にJSONが書ける

Backbone.js on Railsがこちらを使っていたので

Rails4からはrbファイルをテンプレートにできるけど、こっちも便利かもしれない

インストール

Gemfile

yajlは高速なJSONパーサー

bundle

計画と準備

model

掲示板をつくりたいので、つぎのようなモデルで提供するAPIを考える

 
役割メソッドとURL
記事の一覧GET /api/article
個別記事の表示GET /api/article/:id
記事の投稿POST /api/article
コメントの投稿POST /api/comment

commentはarticleに完全に従属してるので api/article/:article_id/commentの方がよかったかも

controller

controllerはAPI提供用のを2つとページ表示用のを準備(複数形にしとくべきだった)

config/routes

 

article_controller

comment_controller

あ、コメントの方エラー処理忘れてる

rablテンプレートを使うのはarticle#indexとarticle#show

RABLテンプレート

index.json.rabl

今回は作成日時を入れたかったんですね

*訂正

オブジェクトのコレクションの場合はcollectionを使うのが正しいようです

また、その場で計算したい場合はcodeブロックを使うと便利

こんな感じで返ってきます(後で書いてあるルート名を表示しない設定をしています)

 

show.json.rabl

記事と関連するコメントをまとめて取得するにはchildを使う

試してみる

ためしにデータを入れてみて

 

curlで

コメントは2個くらいいれてみたりして

curlで取れることを確認

 Configuration

データは来てるけど、このままだとBackbone.jsで処理するには都合が悪い

データの頭と関連するデータの頭に余分なモデル名がついてるから

これで1階層データが深くなると面倒くさいことになる

そこで、config/initializers/rabl.rbをつくって

github.com/nesquena/rabl#configuration

これで扱いやすくなった

 

[Rails]Railsを使ったRESTfulなAPIの作り方

Railsのhelperメソッドの使い方

nodeはJSONの要素の単位 次にkey名とvalue ここではcollectionを使っているので1objectごとにrecipeという名前をつけてヘルパーを使っている

-Railsで使えるGem
-,

執筆者:

関連記事

no image

Rails3.2でユーザー管理機能を追加2~Devise+AjaxDataTables

  前回 Rails3.2でユーザー管理機能を追加~Devise 参照 Railsでajaxなテーブルを使う~datatables   いままでAjaxでのデータ更新ができなかった …

no image

Rails3.2でOpenDocumentText(.odt)を作成~serenity

  これも途中経過デス   odtはOpenOffice.orgのwriterなんかの保存形式 serenityはerbライクなodtテンプレートから変数を利用して文書を作成してく …

全文検索エンジンGroongaをRubyから利用するライブラリのチュートリアルをやってみた〜rroonga

By: Kevin Jarrett – CC BY 2.0 目次1 Groonga2 Groongaのインストール3 rroongaのインストール4 チュートリアルの開始5 データベースの …

Ubuntu ServerのGuardからGrowl for Windowsにネットワーク経由で通知する

github.com/guard/guard 普段はWindows7から仮想環境(VirtualBox)のUbuntu Server 12.04.1へputtyで接続して開発してます. Virtual …

Rubyでd3.jsのapiリファレンスの一覧を取得してくる~mechanize

  d3.jsにはlayoutというおおまかに準備されたレイアウトがあって、その中にあるTreeレイアウトを試してみることにした d3.js自身のapiリファレンスが階層構造になっているので …