Rails: ActiveModelSerializersでAPIを作る–Part 1(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Rails API with Active Model Serializers – Part 1 著者: Piotr Jaworski サイト: https://www.nopio.com/ — RailsやWordPressの請負開発を行うポーランドの会社です。 Part 1チュートリアルリポジトリ: nopio/rails_api_tutorial_part1 Rails: ActiveModelSerializersでAPIを作る–Part 1(翻訳) 本チュートリアルでは、図書館の業務フロー編成を助けるAPIを作成することにします。このAPIでは、本の貸出、返却、ユーザーの作成、本の作成、著者の作成を行います。さらに、本/著者/ユーザーの作成/読み出し/更新/削除(CRUD)を行う管理ページは管理者だけがアクセスできるようにします。認証はHTTPトークン経由で扱うことにします。 API作成のため、Rails API 5にActiveModelSerializersを併用します。次回は、ここで作成するAPIのフルテストを行う予定です。 それでは、まっさらのRails APIアプリを作るところから始めてみましょう。 $ rails new library –api –database=postgresql 終わったらGemfileを以下の内容に差し替えて、active_model_serializers、faker、rack-corsの3つのgemを追加します。 訳注: 原文のRailsバージョンは5.0.1です。Rails 5.1.4で動作を確認しました。 source ‘https://rubygems.org’ git_source(:github) do |repo_name| repo_name = “#{repo_name}/#{repo_name}” unless repo_name.include?(“/”) “https://github.com/#{repo_name}.git” end gem ‘rails’, ‘~> 5.0.1’ gem ‘pg’, ‘~> 0.18’ gem ‘puma’, ‘~> 3.0’ gem ‘active_model_serializers’, ‘~> 0.10.0’ gem ‘rack-cors’ group :development, :test do gem ‘pry-rails’ gem ‘faker’ end group :development do gem ‘bullet’ gem ‘listen’, ‘~> 3.0.5’ gem ‘spring’ gem ‘spring-watcher-listen’, ‘~> 2.0.0’ end $ bundle install ActiveModelSerializers: JSONオブジェクトを作成するオブジェクトの作成を支援するライブラリです。今回の場合、Railsのビューはまったく使わないため、オブジェクトを表すシリアライザだけを返します。カスタマイズや再利用を自在に行える素晴らしいライブラリです。 RackCors: クロスオリジンリソース共有(CORS)を扱えるようにするRackミドルウェアであり、これを使ってクロスオリジンのAjaxリクエストを行えるようにします。 Faker: データのフェイクを作成する強力で素晴らしいライブラリです。 訳注: RackCorsは、現在のRailsではGemfileにコメントアウトの形で追加済みです。 モデルを作成する ところで、データベーススキーマの設計が必要ですね。今回はusers、books、authors、book_copiesの4つのテーブルが必要です。スキーマはシンプルにしましょう。usersは基本的に、図書館で本を借りる人を表します。 authorsは本の著者、booksは本を表します。book_copiesは、貸出可能な本を表します。スキーマをシンプルにすると申し上げたとおり、ここでは貸出の履歴は保存しないことにします。 それではgenerateしましょう。 $ rails generate model author first_name last_name $ rails g model book title author:references $ rails g model user first_name last_name email $ rails g model book_copy book:references isbn published:date format:integer user:references ついでにインデックスも追加します。以下のマイグレーションのように、必要な箇所にはnull:falseも追加してください。 class CreateAuthors < ActiveRecord::Migration[5.0] def change create_table :authors do |t| t.string :first_name, null: false t.string :last_name, index: true, null: false t.timestamps end end end class CreateBooks < ActiveRecord::Migration[5.0] def change create_table :books do |t| t.references :author, … Continue reading Rails: ActiveModelSerializersでAPIを作る–Part 1(翻訳)