LoginSignup
0
0

More than 1 year has passed since last update.

Ruby on Railsの習得のためタスクリスト的なの作ってみる③〜API開発・呼び出し編〜

Last updated at Posted at 2023-03-04

今回はAPIを開発していきます!早速本題。

設定

こちらを見ながらやっていこう、、

と思ったら、そもそもRailsのプロジェクト作成時ににAPIに不要な機能を除外できるオプションがあるらしい!まじか、適当に作っちゃったよ。
既存のプロジェクトをAPI専用に変更もできるらしいので、こちらの手順でやってみます。

config/application.rbApplicationクラス定義の冒頭に以下の設定を追加すればクラス生成やら利用モジュールやらがAPI用になるらしいです。

config.api_only = true

次に、デバッグ情報をAPIに出力するようconfig/environments/development.rbに設定追加します。

config.debug_exception_response_format = :api

あとは、app/controllers/application_controller.rbにて、クラス継承元をActionController::APIに変えればいいみたいです。config変えたから次作るControllerからは勝手にこうなるっぽい。

app/controllers/application_controller.rb
class ApplicationController < ActionController::API
end

ミドルウェアの追加は必要次第やることにします。

ルーティング

ルーティングはこれを見つつ、こちらの記事も参考に、namespaceとresourcesを使っていい感じに書きます。
resourcesはよく使う複数のルーティングを一行で書けるらしい。便利。ルーティングがどうなっているかはhttp://localhost:{ポート番号}/rails/info/routesで一覧表示できます。

/config/routes.rb
Rails.application.routes.draw do
  namespace :api, format: 'json' do
    namespace :v1 do
      resources :tasks
      resources :users
      resources :login
    end
  end
end

Controllerの作成

$ rails generate controller Tasks

このようなコマンドでcontrollerファイルを生成することができます。
中身はとりあえず適当なjsonを返すだけ。
render json: result;は、return render json: result;の省略らしいです。

/app/controllers/api/v1/tasks_controller.rb
module Api
  module V1    
    class TasksController < ApplicationController
      def index
        result = {taskId: 1, name: 'メール返信', limit: '2023-03-07 00:00:00', priority: 'MIDDLE'}
        render json: result;
      end
    end
  end
end

モジュール名を設定しないと

uninitialized constant Api::V1::TasksController

というエラーが返却されてきました。この文言自体は対象のコントローラーが見つからないという意味みたいです。モジュール名書いて解決!

で、Rubyのモジュールってなんですか? という話。
リファレンスマニュアルをからは、クラスと大体同じように見えます。
↓先人の知恵に頼ります。
クラス・モジュールの概念 Ruby
RubyのModuleの使い方とはいったい
今回ハマった例のように名前空間として使う用法と、メソッドの置き場所として使う用法があるみたいです。後者は、PHPとかでいう静的メソッドの呼び出しみたいに使えるのかな?という感じ。

呼び出してみる

安定と信頼のPostmanで呼び出してみます。

スクリーンショット 2023-03-05 2.43.38.png

無事返ってきました!やったね!

パラメータを受け取る

こちらによると、

params[:param_name]

でクエリパラメータもPOSTで渡されたパラメータも、更にはルーティングで指定したパラメータ(/hoge/fuga/:idみたいなやつ)も全部取れるらしいです。便利〜。

というわけで呼び出し編はここまで!残りの部分は3分クッキング的に作っておきますので。。

次回予告

次回はDBを使っていきたいと思います。
元がMVCフレームワークだし、Modelとか使いやすそうで期待大です!
DDDっぽいのは向いていないという噂を聞いたのでデータベース準拠でやっていくのがいいのかな?というあたりの疑問についても調査したいと思います。がんばるぞい!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0