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

無料レッスン

API の文書化と版の管理

このレッスンのあとで: API の変更が、使っている人を壊すかどうかを判断できる。

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

変えても壊れない API にする

API 文書は、どのアドレスに何を送ると、何が返るかを書いた説明書です。版(バージョン)は、API を変えるときに、古い使い方を壊さないための番号です。

貸出アプリは、利用者の端末に入ったまま、すぐには更新されません。API を変えても壊れない方法を学びます。

このレッスンのゴール

メモ

API の変更が、使っている人を壊すかどうかを判断できる。

重要な言葉

ことばいみれい
API 文書アドレス、メソッド、項目、番号を書いた説明書
OpenAPIAPI 文書を、機械が読める形で書く決まり
版API の形に付ける番号v1, v2
互換性古い使い方が、新しい API でも動くこと
破壊的な変更使っている人のプログラムを動かなくする変更
非推奨もうすぐやめるので、使わないでという印

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

API 文書は使い方の約束

API 文書には、アドレス、メソッド、送る項目、返る項目、番号を書きます。読む人が、コードを見なくても使えるようにするためです。

OpenAPI は、これを機械が読める形で書く決まりです。ツールが文書から、試せるページや、アプリ用の部品を作れます。このラボの API は、表から文書を自動で作ります。

例: 1つの操作の文書

項目書くこと例
アドレスとメソッド何を頼むかGET /books
送る項目条件や本文year=gte.2020
返る項目名前と型title は文字列
番号起こりうる結果200 と 400
認証鍵が要るかこのラボでは不要

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

足す変更は安全で、消す変更は壊す

項目を足す変更は、たいてい安全です。古いアプリは、新しい項目を使わないだけだからです。

項目を消す、名前を変える、型を変える変更は、古いアプリを壊します。これを破壊的な変更と呼びます。

例: 変更と古いアプリ

変更古いアプリは壊れるか
項目を足す新しい項目を無視する壊れない
項目を消す値が取れない壊れる
項目の名前を変える古い名前で探せない壊れる
型を数値から文字列に計算や比較ができない壊れる
必須の送信項目を足す依頼が断られる壊れる

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

ラボで、足す変更と名前を変える変更を試す

本の表に、列を1つ足します。古い依頼がそのまま通ることを見ます。

次に、year の列の名前を変えます。year を使っていた依頼が、どうなるかを見ます。順番に Run してください。

psql にパスワードを渡す

コマンド
export PGPASSWORD=shop

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

本の表を作り直す

コマンド
psql -h db -U shop -c "drop table if exists books; create table books (id serial primary key, title text not null, author text not null, year int not null, copies int not null default 1); insert into books (title, author, year, copies) values ('Networks in Practice', 'Mori', 2019, 3), ('Learning SQL', 'Tanaka', 2021, 2), ('Web Design Basics', 'Suzuki', 2018, 0), ('Intro to APIs', 'Kato', 2022, 5); notify pgrst, 'reload schema'"

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

API 文書を取る

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

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

古いアプリの依頼: year を頼む

コマンド
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/books?select=id,year"

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

列を1つ足す

コマンド
psql -h db -U shop -c "alter table books add column language text; notify pgrst, 'reload schema'"

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

新しい項目が増えたのを見る

コマンド
curl -s -w "\n" "http://api:3000/books?id=eq.1"

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

古いアプリの依頼は、まだ通る

コマンド
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/books?select=id,year"

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

year の名前を published に変える

コマンド
psql -h db -U shop -c "alter table books rename column year to published; notify pgrst, 'reload schema'"

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

古いアプリの依頼が壊れる

コマンド
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/books?select=id,year"

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

よくある間違い

注意

利用者はすぐアプリを更新するから、API を変えてよいと考えがちです。端末のアプリは、何週間も古いまま動きます。消す前に、告知して、移る期間を渡します。

壊す変更は新しい版を別に出す

壊す変更をするときは、版を分けます。新しい版を /v2/ のように別のアドレスで出し、古い版も一定の期間、動かし続けます。

古い版を止める前に、非推奨と告知します。使っている人が、移る時間を持てるようにするためです。

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

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