【Rails API】Rails API on Docker + scaffoldのHello Worldを行ってみた ~STEP2:Rails API実験~

はじめに

こんにちは、がんがんです。
最近、Rails API + PostgreSQLの環境をDockerにて用意し、scaffoldを用いた簡単な実験を行う機会がありました。
前回の記事では、Rails + PostgreSQL on Dockerの環境を構築していきました。
gangannikki.hatenadiary.jp


今回の記事では、scaffoldを用いたRails APIの実験に関する備忘録をまとめたいと思います。

今回のゴール

参考記事

qiita.com

qiita.com

環境

  • Docker for Windows:19.03.12
  • docker-compose:1.26.2
  • Ruby:2.7.1 (2.7.1-alpine3.12)
  • Ruby on Rails:5.2.4
  • Postgre SQL:11.9 (11.9-alpine)


環境構築

前回の備忘録にてまとめております。
gangannikki.hatenadiary.jp

実験

scaffoldを用いてCRUDの実験を行ってみます。

$  docker-compose run --rm back rails g scaffold user name:string
$  docker-compose run --rm rails db:migrate


userはまだ初期状態ですのでこの時点ではなにも入ってない状態です。

$  curl -X GET http://localhost:3000/users
[]

CREATE

$ curl -X POST http://localhost:3000/users -d 'user[name]=test1'        
{"id":1,"name":"test1","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:54:28.960Z"}
$ curl -X POST http://localhost:3000/users -d 'user[name]=test2'        
{"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"}
$ curl -X POST http://localhost:3000/users -d 'user[name]=test3'        
{"id":3,"name":"test3","created_at":"2020-09-30T21:54:42.938Z","updated_at":"2020-09-30T21:54:42.938Z"}

GET

ちゃんと生成されていて良かった。

#  -X GETはなくても可
$ curl -X GET http://localhost:3000/users
[{"id":1,"name":"test1","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:54:28.960Z"},{"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"},{"id":3,"name":"test3","created_at":"2020-09-30T21:54:42.938Z","updated_at":"2020-09-30T21:54:42.938Z"}]

UPDATE

$ curl -X PUT http://localhost:3000/users/1 -d 'user[name]=test11'      
{"id":1,"name":"test11","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:57:20.619Z"}


試しにGETしてみましたが、curlでの取得順番はid順ではないんですね。知らんかった。

$ curl http://localhost:3000/users
[{"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"},{"id":3,"name":"test3","created_at":"2020-09-30T21:54:42.938Z","updated_at":"2020-09-30T21:54:42.938Z"},{"id":1,"name":"test11","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T21:57:20.619Z"}]

DELETE

$ curl -X DELETE http://localhost:3000/users/3


ちゃんと消えてますね。

$ curl http://localhost:3000/users
[{"id":2,"name":"test2","created_at":"2020-09-30T21:54:39.756Z","updated_at":"2020-09-30T21:54:39.756Z"},{"id":1,"name":"test1","created_at":"2020-09-30T21:54:28.960Z","updated_at":"2020-09-30T22:00:06.330Z"}]

作成したscaffoldを削除するには

userモデルを作成する際に入力ミスをしていたことがCRUD実験を行っているときに発覚しました。
db:migrateする前後では削除の仕方が違うようなので今後のためにメモを残しておきます。

$  docker-compose run --rm back rails db:rollback
$  docker-compose run --rm back rails d scaffold user


db:migrateした後であれば、必ず上記の手順で戻してあげる必要があるようです。
実際にrails d scaffoldから実行したら失敗しました。


下記は参考記事です。
qiita.com

おわりに

今回の記事では、scaffoldを用いたRails APIの実験に関する備忘録をまとめました。
Rails APIを使えば非常に簡単にAPIの構築をすることが出来るのは驚きです。


Rails APIを作成していく際にメモを今後残していこうと思っています。