RailsでWeb APIを作成する

アプリ作成

1.ディレクトリ作成

rails new web_api_sample --api
cd web_api_sample
bin/rails s

2.http://localhost:3000へアクセスし、以下のように表示されることを確認 f:id:Toshiki2968:20220405130204p:plain

3.scaffoldコマンドを実行し、モデル、マイグレーション、ルーティング、コントローラを追加

bin/rails generate scaffold task title:string body:text
bin/rails db:migrate

4.テストデータを追加

#app/db/seeds.rb

3.times do |i|
  Task.create(title: "タイトル:#{i}", body: "内容:#{i}")
end

以下を実行

bin/rails db:seed

curlコマンドでアプリにアクセスする

データ読み込み

curl http://localhost:3000/tasks
[
 {"id":1,"title":"タイトル:0","body":"内容:0","created_at":"2022-04-05T02:06:38.468Z","updated_at":"2022-04-05T02:06:38.468Z"},
 {"id":2,"title":"タイトル:1","body":"内容:1","created_at":"2022-04-05T02:06:38.473Z","updated_at":"2022-04-05T02:06:38.473Z"},
 {"id":3,"title":"タイトル:2","body":"内容:2","created_at":"2022-04-05T02:06:38.477Z","updated_at":"2022-04-05T02:06:38.477Z"}
]

データ作成

curl -H "Content-Type: application/json" -X POST -d '{"title": "テストタイトル", "body": "テスト内容"}' http://localhost:3000/tasks

id:4が追加されていることを確認
[
 {"id":1,"title":"タイトル:0","body":"内容:0","created_at":"2022-04-05T02:06:38.468Z","updated_at":"2022-04-05T02:06:38.468Z"},
 {"id":2,"title":"タイトル:1","body":"内容:1","created_at":"2022-04-05T02:06:38.473Z","updated_at":"2022-04-05T02:06:38.473Z"},
 {"id":3,"title":"タイトル:2","body":"内容:2","created_at":"2022-04-05T02:06:38.477Z","updated_at":"2022-04-05T02:06:38.477Z"},
 {"id":4,"title":"テストタイトル","body":"テスト内容","created_at":"2022-04-05T02:40:56.569Z","updated_at":"2022-04-05T02:40:56.569Z"}
]

データ削除

curl -X DELETE http://localhost:3000/tasks/4

# id:4が削除されていることを確認
[
 {"id":1,"title":"タイトル:0","body":"内容:0","created_at":"2022-04-05T02:06:38.468Z","updated_at":"2022-04-05T02:06:38.468Z"},
 {"id":2,"title":"タイトル:1","body":"内容:1","created_at":"2022-04-05T02:06:38.473Z","updated_at":"2022-04-05T02:06:38.473Z"},
 {"id":3,"title":"タイトル:2","body":"内容:2","created_at":"2022-04-05T02:06:38.477Z","updated_at":"2022-04-05T02:06:38.477Z"}
]

データ更新

curl -H "Content-Type: application/json" -X PATCH -d '{"title": "変更後のタイトル", "body": "変更後の内容"}' 

# id:1が変更されていることを確認
[
 {"id":1,"title":"変更後のタイトル","body":"変更後の内容","created_at":"2022-04-05T02:06:38.468Z","updated_at":"2022-04-05T03:35:37.906Z"},
 {"id":2,"title":"タイトル:1","body":"内容:1","created_at":"2022-04-05T02:06:38.473Z","updated_at":"2022-04-05T02:06:38.473Z"},
 {"id":3,"title":"タイトル:2","body":"内容:2","created_at":"2022-04-05T02:06:38.477Z","updated_at":"2022-04-05T02:06:38.477Z"}
]

参考

https://qiita.com/digitter/items/53f83ce50036b2773d55