質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

3415閲覧

既存のRailsアプリにJSONを返すAPIを実装したい上でのベストプラクティス

widget11

総合スコア221

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/06/08 05:12

やりたい事
・既存のrails webアプリにAPIを実装する
・リクエストしてきたクライアントによってサーバーで返す値を変えたい
・現状はアクションの最後に@〇〇と書いてview(erb)に値を渡しているのみ

ネットで調べているとrailsをapiとして使いたい場合は
apiモードとしてプロジェクトを立ち上げクライアント側から呼び出しているサンプルが大半で、既存のアプリにどう組み込むかという記事が少ない気がしています。

今はこちらの記事を参考に、
https://qiita.com/kotaroooo0/items/1af71180c220e112dcd3

webからリクエストが来た場合と、iOSからリクエストが来た場合に返す値を切り分けたいと考えています。
そこで質問なのですが、
このように既存のwebアプリにAPIを組み込みたい場合、コントローラーごと通常用とAPI様で切り分けるべきなのでしょうか?

例えばbooks_controller.rbとbooks_api_controller.rbを作成し、ベットapiコントローラーのルーティングを作る。
apiコントローラーの値はjbuilderを使ってjsonを組み立てるべきか。

もしくはrespond_toメソッドとjbuilderを組み合わせて使って

respond_to do |format| if @book.save! format.html { redirect_to root_path } format.json {render :json => オブジェクト} end

の様に一つのコントローラーで完結すべきなのかという質問です。

ご回答よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

一個人としての意見ですが、

例えばbooks_controller.rbとbooks_api_controller.rbを作成し、ベットapiコントローラーのルーティングを作る。

こちらを選択すべきだと思います。

APIに手を加えてバージョンアップし、返すパラメータの構造に変更があった場合、古いバージョンのAPIを利用しているものについて不具合が生じることのないように旧バージョンと新バージョン両方とも利用できるような形にする場合が多いです。

text

1api/v1/books 2api/v2/books

のようにバージョンごとにURLを用意し、

text

1app 2└ controllers 3  └ api 4    ├ v1 5    │ └ books_controller.rb 6    └ v2 7      └ books_controller.rb

バージョンアップするごとにディレクトリを掘っていくような形です。こういった運用を想定した場合、必然的に

例えばbooks_controller.rbとbooks_api_controller.rbを作成し、ベットapiコントローラーのルーティングを作る。

といった方法を取らざるをえなくなると思います。

ただしAPIを外部に公開することなく、返すパラメータに変更があった場合の考慮が不要な場合はその限りではないです。

投稿2020/06/08 05:42

Mugheart

総合スコア2344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

widget11

2020/06/08 16:47

なるほど!!!勉強になります! よくあるAPIのrequest urlがこんな感じですよね! ありがとうございます!
guest

0

WebAPIというのは単にJSONを返すだけのものです。
また、HTMLを返す必要はないので、respond_to formatすら不要です。

ruby

1class SampleController 2 3 def sample 4 # クライアントへ返却する結果 5 # HashまたはArray 6 result = { 7 } 8 9 render json: result 10 end 11 12end

jsonを構築するところは、jbuilderを使っても良いですし、
普通にHashやArrayをコードでガリガリ書いて行ってもOKです。

APIと通常のウェブページでは、利用シーンや求められる機能が異なるのが一般的です。
従って、API専用コントローラを作るべきと考えます。

投稿2020/06/08 05:42

mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問