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?

More than 1 year has passed since last update.

REST web APIのサービス設計について

Last updated at Posted at 2023-05-02

RESTfulとは

「RESTで求められる原則に従っている」こと

REST原則

REST原則には6つの要素が求められる

クライアント/サーバー
画面とデータで関心事を分離
クライアント側がトリガー、サーバー側は受け身

階層化システム
多層アーキテクチャー構成

コードオンデマンド
クライアントコードをダウンロードして実行できる(リリース後にクライアントコードを変更できる)

統一インターフェース

・リソースの識別(URIを用いてサーバーに保存されたデータを識別する)
・表現を用いたリソースの操作(断面情報を利用してサーバー上のデータを操作する)
・自己記述メッセージ(メッセージ内容が何であるか、ヘッダーに記述されている)
・アプリケーション状態エンジンとしてのハイパーメディア(HAYEOAS)
HATEOAS:レスポンスに現在の状態を踏まえて関連するハイパーリンクが含まれている

ステートレス
サーバーはリクエストだけでコンテキストを理解できる

キャッシュ制御
クライアントはレスポンスをキャッシュできる

REST API 設計レベル

LEVEL 0:HTTPを使っている
LEVEL 1:リソースの概念を導入(リソースごとにURLを分割)
LEVEL 2:HTTPの動詞を導入(LEVEL 1に加えてHTTPメソッドを活用)
LEVEL 3:HATEOASの概念を導入(LEVEL 2に加えてレスポンスにリソース間のつながりが含まれている)

URI設計について

  • 短く入力しやすい(冗長なパスを含まない)
  • 人間が読んで理解できる(省略しない)
  • 大文字小文字が混在していない(すべて小文字)
  • 単語はハイフンで繋げる
  • 単語は複数形を利用する
  • エンコードを必要とする文字を使わない
  • サーバー側のアーキテクチャが反映されていない
  • 改造しやすい
  • ルールが統一されている

主要なHTTPメソッド

メソッド名 説明
GET リソースの取得
POST リソースの新規登録
PUT 既存リソースの更新/リソースの新規登録
DELETE リソースの削除

レスポンスのデータフォーマット

主要なレスポンスフォーマットは3種類

XML

  • テキスト形式
  • タグで記述
  • タグは入れ子にできる
  • タグに属性を付けられる

JSON

  • テキスト形式
  • JavaScriptを元にしたフォーマット
  • XMLに比べてデータ量を減らせる
  • オブジェクトは入れ子にできる

JSONP (JSON with Padding)

  • テキスト形式
  • データフォーマットのようにみえるが「JavaScript」のコード
  • クロスドメインでデータを受け渡すことができる

データの内部構造で意識すること

  • エンベロープは使わない
  • オブジェクトはできるだけフラットにする(レスポンス容量を減らす)
  • ページネーションをサポートする情報を返す
  • プロパティの命名規則はAPI全体で統一する(スネークケース、キャメルケース等)
  • 日付はRFC3399(W3C-DTF)形式を使う
  • 大きな数値(64bit整数)は文字列で返す

参考文献

0
0
1

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?