見出し画像

RESTにおける冪等性について

初めてプログラミングの記事を書くので、要点だけツギハギですが、初心者エンジニアの一助になれば。


そもそもPOST送信とは
HTTP通信方式の一つで指定したリソースを実装した機能に従って処理をする機能主に登録処理や更新処理などの、書き込みがありリソースが更新される可能性のある処理に対して使うメソッド


冪等でないかつ安全でない


安全ではない→DB内容を書き換えることがある(UPDATE、INSERT)ため


RESTという概念
分散型システムにおける複数のソフトウェアを連携させるのに適した設計原則の集合、考え方のことで、
・アドレス可能性(Addressability)
提供する情報がURIを通して表現できること。全ての情報はURIで表現される一意なアドレスを持っていること。
・ステートレス性(Stateless)
HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること。
・接続性(Connectability)
情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができること。
・統一インターフェース(Uniform Interface)
情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。
の4つからなるもの


CRUD操作について
CRUDはCreate, Read, Update, Deleteのこと。HTTPメソッドのうちGET、POST、PUT、DELETEは「CRUD」を満たす


PUT送信とは
イメージとしては、”冪等なPOST送信”
対象リソースの現在の表現の全体を、リクエストのペイロードで置き換える


RESTにおける”冪等性”
・「同じリクエストを何度繰り返しても、同じリソース状態になること」
得られる結果というのはリソース状態であって、レスポンスではない


・DELETEメソッドには冪等性があるが、1度目のリクエストでは200レスポンスを、2度目以降のリクエストは404レスポンスを返す


・回数に応じてレスポンスが変化することがあるが、リソースが削除されたという結果(リソース状態)が2度目のリクエストで覆ることはない


・RESTfulではGET, PUT, PATCH, DELETEは冪等性があるメソッド


冪等性があるRESTful APIの例
PUT /user/starred/:owner/:repo
冪等性がないRESTful APIの例
POST /repos/:owner/:repo/issues


追記:再現性と冪等性の違い

x: 入力

f: 操作

y: 出力

として

再現性がある -> x1 = x2 であれば y1 = f(x1) = f(x2) = y2

冪等性 -> f(x) = x

一般の場合 -> x1 = x2であってもf(x1) = f(x2)とは限らない。例えばfに乱数が含まれる、現在時刻に依存するなど

この記事が気に入ったらサポートをしてみませんか?