LoginSignup
1
1

More than 1 year has passed since last update.

REST APIとは

Posted at

なにこれ

REST APIについて調べ直したときの個人用のメモ

リソースとは

データベースの行など

ROA(リソース指向アーキテクチャ)とは

参照するものをリソースとして、リソースを中心に考えるアーキテクチャ
リソースはURIを持つ(/products)
リソースに対する操作(GET, POST)
リソースの表現形式(言語, JSON, etc)

URI

リソースは1つ以上のURIを持つ
URIは記述的にしろ
/products/1 みたいな

/products1.1 と /products/latest は同じリソースを返すかもだけど、
概念が違うのでURIが2つでok
(前者はバージョン固定、後者は最新版)

ステートレス性

全てのHTTPリクエストが完全に分離している性質をステートレス性という
サーバー側でアプリケーション状態の管理をしない
クライアントが送信するHTTPリクエストに、サーバーが処理するための必要な情報が全て含まれてて、以前のリクエスト情報にも依存しない

リソース状態

サーバーで維持される状態のこと

統一インターフェース

GET リソースの取得
PUT リソースの更新
POST リソースの作成
DELETE リソースの削除
HEAD リソースのメタデータの取得
OPTIONS リソースがサポートするメソッドを調べる

GET /getResource じゃなくて GET /resource の方が一貫(統一)したインターフェースを保証できる

GET

  • GETリクエストを送信してリソースを取得する
  • response.bodyでリソースを持つ

DELETE

  • 不要なリソースを削除するために、DELETEリクエストを送信してリソースを削除する
  • response.bodyはステータスメッセージ or 空である

PUT

  • 新規リソースの作成
  • 既存リソースの更新

POST

  • 親リソースに対して子リソースの作成 /products/1/entries/1 みたいな
  • 既存リソースへの状態の追加
  • オーバーロードPOST

HEADとOPTIONS

HEAD

リソースのメタデータを取得(サイズ、更新日時など)

OPTIONS

リソースがサポートしてるHTTPメソッドなどを調べられる。
「Allow: GET, HEAD」のような形でレスポンスヘッダーにAllowヘッダーが含まれてる

分かったこと

取得するリソースが分かるようなURI名をつける!

e.g.
POST /users/1/products

POST /users/1/products/validate
みたいなURI名は微妙。
POSTメソッドなのにvalidationをするだけのエンドポイントは無駄ってかリソース取得の考え方と違う

paramsにsave: falseっていうfieldを追加して、
controllerで判別するべき?

余談

  • resouceに含めてはいけないレスポンスもある(emailなどユーザーの個人情報)
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