HTTPメソッドのアンチパターン集
「動くけど怖い」HTTPの使い方をまとめて避けるためのページです。RFC 9110の意図と、現場での事故例から抜粋しています。
よくあるNGパターン
代表的な誤用と、その理由・回避策です。
アンチパターン一覧
| パターン | 何が問題か | 改善案 |
|---|---|---|
| GETで状態変更 | リンクプレビューやプリフェッチで勝手に実行される。安全性に反する。 | 必ずPOST/PUT/PATCH/DELETEに分離し、GETは副作用ゼロに。 |
| POST万能化 | 更新/削除もPOSTに集約するとキャッシュや中継の最適化が効かない。 | 作成はPOST、置換はPUT、部分更新はPATCH、削除はDELETEに分ける。 |
| DELETEが非冪等 | 二度送ると404/500になるなど、リトライできない。 | 存在しなくても204/200で返す設計にし、冪等性を確保。 |
| PUT/PATCHの条件なし更新 | 同時編集で上書き事故が起きる。 | If-Matchによる楽観ロックを必須にする(412で拒否)。 |
| GETにボディ | 仕様上意味が定義されず、中継やFWが破棄することも。 | パラメーターはクエリに。ボディが必要ならPOST/PUT/PATCH。 |
| POSTでステータス乱用 | 成功でも200だけ、重複でも500など、クライアントが判断できない。 | 201/204/409/412など意味の合うコードを返し、Locationやエラー詳細も添える。 |
| OPTIONSをブロック | CORSプレフライトが落ち、実リクエストに到達しない。 | OPTIONSを許可し、Access-Control-Allow-* を正しく返す。 |
アンチパターンに気づくサイン
「なんとなく動く」状態でも下記の兆候があれば設計を見直すと安全です。
チェックポイント
- ステータスコードが200と500しか使われていない。
- GETを外部から叩かれたときに副作用が出る。
- 重複送信で意図しない二重登録が発生する。
- CORSエラーがブラウザで頻発し、ログには何も残らない(OPTIONSが落ちている)。
- API仕様書にメソッドごとの安全性/冪等性の記述がない。
まとめ
HTTPメソッドは「安全性」と「冪等性」の期待がセットで定義されています。ここで挙げたアンチパターンを避け、RFC 9110に沿った使い分けにするだけで、リトライやキャッシュ、中継の挙動が読みやすくなります。