【fuelphp】APIバージョンを意識したAPI設計について考えてみた
はじめに
アプリリリース後にバグが見つかり、アプリ(ios,androidoともに)とAPIを改修する必要がある場合がありました。
対応としては
1. アプリを強制アップデートさせる(最新バージョンでないとアプリを使えないようにする)
2. 過去のアプリのバージョンと最新バージョンとどちらでもアプリを使用できるようにする
ということを考えたのですが、お客さんが強制アップロードは避けたいということで2.の形で対応する必要がありました。
で、アプリのバージョンごとにAPIを用意する必要がありました。
今回はAPIにversion1と2を用意して、アプリ側もこのversionに合わせてAPIのurlをきりかえるということを考えました。
現状
http://example.com/get_user # API① ユーザー情報を取得するAPI http://example.com/update_user # API② ユーザー情報を更新するAPI
上記のようなAPIがあったとして、今回API①を改修したいと考えます。
改善案
http://example.com/v2/user/get http://example.com/v1/user/update
このような形を考えたのですが、APIによってv1とv2をアプリ側で切り替えるというのは複雑になります
さらに改善案
// アプリのversion1はこちらにアクセス http://example.com/v1/user/get http://example.com/v1/user/update // アプリのversion2はこちらにアクセス http://example.com/v2/user/get http://example.com/v2/user/update
この形が1番すっきりしそうです。
で、この形にした場合にget_userは改修があるのでそれぞれコードがわかれる形で問題ないと思います。
が、update_userについてはv1もv2も全く同じコードとなってこれを二重で管理するというのが今回やりたかったことです
実装
構成はこのような形
project ├── fuel │ ├── app │ │ ├── v1 │ │ │ ├── user.php │ │ │ ・・・ │ │ ├── v2 │ │ │ ├── user.php │ │ │ ・・・
controller/v1/user.php
<?php class Controller_V1_User extends Controller { public function action_get() { ・・・ } public function action_update() { ・・・ } }
controller/v2/user.php
<?php class Controller_V2_User extends Controller_V1_User { public function action_get() { ・・・ } }
どうするのが1番いいのかわからないけど、こんな感じがいいのかな、、、
以上です