FFuwasegu·2026.06.05

【API Design】動作を表す Custom Method

1

はじめに

Google が公開している API Design に関するドキュメントに,Custom Method というデザインパターンが紹介されています.

https://google.aip.dev/136

一般的な RESTful API の設計

例えば,記事を投稿するサイトを設計するとします.

一般的な RESTful API の設計ルールに則ると,記事(Article)の CRUD API は

# 一覧取得
GET /articles

# 単一取得
GET /articles/{id}

# 登録
POST /articles

# 更新
PUT /articles/{id}

# 削除
DELETE /articles/{id}

というようなパス設計になるとします.

若干特殊な要件

ここで,例えば,記事の作成時点では必ず Draft 状態で登録される,という仕様だったとします.

そうすると,記事を Publish する API が必要になります.

これを,RESTful な設計思想で考えると,「記事が公開された状態を作成する」という見方から,

POST /articles/{id}/published

というふうに定義することが多いと思います.

ただし,本来扱っているリソースは「記事」であり,状態の遷移をリソースの作成と捉えたくないと考える人もいます.

このとき,

PATCH /articles/{id}

を定義してis_published のみを true にするという考え方もあると思います.

ただし,公開状態を articles テーブルで管理しない場合,これも違和感があります

動作を定義する Custom Method

このような場合,以下のように動作を定義する方法があります

POST /articles/{id}:publish

このように,操作するリソースのパスの後ろに HTTP Method の範囲では表現できない操作(動詞)をコロンでつなげることで、リソースに対する特殊な操作を表現しようという考え方です。

メッセージの送信や承認、公開/アーカイブなどの操作を表現するのに大変便利です。

コメント (0)