Skip to content

Commit e8d9aab

Browse files
committed
2025/07/24 時点の英語版に基づき更新
1 parent da02c9f commit e8d9aab

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed
Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,48 @@
11
---
22
title: Idempotent (べき等)
33
slug: Glossary/Idempotent
4+
l10n:
5+
sourceCommit: 99d723c4f77d7f537292a07dd7b5e5c13cb610da
46
---
57

6-
{{GlossarySidebar}}
8+
ある HTTP メソッドが**べき等**であるとは、単一のリクエストを送信した際のサーバーへの意図された効果が、同一のリクエストを複数回送信した場合の効果と同一であることです。
79

8-
ある HTTP メソッドが**べき等**であるとは、サーバーが同じ状況にあるとき、特定のリクエストに対して何回でも続けて同じ効果が起こることをいいます。このことは、べき等なメソッドでは (統計を取る際のことを除いて) 副作用が生じるはずではないと言うこともできます 。 適切に実装された {{HTTPMethod("GET")}}、{{HTTPMethod("HEAD")}}、{{HTTPMethod("PUT")}}、{{HTTPMethod("DELETE")}} の各メソッドは**べき等**ですが、{{HTTPMethod("POST")}} メソッドはそうではありません。{{Glossary("Safe/HTTP", "安全な")}}メソッドはすべてべき等です
10+
HTTP 仕様書では、複数の HTTP メソッドとその意味論を定義しており、これにはそれらがべき等であるか否かも含まれます。{{Glossary("Safe/HTTP", "安全な")}}メソッドはすべてべき等であり、{{HTTPMethod("PUT")}}、{{HTTPMethod("DELETE")}} も同様です。 {{HTTPMethod("POST")}} および {{HTTPMethod("PATCH")}} メソッドは、べき等であることが保証されません
911

10-
べき等であるためには、サーバーにおける裏側の実際の状態だけが考慮されるので、返される状態コードはリクエストごとに異なる場合があります。 例えば、最初に {{HTTPMethod("DELETE")}} メソッドが呼び出された場合は、おそらく {{HTTPStatus("200")}} を返しますが、それ以降は {{HTTPStatus("404")}} を返すでしょう。RESTful な API の設計において、*最後の入力操作を削除する*機能を `DELETE` メソッドを使って実装すべきでないとされるのも、{{HTTPMethod("DELETE")}} メソッドがべき等であることを示唆しています
12+
クライアントは、例えばリクエストがサーバーに到達したかどうかに疑念がある場合など、べき等なメソッドを使用するリクエストは安全に再試行できます。複数の同一リクエストがサーバーに到達した場合でも、そのメソッドがべき等であれば、何の問題も生じません
1113

12-
なお、メソッドがべき等であっても、サーバーやアプリケーションによってべき等性の破壊が生じることがあります
14+
HTTP 仕様書では、クライアントがサーバーに及ぼす「意図された」効果に関してのみ、べき等性を定義しています。例えば、`POST` リクエストはサーバーにデータを送信することを意図し、`DELETE` リクエストはサーバー上のリソースを削除することを意図します。実際には、公開するルートがこれらの意味論に準拠していることを確認するのはサーバーの責任となります
1315

14-
例えば、 `GET /pageX HTTP/1.1` はべき等です。連続して何度か呼び出しても、クライアントは同じ結果を得ます。
16+
> [!NOTE]
17+
> サーバーは HTTP 仕様書で定められた意味論に従うことが強く推奨されるものの、仕様書はそれを義務付けてはいません。実環境のサーバーが、べき等性のある HTTP メソッドの下でべき等性のないエンドポイントを公開してはいけないという決まりは何もありません。ただし、クライアントは意外に思うかもしれません。
1518
16-
```
17-
GET /pageX HTTP/1.1
18-
GET /pageX HTTP/1.1
19-
GET /pageX HTTP/1.1
20-
GET /pageX HTTP/1.1
21-
```
19+
また、以下の点に留意してください。
2220

23-
`POST /add_row HTTP/1.1` はべき等ではありません。 何度か呼び出すと、その回数だけ列に追加されていきます。
21+
- べき等メソッドを用いたリクエストは、必ずしもサーバーに「まったく」副作用がないことを意味するわけではありません。クライアントが副作用を意図していないというだけのことです。例えば、サーバーは各リクエストの受信時刻をログに記録している可能性があります。
22+
- それぞれのリクエストで返されるレスポンスは異なる場合があります。例えば、{{HTTPMethod("DELETE")}} の最初の呼び出しはおそらく {{HTTPStatus("200")}} を返し、それ以降の呼び出しはおそらく {{HTTPStatus("404")}} を返します。
2423

25-
```
24+
##
25+
26+
`GET /pageX HTTP/1.1` は安全な(読み取り専用)メソッドであるため、べき等です。呼び出しが連続して行われた場合、その間にサーバー上のデータが更新されると、クライアントに異なるデータが返される可能性があります。
27+
28+
`POST /add_row HTTP/1.1` はべき等ではありません。複数回呼び出すと、その回数だけ列に追加されていきます。
29+
30+
```http
2631
POST /add_row HTTP/1.1
27-
POST /add_row HTTP/1.1 -> Adds a 2nd row
28-
POST /add_row HTTP/1.1 -> Adds a 3rd row
32+
POST /add_row HTTP/1.1 -> 2 行目に追加
33+
POST /add_row HTTP/1.1 -> 3 行目に追加
2934
```
3035

3136
`DELETE /idX/delete HTTP/1.1` はべき等ですが、状態コードは数回のリクエストの間に変化することがあります。
3237

33-
```
38+
```http
3439
DELETE /idX/delete HTTP/1.1 -> idX が存在する場合は 200 を返却
3540
DELETE /idX/delete HTTP/1.1 -> ちょうど削除されたので 404 を返却
3641
DELETE /idX/delete HTTP/1.1 -> 404 を返却
3742
```
3843

3944
## 関連情報
4045

41-
- HTTP 規格における[べき等](https://tools.ietf.org/html/rfc7231#section-4.2.2)の定義
46+
- HTTP 仕様書における[べき等](https://httpwg.org/specs/rfc9110.html#idempotent.methods)の定義
4247
- べき等なメソッド: {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("PUT")}}, {{HTTPMethod("DELETE")}}, {{HTTPMethod("OPTIONS")}}, {{HTTPMethod("TRACE")}}
4348
- べき等でないメソッド: {{HTTPMethod("POST")}},{{HTTPMethod("PATCH")}}, {{HTTPMethod("CONNECT")}}

0 commit comments

Comments
 (0)