このレッスンでやること
データベースは、情報をテーブルに入れて保管します。Web API は、プログラムがその情報を Web 経由で求められるようにするものです。ここでは、本物のデータベースにテーブルを作ります。そして curl で Web リクエストを送り、データを読んだり変えたりします。スマホのアプリがサーバーと話すのと同じやり方です。
始める前に
メモ
このレッスンの上にあるバーのラボを起動を押し、「実行中」と出るまで待ちます。最初の起動は、先にデータベースが立ち上がるので、数秒かかります。下の実行ボタンは、それぞれのコマンドをラボのターミナルに順番に入力します。すべて同じセッションで動きます。様子を見たり、自分でコマンドを打ったりしたいときは、バーのターミナルを開く(新しいタブ)を押します。
1. テーブルを作る
データベースの名前は shop です。ここでは notes(メモ)というテーブルを作ります。列は 2 つで、自動で数が増える id と、メモの文章 body です。PGPASSWORD はパスワードで、これを設定しておくと、毎回聞かれません。
export PGPASSWORD=shopここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
psql -h db -U shop -c "create table notes (id serial primary key, body text not null)"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2. メモを 1 つ入れる
insert は行を追加します。2 つ目のコマンドは、API にデータベースをもう一度読み直させます。API は起動したときに一度だけ読んでいて、そのときはまだ notes がなかったからです。
psql -h db -U shop -c "insert into notes (body) values ('hello')"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
psql -h db -U shop -c "notify pgrst, 'reload schema'"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3. Web 経由で読む
API は、テーブルに Web のアドレスを用意します。curl がそのアドレスに問い合わせると、答えが JSON で返ってきます。JSON はプログラムが読みやすい文字の形式で、[{"id":1,"body":"hello"}] のようになります。-w "\n" は答えの最後に改行を付けるので、答えがコマンドの下の行にきれいに出ます。
curl -s -w "\n" http://api:3000/notesここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
4. Web 経由でメモを足す
POST リクエストは行を追加します。-d の部分が新しいメモで、JSON で書きます。そのあとテーブルをもう一度読むと、メモが 2 つになっています。
curl -s -X POST -H "Content-Type: application/json" -d '{"body":"from curl"}' http://api:3000/notesここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
curl -s -w "\n" http://api:3000/notesここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
5. 少しだけ求める
アドレスに言葉を足すと、テーブルの一部だけを求められます。この例では、body が hello のメモだけを求めています。
curl -s -w "\n" "http://api:3000/notes?body=eq.hello"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
6. 残るものを確かめる
バーのラボを停止を押し、もう一度ラボを起動を押します。そしてステップ 3 をもう一度実行すると、メモはまだ残っています。データベースは、ファイルを名前付きのボリュームに置いていて、プラットフォームがそのボリュームを保存してくれるからです。ボリュームの外に書いたものは、ラボが止まると消えます。本番環境のコンテナも同じ動きをします。
先生へ
ヒント
このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒一人ひとりの専用コピーです。ラボはデータベースと API の 2 つのサービスでできていて、お互いを名前で見つけます。本物のアプリケーションと同じ形です。自分のモジュールにコピーして変えることも、レッスンビルダーのラボメニューから一から作ることもできます。