クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ステータスコードとエラー応答

このレッスンのあとで: 結果に合うステータスコードを選び、エラーをわかりやすく伝えられる。

55分のレッスンコマンド7件PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

番号はアプリへの合図

ステータスコードは、HTTP レスポンスの最初の行にある3桁の番号で、リクエストの結果を知らせます。API が正しい番号を返すと、アプリは次にすることがわかります。

貸出アプリは、本が見つからないのか、入力の間違いなのか、サーバーの故障なのかで、利用者への言葉を変えます。番号の選び方と、エラーの伝え方を学びます。

このレッスンのゴール

メモ

結果に合うステータスコードを選び、エラーをわかりやすく伝えられる。

重要な言葉

ことばいみれい
2xx成功を表す番号の仲間200, 201, 204
4xx依頼した側の間違いを表す番号の仲間400, 404
5xxサーバー側の失敗を表す番号の仲間500
エラー本文失敗の理由を伝える、レスポンスのボディ
競合今の状態と食い違って、依頼ができないこと409

学生が入力するセルは、このプレビューでは空白です。

番号は百の位で読む

百の位の数字で、結果の仲間がわかります。2は成功、3は別の場所への案内、4は依頼した側の間違い、5はサーバー側の失敗です。

同じ4でも、400は依頼が正しくない、404は見つからない、409は今の状態と食い違う、という違いがあります。

例: よく使う番号

番号意味場面
200成功。結果を返した本の一覧を読んだ
201成功。新しく作った本を足した
204成功。返す中身はない本を消した
400依頼が正しくない必須の項目がない
404見つからないない本を頼んだ
409今の状態と食い違う同じメールで登録した
500サーバーの失敗プログラムが落ちた

学生が入力するセルは、このプレビューでは空白です。

失敗の番号を、実際に出してみる

このラボで、会員の表を作り、4xx の番号を出します。メールアドレスは、会員ごとに1つだけです。

表は、同じメールを2回入れられない決まりを持っています。順番に Run して、最後の行の番号を読んでください。

psql にパスワードを渡す

コマンド
export PGPASSWORD=shop

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

会員の表を作り直す

コマンド
psql -h db -U shop -c "drop table if exists members; create table members (id serial primary key, email text unique not null, name text not null); insert into members (email, name) values ('[email protected]', 'Mori'); notify pgrst, 'reload schema'"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

新しい会員を登録する

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"email":"[email protected]","name":"Sato"}' "http://api:3000/members"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

同じメールで、もう一度登録する

コマンド
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"email":"[email protected]","name":"Sato"}' "http://api:3000/members"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

名前のない会員を登録する

コマンド
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"email":"[email protected]"}' "http://api:3000/members"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

番号に文字を入れて探す

コマンド
curl -s -w "\n%{http_code}\n" "http://api:3000/members?id=eq.abc"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ない表を頼む

コマンド
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/loans"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

良いエラー本文は理由と直し方を伝える

番号だけでは、利用者は何をすればよいかわかりません。本文に、機械が読むコードと、人が読む説明と、直す項目を入れます。

説明には、サーバーの中身や、パスワード、ファイルの場所を入れません。外の人に見せてよい言葉だけにします。

練習: エラー本文を読む

コード: python
import json

body = '{"code": "duplicate-email", "message": "このメールアドレスは登録済みです。", "field": "email"}'
error = json.loads(body)
print(error["code"])
print(error["message"])
print("直す項目:", error["field"])

# 練習: field が "name" で、message が名前を求める文のエラー本文を、自分で書きましょう。

よくある間違い

注意

エラーなら、とりあえず 500 を返せばよいと考えがちです。500 は、サーバー側の失敗を表します。利用者の入力が悪いときは 4xx を返します。そうすれば、入力を直せば通ることが、アプリに伝わります。

このラボとソースについて: PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。