POST、PATCHについて

Twitter掲示板などで、新しく投稿する時、投稿した内容を更新する時に、POSTやPATCHというHTTPメソッドが働いています。 この内容を勉強したので、アウトプットします。


POSTとPATCHを確認。

今回は、掲示板に投稿、投稿した内容を更新していきます。

掲示板を投稿する画面にいき、検証ツールで、formの中身を見てみましょう。

  <form action="/posts" accept-charset="UFT-8" method="post">


続いて投稿内容を更新する画面にいき、検証ツールで見ていきます。

  <form action="/posts/:id" accept-charser="UFT-8" method="post">
    <input type="hidden" name="_method" value="patch">

新規投稿formにはpost、更新ページにはpathというHTTPメソッドがついていることが分かります。


POSTとPATCHの違い

POST

掲示板に投稿する時、POSTによってcreateアクションに繋がり、リソースに対する子リソースが作成されます。

PATCH

掲示板の投稿画面一覧から、特定の掲示板を選択し、その掲示板の内容を更新するページに遷移したとします。 その時にPATCHによってupdateアクションに繋がり、リソースの内容を更新してくれます。


べき等性

べき等性とは、ある操作を何回行っても結果が同じことを意味する数学用語です。

POSTはべき等性がなく、PATCHにはべき等性があります。これを例を交えて説明します。

PATCHの場合

掲示板の投稿内容を書き換えて更新したが、通信エラーがおこり、クライアントがレスポンス(200 OK)を確認できなかったとします。 その時は、再び同じリクエストを送信できます。

 HTTP/1.1 200 OK

今度は200 OKを確認できました。ここで同じPATCHを2回送信しましたが、結果は1回目と2回目共に同じですよね! これをべき等性があるといいます。

POSTの場合

ユーザー登録をした時など、DBに新規ユーザーを作成していきます。この時、1度目の結果と2度目の結果では、ユーザー数に違いが出てくるので、べき等性がありません。

ショッピングサイトなどで戻るボタンを操作した時に、もう一度送信しますか?というメッセージが出てくることがあります。 これはPOSTを再送信しようとしている場合で、再送信してしまうと、二重注文になる恐れがあるので注意してください。