Zenn
🔨

Rails8でREST APIを作ってみる

2025/02/27に公開

Rails 8 API CRUD操作ガイド

このガイドでは、SQLiteを使用したRails 8 APIモードプロジェクトで、ブログ投稿のCRUD操作を実装する手順を説明します。

Railsガイドを参考に作ってみました。

1. プロジェクトの作成

まず、新しいRails APIプロジェクトを作成します:

rails new blog_api --api -d sqlite3
cd blog_api

2. モデルの作成

Blogモデルを作成します:

rails generate model Blog name:string

このコマンドは、app/models/blog.rbファイルと、db/migrate/YYYYMMDDHHMMSS_create_blogs.rbという名前のマイグレーションファイルを作成します。

3. マイグレーションの実行

データベースにテーブルを作成するためにマイグレーションを実行します:

rails db:migrate

4. シードデータの作成

db/seeds.rbファイルを編集して、ダミーデータを追加します:

# db/seeds.rb
blogs = [
  { name: "First Blog Post" },
  { name: "Second Blog Post" },
  { name: "Third Blog Post" }
]

blogs.each do |blog|
  Blog.create!(blog)
end

シードデータを投入します:

rails db:seed

5. コントローラーの作成

Blogsコントローラーを作成します:

rails generate controller api/v1/Blogs

6. ルーティングの設定

config/routes.rbファイルを編集して、APIルートを追加します:

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :blogs
    end
  end
end

7. コントローラーの実装

app/controllers/api/v1/blogs_controller.rbファイルを編集して、CRUD操作を実装します:

module Api
  module V1
    class BlogsController < ApplicationController
      before_action :set_blog, only: [:show, :update, :destroy]

      # GET /api/v1/blogs
      def index
        @blogs = Blog.all
        render json: @blogs
      end

      # GET /api/v1/blogs/1
      def show
        render json: @blog
      end

      # POST /api/v1/blogs
      def create
        @blog = Blog.new(blog_params)
        if @blog.save
          render json: @blog, status: :created
        else
          render json: @blog.errors, status: :unprocessable_entity
        end
      end

      # PATCH/PUT /api/v1/blogs/1
      def update
        if @blog.update(blog_params)
          render json: @blog
        else
          render json: @blog.errors, status: :unprocessable_entity
        end
      end

      # DELETE /api/v1/blogs/1
      def destroy
        @blog.destroy
        head :no_content
      end

      private

      def set_blog
        @blog = Blog.find(params[:id])
      end

      def blog_params
        params.require(:blog).permit(:name)
      end
    end
  end
end

8. APIのテスト

サーバーを起動します:

rails server

ブラウザを開いて、以下のURLにアクセスするとJSONのデータを表示することができると思います。

http://localhost:3000/api/v1/blogs/

以下のcurlコマンドを使用して、APIをテストできます:

もしGUIで操作したい人はPOSTMANなどのツールを使用してみてください。

https://www.postman.com/

  1. 全てのブログ投稿を取得(GET):

    curl http://localhost:3000/api/v1/blogs
    
  2. 特定のブログ投稿を取得(GET)

    curl http://localhost:3000/api/v1/blogs/1
    
  3. 新しいブログ投稿を作成(POST)

    curl -X POST -H "Content-Type: application/json" -d '{"blog": {"name": "New Blog Post"}}' http://localhost:3000/api/v1/blogs
    
  4. ブログ投稿を更新(PUT):

    curl -X PUT -H "Content-Type: application/json" -d '{"blog": {"name": "Updated Blog Post"}}' http://localhost:3000/api/v1/blogs/1
    
  5. ブログ投稿を削除(DELETE):

    curl -X DELETE http://localhost:3000/api/v1/blogs/1
    

まとめ

これで、SQLiteを使用したRails 8 APIモードプロジェクトで、ブログ投稿のCRUD操作を実装し、JSONで結果を表示するAPIが完成しました。

Discussion

ログインするとコメントできます