1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

導入

たきの「博士〜!」

たきの「ログイン機能や会員登録ができるシステムを作りたいんですが、何から勉強すればいいのかわからないんです…」

博士「ふむ。」

博士「そんな時はREST APIを学ぶのじゃ。」

たきの「REST API…ですか?」

博士「Webアプリを作るなら避けては通れない知識じゃ。」

たきの「ぜひ教えてください!」

博士「では始めるぞ」

REST APIって何ですか?

博士「REST APIとは、URLで対象(リソース)を表現し、HTTPメソッドで操作内容を表現する設計のことじゃ。」

たきの「うーん…なんとなく難しいです…。」

博士「では、まずAPIから説明しよう。」

APIって何ですか?

たきの「そういえばAPIって何でしたっけ?」

博士「APIとは、プログラム同士が情報をやり取りするための窓口じゃ。」

例えばログイン機能では、

ユーザーが
「ログイン」ボタンを押すと、

画面は
APIに「このメールアドレスとパスワードでログインできるか確認してください」
とお願いする。

APIは
データベースを確認し、
ログインできるかどうかを画面へ返す。

画面
 ↓
API
 ↓
データベース

たきの「受付みたいな役割なんですね!」

博士「その通りじゃ。」

RESTって何ですか?

たきの「じゃあRESTって何なんですか?」

たきの「休む(Rest)ってことですか?」

博士「違うぞ」

博士「RESTは

Representational State Transfer

の略じゃ。」

博士「RESTは"休憩"ではなく、Webサービスを分かりやすく作るためのルールなんじゃ。」

博士「難しい英語は覚えなくてもよい。」

博士「URLで『何』を表し、HTTPメソッドで『何をするか』を表すという考え方だけ覚えておけば十分じゃ。」

たきの「それなら覚えられそうです!」

REST APIとHTTP APIの違い

たきの「RESTじゃないAPIもあるんですか?」

博士「もちろんじゃ。」

博士「例えばHTTP APIというものがある。」

たきの「何が違うんですか?」

博士「HTTP APIはHTTPを使っていれば自由に設計できる。」

例えば、

GET /getUserList

POST /createUser

POST /deleteUser

のようなURLでも問題ない。

一方REST APIなら、

GET /users

POST /users

DELETE /users/1

のように、

URLはリソース、

操作はHTTPメソッドで表現する。

REST API HTTP API
URLはリソースを表す URLは自由
HTTPメソッドで操作を表す URLで操作を書くこともある
ルールが統一される 柔軟に設計できる

たきの「REST APIはルールが決まっているから分かりやすいんですね!」

博士「その通りじゃ。」

HTTPメソッドとは?

博士「ではHTTPメソッドを見てみよう。」

メソッド 何をする?
GET データを取得する 「博士の情報を表示する」
POST 新しく登録する 「博士のアカウントを新規登録する」
PUT データ全体を更新する 「博士の名前・メールアドレス・電話番号をまとめて更新する」
PATCH データの一部を更新する 「博士の名前を『たきの』に変更する」
DELETE データを削除する 「博士のアカウントを削除する」

例えば、

GET /users

ユーザー一覧取得

POST /users

ユーザー登録

PATCH /users/1

ユーザー情報更新

DELETE /users/1

ユーザー削除

PUTとPUTCH

たきの「博士!」

たきの「PUTとPATCHって、どちらも更新ですよね?」

博士「その通りじゃ。」

博士「じゃが、更新の意味が違うのじゃ。」

例えば、現在の博士の情報が

{
  "name": "博士",
  "email": "hakase@example.com",
  "TEL": "111-1111-1111"
}

だとする。

PATCH

博士「PATCHは、変更したい項目だけ送るメソッドじゃ。」

例えば、

{
  "name": "たきの"
}

を送ると、

{
  "name": "たきの",
  "email": "hakase@example.com",
  "TEL": "111-1111-1111"
}

となり、名前だけが変更される。

たきの「他の情報はそのままなんですね!」

博士「その通りじゃ。」


PUT

博士「一方PUTは、このデータが新しい状態ですとサーバーへ伝えるメソッドじゃ。」

例えば、

{
  "name": "たきの",
  "email": "hakase@example.com",
  "phone": "090-1111-1111"
}

を送ると、

サーバーは

「博士の情報を、この内容に置き換える」

と考える。


じゃあPUTで名前だけ送ったら?

たきの「博士!」

たきの「じゃあPUTでも」

{
  "name": "たきの"
}

だけ送れば、名前だけ変わるんじゃないですか?」

博士「良い質問じゃ。」

博士「実は、APIによっては名前だけ更新してくれるものもある。

たきの「そうなんですか!」

博士「じゃが、それはAPIを作った人がそういう動きをするよう実装しているだけじゃ。」

博士「HTTPの仕様では、PUTは**『この内容でリソース全体を置き換える』**という意味なんじゃ。」

つまり、

{
  "name": "たきの"
}

だけ送ると、

APIによっては

{
  "name": "たきの"
}

だけが残り、

メールアドレスや電話番号が削除されたり、初期値になったりする可能性がある。

たきの「えぇ!?名前だけ変えたかったのに!」

博士「だからPUTでは、通常は新しい状態をすべて送るのじゃ。」

たきの「なるほど!」

たきの「PUTは『完成した新しいデータ』を送り、PATCHは『ここだけ直してください』とお願いするイメージなんですね!」

博士「その理解でばっちりじゃ。」

レスポンスコード

たきの「成功したかどうかはどう分かるんですか?」

博士「HTTPステータスコードを見るのじゃ。」

コード 意味
200 成功
201 作成成功
204 成功(返すデータなし)
400 リクエストが間違っている
401 ログインが必要
403 権限がない
404 見つからない
500 サーバーエラー

たきの「404は見たことあります!」

博士「『ページが見つからない』で有名じゃな。」

REST APIを作るときの注意点

セキュリティ

博士「ログインしていない人が管理者用のAPIを呼べたら困るじゃろ?」

たきの「大問題ですね…。」

博士「だから、ログインしている人だけが使えるようにしたり、管理者だけが実行できるようにしたりする仕組みが必要なんじゃ。」


パフォーマンス

博士「例えば会社に1万人の社員がおるとしよう。」

博士「その全員の情報を毎回一度に取得していたらどうなると思う?」

たきの「時間がかかりそうです…。」

博士「その通りじゃ。」

博士「だから、一度に必要な人数だけ取得したり、一度取得した情報は使い回したりして、サーバーの負担を減らす工夫をするのじゃ。」

たきの「必要な分だけ持ってくれば速くなるんですね!」


エラーハンドリング

博士「失敗したら」

エラー

だけ返すAPIでは原因が分からない。

例えば、

{
  "message": "ユーザーが存在しません"
}

のように、

何が原因なのか分かるように返すと、利用する人も修正しやすくなる。

たきの「なるほど!エラーの理由まで教えてくれるんですね!」


バージョニング

博士「APIは一度公開すると、多くの人が利用する。」

博士「途中で大きく変更すると、今まで動いていたアプリが動かなくなることもあるんじゃ。」

だから、

/api/v1/users

/api/v2/users

のようにバージョン番号を付けることが多い。

たきの「古いアプリもそのまま使えるようになるんですね!」

博士「その通りじゃ。」


使用制限(レートリミット)

博士「APIを1秒間に何万回も呼ばれたらどうなると思う?」

たきの「サーバーが大変そうです…。」

博士「その通りじゃ。」

博士「そこで、『一定時間に利用できる回数』を決めて、サーバーを守る仕組みを作ることがある。」

たきの「いたずら対策にもなりますね!」

博士「そういうことじゃ。」

RESTful API

博士「RESTのルールをしっかり守ったAPIはRESTful APIというのじゃ。」

たきの「"〜らしい"という意味の ful が付いているんですね!」

博士「ふむ。」

博士「実際の現場では、この二つの言葉はほぼ同じ意味で使われることも多いが、RESTful APIは『RESTの設計原則に忠実である』ことを強調する表現として覚えておくとよいぞ。」

まとめ

REST APIとは、

  • URLで「何(リソース)」を表す
  • HTTPメソッドで「何をするか」を表す
  • Webアプリで広く使われている設計方法

HTTPメソッドには、

  • GET:取得
  • POST:登録
  • PUT:全体置き換え
  • PATCH:一部更新
  • DELETE:削除

がある。

また、安全で使いやすいREST APIを作るためには、

  • セキュリティ
  • パフォーマンス
  • エラーハンドリング
  • バージョニング
  • 使用制限

も重要になる。


たきの「REST APIがだいぶ分かってきました!」

博士「ふむ。」

博士「次はJSON APIについて学んでみると良いぞ。」

博士「では、今日の一句」

今日の一句

API RESTに沿えば ええピーアイ

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?