🔨
Rails8でREST APIを作ってみる
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のデータを表示することができると思います。
以下のcurlコマンドを使用して、APIをテストできます:
もしGUIで操作したい人はPOSTMANなどのツールを使用してみてください。
-
全てのブログ投稿を取得(GET):
curl http://localhost:3000/api/v1/blogs
-
特定のブログ投稿を取得(GET)
curl http://localhost:3000/api/v1/blogs/1
-
新しいブログ投稿を作成(POST)
curl -X POST -H "Content-Type: application/json" -d '{"blog": {"name": "New Blog Post"}}' http://localhost:3000/api/v1/blogs
-
ブログ投稿を更新(PUT):
curl -X PUT -H "Content-Type: application/json" -d '{"blog": {"name": "Updated Blog Post"}}' http://localhost:3000/api/v1/blogs/1
-
ブログ投稿を削除(DELETE):
curl -X DELETE http://localhost:3000/api/v1/blogs/1
まとめ
これで、SQLiteを使用したRails 8 APIモードプロジェクトで、ブログ投稿のCRUD操作を実装し、JSONで結果を表示するAPIが完成しました。
Discussion