0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Restful API

HTTPプロトコル(GET/POST/PUT/DELETE)を用いて、URLで識別されたWeb上のリソース(データ)を操作する設計原則(REST)に準拠したAPIです。

ステートレス(状態を持たない)で軽量なため、モダンなWebサービスやモバイルアプリのバックエンド通信で標準的に利用されています。

HTTPメソッドのマッピング

REST/RESTfulでは遵守することを求められていませんが、基本、遵守必須と考えておきましょう。

HTTPメソッド CRUD 操作内容
GET R リソース(データ)の取得
POST C リソース(データ)の作成
PUT/PATCH U リソース(データ)の更新
DELETE D リソース(データ)の削除

リソース(データ)の取得については例外があります。

HTTPのGETメソッドには、実装上の制約によるURI(URL)の長さ制限があるため、検索条件が多く、クエリ・パラメータが極端に長くなる場合、POSTメソッドで代替して制限を回避します。

CRUD

データベースの基本的な4つの操作機能の総称です。
ほぼ全てのアプリやシステムでデータ管理に必須の基礎概念です。

機能 SQL
Create INSERT 登録(作成)
Read SELECT 参照
Update UPDATE 更新
Delete DELETE 削除

HTTPステータス・コードのマッピング

HTTPステータスコードを用いて処理結果(成功、失敗、エラーの種類)をクライアントに明確に伝えることが重要です。

エラーの種類とHTTPステータス・コードを正しくマッピングする(エラーの種類に応じて適切なHTTPステータスコードを選択する)必要があります。

REST/RESTful APIでは、規定(標準化)されていませんが、このマッピングはRESTful APIの設計において重要です。

作成するアプリやシステムにおいて、マッピングをきちんと定義しルール化し遵守することで、コードの見通しが良くなるとともに、エラーまわりの処理(分岐)の共通化が可能になります。

世の中に存在するアプリやシステムの中には、このマッピングを正しく行えていないシステムがそれなりに存在します。

例えば、バリデーション・エラーの場合、ステータス・コードとして422を返すべきなのですが、正常終了扱いで200を返している等です。

ステータス・コード 名前
200系 - 正常終了 -
200 OK - レスポンスボディを返す場合
201 Created - POSTなどで新しいリソースが正常に作成された場合
204 No Content - レスポンスボディを返さない場合
300系 - リダイレクト -
303 See Other - レスポンスが他のURIとして存在し、リダイレクトする場合
400系 - クライアント・エラー -
400 Bad Request - 不正なリクエスト(サーバーがリクエストを理解できない場合)
401 Unauthorized - 未認証 or 認証失敗
403 Forbidden - 認証済みでアクセス権限なし
404 Not Found - リソース未検出(不在)
409 Conflict - リソース競合
422 UNPROCESSABLE CONTENT(旧UNPROCESSABLE ENTITY) - バリデーション・エラー
500系 - サーバー・エラー -
500 INTERNAL SERVER ERROR - サーバー内部エラー
503 SERVICE UNAVAILABLE - サービス利用不可

※ 201(Created)については、(ほとんどの場合)200(OK)で問題ないはずです。

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?