2
0

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.

WebAPI設計におけるHTTPメソッドの決め方(GET, POST, PUT, PATCH, DELETE)

Last updated at Posted at 2021-09-20

URIの基本

URIはリソースを示すもの。
メソッドはリソースに対する操作を示すもの。
以下に、Twitterの「いいね」に関するAPIエンドポイントを挙げる。

「いいね」関連のAPI
参考:TwitternのAPIドキュメント

GET /2/users/:id/liked_tweets
⇒ ユーザーが「いいね」しているツイートを取得する

POST /2/users/:id/likes
⇒ 特定のツイートに「いいね」する ⇒ 「いいね」を新規作成する

DELETE /2/users/:id/likes/:tweet_id
⇒ 特定のツイートの「いいね」を削除する

それでは、ひとつずつメソッドについて見ていこう。

GET

リソースを取得する際に利用する。
例えば、SNSで「投稿一覧を取得する」APIを考えると、以下のようになる。

GET /posts

POST

リソースを新規追加する際に利用する。
リソースの更新や一部変更は、別のメソッドを利用するのが好ましい。
SNSで「投稿を行う」APIを考えると、以下のようになる。

POST /post
※紛らわしいが、URIの/postは「投稿」の意味で使っている。

PUT

リソースを上書き/変更する際に利用する。
PATCHはリソースを一部変更する際に利用し、PUTと明確に使い分けが出来る。
SNSで「投稿を修正する」APIを考えると、以下のようになる。

PUT /post/:post_id

PATCH

リソースを一部変更する際に利用する。
PUTはリソースを上書きする際に利用し、PATCHとは明確に使い分けが出来る。
SNSで、「自身のユーザー情報の中の自己紹介文を変更する」APIを考えると、以下のようになる。

PATCH /:user_id/profile
たとえば、リクエストボディは以下のようになる。

{"introduction": "私の名前は津本です"}

すると、プロフィールの一部が変更される。

{
    "first_name": "津本",
    "last_name": "敏男"
    "introduction": "私の名前はツモトです"
    "image": "https://example.com/tsumoto.png"
}

{
    "first_name": "津本",
    "last_name": "敏男"
    "introduction": "私の名前は津本です"
    "image": "https://example.com/tsumoto.png"
}

DELETE

リソースを削除する際に利用する。
例えば、SNSで「投稿を削除する」APIを考えると、以下のようになる。

DELETE /post/:post_id

この記事の注意点

メソッドの決め方と題していますが、正しく言えばRFC7231RFC5789に従ったHTTPメソッドの決め方です。
実際に使われている大手のAPIでは、PATCHが使われていないこともあります。
RESTAPIではなくGraphQLのみをサポートすることも増えています。

実際に設計する際は原則を基本にしつつ、現在のデファクトスタンダードも調べて設計するようにしましょう。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?