Slide 1

Slide 1 text

PUTとPOSTどっち使う? qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 2

Slide 2 text

自己紹介 ● Hank Ehly (ハンク イーリー) ● ENECHANGE株式会社 ● qiita.com/hankehly ● connpass.com/user/hankehly ● github.com/hankehly ● speakerdeck.com/hankehly qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 3

Slide 3 text

アジェンダ 1. PUTとPOSTの違い 2. POST 3. PUT qiita.com/hankehly > PUTとPOSTどっち使う? 百億%忘れてい るぜ

Slide 4

Slide 4 text

1 0 意識している あまり意識しない チャットに投稿してください Web APIを開発する上で PUTとPOSTの違いを…

Slide 5

Slide 5 text

PUTとPOSTの違い qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 6

Slide 6 text

● リクエストに同封されているデータの意図 The fundamental difference between the POST and PUT methods is highlighted by the different intent for the enclosed representation (RFC7231) ● 使い分けることで、表現力の高い、理解しやすい Web API が作れる PUTとPOSTの違い qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 7

Slide 7 text

PUTとPOSTの違い リソース 新規作成 バッチ処理開始 データ削除 POST PUT リソース 置き換え ファイル アップロード qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 8

Slide 8 text

POST

Slide 9

Slide 9 text

POST ● 受け取ったデータで何してもおかしくない ● 汎用的 リクエスト レスポンス DBレコードを INSERT する 201 (Created) ファイルを削除する 204 (No Content) 非同期処理を開始する 202 (Accepted) キャッシュされたリソースにリダイレクトする 303 (See Other) qiita.com/hankehly > PUTとPOSTどっち使う? ● 一般的に冪等性がないため、キャッシュの対象にならない

Slide 10

Slide 10 text

POST /articles HTTP/1.1 { "name": "foo", "author": "tanaka", "content": "hello world" } HTTP/1.1 201 Created Location: http://example.com/articles/12 POST ● リソースの新規作成に使うことが多い qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 11

Slide 11 text

POST ● リソースの新規作成に使うことが多い POST /articles HTTP/1.1 { "name": "foo", "author": "tanaka", "content": "hello world" } HTTP/1.1 201 Created Location: http://example.com/articles/12 qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 12

Slide 12 text

POST ● リソースの新規作成に使うことが多い POST /articles HTTP/1.1 { "name": "foo", "author": "tanaka", "content": "hello world" } HTTP/1.1 201 Created Location: http://example.com/articles/12 qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 13

Slide 13 text

PUT

Slide 14

Slide 14 text

PUT ● 対象リソースの置き換え(丸ごと) ● どのリソースを置き換えるか知っている必要がある ○ PUT /articles/12 ● 冪等性 qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 15

Slide 15 text

PUT INSERT INTO articles (id, name, author) VALUES (12, "foo", "tanaka") ON CONFLICT (id) DO UPDATE SET name = "foo", author = "tanaka" PUTリクエストをSQLに例えたら qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 16

Slide 16 text

PUT INSERT INTO articles (id, name, author) VALUES (12, "foo", "tanaka") ON CONFLICT (id) DO UPDATE SET name = "foo", author = "tanaka" PUT /articles/12 HTTP/1.1 { "name": "foo", "author": "tanaka" } PUTリクエストをSQLに例えたら qiita.com/hankehly > PUTとPOSTどっち使う?

Slide 17

Slide 17 text

● PUTとPOSTの違いはリクエストデータ意図です ● POSTは、1つの決まった使い方がなく、汎用的に活用できる ○ 何かを「新規作成」するためによく使われる ● PUTは、リソースの状態を丸ごと置き換える ● 違いを意識することで、より表現力の高い API 開発ができる まとめ qiita.com/hankehly > PUTとPOSTどっち使う? POST /articles/12 意図が曖昧(何するの?) PUT /articles/12 意図が明確になる

Slide 18

Slide 18 text

ご清聴ありがとうございます qiita.com/hankehly > PUTとPOSTどっち使う?