0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】記事の一覧を取得するAPIの作成

Posted at

Rails APIについて学習しています。
今回は、アクセスしたときに記事の一覧を取得するAPIを作成していきます。

  1. http://localhost:3000/api/v1/articlesにアクセス
  2. 記事の一覧をJSON形式で取得する

出力イメージ(Postman)

スクリーンショット 2023-07-08 18.22.38.jpg

事前準備

以下、モデル・テーブルを事前に準備していることを前提にしています。

  • Userテーブル
  • Profileテーブル
  • Articleテーブル
  • Commentテーブル

fast_jsonapiを使用して実装していく

  • jsonのserializer は fast_jsonapi を使用していきます。
  • fast_jsonapiとは、Netflixが提供しているgemのこと。
  • Ruby on RailsのAPI開発でよく使われるJSONシリアライズライブラリ。
  • シリアライズの速さを重視して作られているのが特徴。
  • このライブラリを使うと、RubyオブジェクトをJSON形式に変換する処理を高速化できる
  • jsonのserializerとは、json を生成する仕組みのこと。
  • 現在このパッケージは、保守がなされていないようなので、今後は使用する機会は少ないかも?

fast_jsonapiをインストール


gem 'fast_jsonapi'

バンドルインストールを実行


$ bundle install

コマンドで新しいシリアライザーを作成


$ rails g serializer Article title contents status

上記コマンドを実行すると、app/serializers/article_serializer.rbが生成されます。

生成されたシリアライザーに設定を追記


class ArticleSerializer
  include FastJsonapi::ObjectSerializer
  attributes :title, :contents, :status
  belongs_to :user # ← ここを追記
end

  • このコードは、RubyのSerializerクラスを定義している。
  • 具体的には、ArticleモデルのデータをJSON形式に変換するための設定が書かれている。
  • まず、class ArticleSerializerという行で、ArticleSerializerという新しいクラスを定義している。
  • include FastJsonapi::ObjectSerializerというモジュールを取り込んでいる。
  • FastJsonapiはNetflixが開発した高速なJSON APIのシリアライズライブラリ。この行により、ArticleSerializerクラスはFastJsonapi::ObjectSerializerの機能を使えるようになる。
  • attributes :title, :contents, :statusでは、Articleモデルの:title, :contents, :statusの3つの属性を取り出し、JSONに変換することを指定している。
  • belongs_to :userは、ArticleモデルがUserモデルに属していることを示す関連付けを定義している。これにより、ArticleのデータをJSONに変換する際に、関連するUserのデータも一緒に取得できるようになる。

コントローラで一覧記事を呼び出す実装

# app/controllers/api/v1/articles_controller.rb

module Api
  module V1
    class ArticlesController < BaseController
      def index
        articles = Article.all
        json_string = ArticleSerializer.new(articles).serialized_json
        render json: json_string
      end
    end
  end
end

  • このコードは、Ruby on RailsのAPIコントローラーを定義している。
  • 具体的には、Api::V1::ArticlesControllerという名前のクラスが定義されていて、その中にindexという名前のアクションがある。
  • このindexアクションは、全てのArticleレコードを取得し、それらをJSON形式に変換してクライアントに返す役割を持っている。
  • まず、articles = Article.allでは、全てのArticleレコードを取得して、それらをarticlesという変数に代入している。
  • 次にjson_string = ArticleSerializer.new(articles).serialized_jsonという行では、取得したArticleレコードをJSON形式に変換している。
  • 具体的には、ArticleSerializerのインスタンスを作り、そのserialized_jsonメソッドを呼び出している。
  • そして、最後にrender json: json_stringという行で、変換したJSONをクライアントに返している。

最後にPostmanでリクエストを送ってみる


GET  http://localhost:3000/api/v1/articles

スクリーンショット 2023-07-08 18.22.38.jpg

無事、記事一覧のレスポンスをJSON形式で取得する事ができました。
また、ブラウザでアクセスしてみると、以下のような表示で確認できます。

スクリーンショット 2023-07-08 18.53.28.jpg

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?