16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rest APIで使われるHTTPメソッドとURL設計

Posted at

Rest APIで使われるHTTPメソッド

メソッド名 役割 冪等性 安全性
GET リソースの取得
POST リソースの作成 × ×
PUT リソースの全体更新(置き換え) ×
PATCH リソースの部分更新(一部を更新) × ×
DELETE リソースの削除 ×

冪(べき)等性とは同じ操作を1回行っても何回行っても同じ結果が得られる性質のことです。
同じ結果というのは、リソースの状態のことで、HTTPレスポンスのことではありません。
例えば、DELETEメソッドは冪等ですが、通常1回目のリクエストでは200レスポンスを、2回目以降のリクエストを404レスポンスを返します。
このようにレスポンスは異なるものの、リソースの状態は同じです。(特定のデータが消えた状態は同じ)
上記の役割や冪等性はあるべき論です。
意味としては正しくないですが、GETでリソースを変更しようと思えば可能です。

PATCHは冪等ではありません。ただし冪等であるように振る舞うことは可能です。

HTTP PUT メソッドは、ドキュメントの完全な置換のみを許可します。PUT とは違って、PATCH はべき等ではありません。すなわち、同一の PATCH リクエストが連続しておこなわれると、異なる効果が得られる可能性があります。ただし PATCH リクエストがべき等になるようにリクエストすることは可能です。
PATCH - HTTP | MDN

安全性はリソースの変化が生じるかどうかを示す性質です。
上記ではGET以外はリソースの変更が生じるので安全ではありません。

以下に各メソッドの役割を記載しますが、どのHTTPメソッドを使うべきかは、解釈が分かれます。
先述のとおり、あるべき論なので。

下記URLにあるようにメソッドの種類によって、同じURLでも違う処理を割り当てることが可能です。

GET

GETメソッドはリソースの取得に用いられます。
ブラウザではページの表示によく使用されます。

考えられる処理:

  • データ取得
  • ファイルダウンロード

URL例:

  • /api/users
  • /api/users/:user_id
  • /api/users/:user_id/photos

POST

リソースを作成するメソッドです。
リソース名がサーバーで割り振られてデータができます。
ブラウザではフォームデータ送信によく使用されます。

考えられる処理:

  • データ新規作成

PUT

リソースの全体更新(まるごと置き換え)を行うメソッドです。

考えられる処理:

  • ファイルアップロード(ファイルがなければ新規アップロードされて、あれば上書きされる)

URL例:

  • /api/users/:user_id/photos/:photo_id
  • /api/articles/:article_id/bookmark

PATCH

リソースの部分更新を行うメソッドです。

Railsでは更新をかけるたびに、updated_at(レコード更新時刻)は変更になるので冪等ではないPATCHメソッドを採用しているとされています。

Now let’s think about ordinary edit forms in typical Ruby on Rails applications. How many times are we sending a complete representation for replacement? Not always, perhaps we could say that it is even rare in practice that you do so. For example, the conventional created_at and updated_at timestamps normally can’t be set by end-users, though they are often considered to belong to the representation of resources that map to records.

この理屈でいくと他のウェブアプリケーションフレームワークの更新処理もPATCHになるでしょう。

考えられる処理:

  • データ更新

URL例:

  • /api/users/:user_id

DELETE

リソースを削除するメソッドです。

考えられる処理:

  • データ削除

URL例:

  • /api/users/:user_id
  • /api/articles/:article_id/bookmark
16
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?