2
4

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.

Web API入門#6 〜CRUDとHTTPメソッド〜

Last updated at Posted at 2021-01-15

はじめに

タイトルについて記事にしました。
この記事で得る内容は以下の通りです。

・ CRUD、主要なHTTPメソッド、べき等性と安全性、メソッドの誤用

■ Web API入門についての過去記事
Web API入門#1 〜APIとWeb API、Webの概要〜
Web API入門#2 〜REST、アーキテクチャについて〜
Web API入門#3 〜URIの基礎知識〜
Web API入門#4 〜クールなURIの設計方法について〜
Web API入門#5 〜HTTPの基礎〜

CRUD

Create,Read,Update,Deleteの4つの単語の頭文字をとったもので、データの作成・読み込み・更新・削除する機能のことをCRUDと呼びます。
基本的にWebサービスは、CRUDの機能があります。(どれか1つでも欠けるとサービスとして不安定...)
HTTPメソッドの理解を深めると、Webサービスの基本であるCRUDの機能を実装できるようになります。

主要なHTTPメソッド

HTTPメソッドは8つありますが、主要なメソッドは表の6つで、更にその中でよく使われるのが上の4つです。

メソッド CRUD 役割
GET Read リソースの取得
POST Create 子リソースの作成、リソースへのデータの追加...etc
PUT Create /
Update
リソースの更新(存在していなければ作成)
DELETE Delete リソースの削除
HEAD - リソースのヘッダ(メタデータ)の取得
OPTIONS - リソースがサポートしているメソッドの取得

各メソッドの中でも特徴的な3つをご紹介します。

POSTメソッド

POSTメソッドは、リソースの作成が主ですが、リソースを更新したり削除することができます。
※ 理由は後述しますが、基本的にPOSTはPOSTの役割に使った方が良いです。

PUTメソッド

PUTメソッドの主な役割はリソースの更新ですが、リソースが存在していなければ新規作成をします。
CRUDの中でも、CreateとUpdateの機能を兼ね備えるのが特徴的です。

OPTIONSメソッド

OPTIONSメソッドは、例えば、特定のリソースに対してGETメソッドのみ実行できる場合は、OPTIONSメソッドを実行すると、GETメソッドとOPTIONSメソッドを使うことができます。
従って、GET/POST/PUT/DELETEメソッドの4つを許容しているリソースであれば、OPTIONメソッドを実行すると、許容している4つのメソッドがOPTIONSメソッドのレスポンスに返ってきます。

べき等性と安全性

べき等性

べき等性とは、ある操作を何回行っても結果は同じという意味です。
例えば、GETメソッドはリソースの取得をするので何回行っても結果は同じですが、POSTメソッドは、リソースを作成する度にリソースが増えるので結果が同じではなくなります。

安全性

操作対象のリソースの状態を変化させないことです。
GETメソッドは、リソースの取得を行い、リソースの状態を変化させることはないので安全性といえます。
一方、PUTメソッドを使うことでリソースが更新されるので、こちらは安全性とはいえません。

各メソッドのべき等性と安全性の特徴については、以下の通りです。

メソッド 特徴
GET べき等かつ安全
POST べき等でも安全でもない
PUT べき等だが安全でもない
DELETE べき等だが安全でもない
HEAD べき等かつ安全
OPTIONS べき等かつ安全

メソッドの誤用

メソッドを誤った用途に使うと、べき等性を持ったメソッドであっても意味がなくなってしまったり
安全性が確立できなくなったりしてしまいます。代表的な例をいくつかご紹介します。

リソースの取得以外でPOSTメソッドを使う

例えば、明らかに何かリソースを削除する、https://slamp.slamp.ochicom/v1/posts/deleteのような
動詞が含まれているURIに対してGETメソッドを実行することです。(設計もNGですが)
GETメソッドであるのに、リソースを操作してしまい安全性が失わなわれます。

他のメソッドをPOSTメソッドで代用する

POSTメソッドは本来リソースの作成や追加が役割ですが、他のメソッドが持つ機能も代用できてしまいます。
GETメソッドはべき等であり安全ですが、GETメソッドを使うべき所をPOSTメソッドで代用してしまうと、べき等でも安全でもなくなります。他のPUTメソッドやDELETEメソッドも、べき等ではなくなってしまいます。

PUTメソッドで相対的な値を用いる

例えば、元の値に+50加算するといったPUTメソッドがあったとします。
これは、実行する度に処理結果が変わりますので、べき等ではありません。

ですので、PUTメソッドを使うのであれば、相対的でなく、絶対的な値を指定します。
一例ですが、100から150に値を変えるのであれば、+50加算するのでなく、150という値を指定します。

次の記事はこちら

Web API入門#7 〜ステータスコードの意味と活用〜

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?