最近迷った

REST APIのパラメータ設計

2019-02-22

Basic x Lancers x Kurashicom 合同勉強会

About Me

Ryuta Hamasaki

Laravel / Angular / Vue.js

ある日見かけたURL

GET /orders/status/5

想定した挙動

  • IDを指定して注文のステータスを取得するんかな?
  • 指定したステータスが見つからなかったら404?

GET /orders/status/5

  • ステータスで絞り込んで、注文リストを取得する
  • 該当するデータが存在しない場合、空のリストが返ってくる(200)

実際の挙動

GET /orders/status/5

🤔

こうあるべき

GET /orders?status_id=5

Path variable

  • リソースを一意に特定したい
  • リソースが見つからなかったら404
  • 例)/orders/123

Query string parameter

  • ソート、絞り込み、検索
  • リソースが見つからなかったら
    空のリスト(ステータスコード200)
  • 例)/orders?status_id=5

ある日見かけたURL(その2)

POST /user-roles
{
    user_id: 2,
    role_id: 3

}

  • Many to Many
  • pivotテーブルにレコードができる
id user_id role_id
1 2 3

user_roles table

ユーザーにロールを紐付けるAPI

もっと良いURLありそう🤔

POST /users/2/roles/3

POST /users/2/roles
           { role_id: 3 }

どれが良いと思いますか?

POST /users/2/roles/3

POST /users/2/roles
           { role_id: 3 }

POST /user-roles
           { user_id: 2, role_id: 3 }

紐付きを削除するときは?

DELETE /users/2/roles/3

DELETE /user-roles/1

pivotテーブルのID

こういうケースは?

id user_id podcast_id
1 2 3

subscriptions table

ユーザーがsubscribeしているPodcast

POST /subscriptions
          { user_id: 2, podcast_id: 3 }

ピボットをリソースとして扱う

DELETE /subscriptions/1

Thank You 😀

URL parameter design of REST API

By Ryuta Hamasaki

URL parameter design of REST API

  • 787