railsでは5系からAPIモードなるviewを作成しないウェブサーバー専用のプロジェクトが出来るようになったらしく、そのリファレンスは比較的に多いのですが既存のwebアプリをサーバーサイド連携させたい場合のリファレンスが少ない為質問します。
当方モバイル開発はズブの素人です。
サーバーサイド連携を行うに辺り調べてみると、通常htmlに返す値をjson等のデータフォーマットにレンダリングするのがベターな様なのですが。。。
まず
①既存のアプリのコントローラーに条件分岐の様な形でjsonをレンダリングしてあげるべきなのか、もしくはAPI用のコントローラーを作成してあげるべきなのかが分からないです。
railsでscaffoldすると以下のようなコードがコントローラーに生成されると思います
def create #中略 respond_to do |format| if @user.save format.html { redirect_to @user, notice: 'User was successfully created.' } format.json { render :show, status: :created, location: @user } else format.html { render :new } format.json { render json: @user.errors, status: :unprocessable_entity } end end end
クライアントからの要求に応じてhtmlを返したり、jsonを返したりというのをコントローラーで書けるようですがこのように設計すべきか、もしくは同一の内容のjsonを返すAPI用コントローラーを作成すべきかどうかが分かりません。
②viewにロジックを書き込むのはやめた方がいいのか分からないです
<% if user_signed_in? %> <%= render 'layouts/login_user_header' %> <% else %>
例えばdeviseを使う際にこのようにメソッドがviewに書かれているコードは多く見受けられますが、当然jsonを返してあげるアクションを定義するとなると、viewにかかれているロジックはモバイル開発する際に使えなくなると思います。そのためモバイル開発する際の開発コストを下げる意味でもやはりロジックをviewに書き込むのはやめたほうがいいのでしょうか?
その場合、表示用ロジックを書き込むviewmodelやプレゼンテーションクラスを作成(decoratorデザインパターン)を採用するのは有用なパターンでしょうか?(あまりしっかり仕様を確認していないのですが DraperやActive Decoratorのようなライブラリを使うのは吉でしょうか?)
③曖昧な質問で申し訳ございませんが、その他注意点等はございますでしょうか?
質問が多くなってしまい申し訳ございませんが、よろしくお願い致します。
あなたの回答
tips
プレビュー