かきノート

Laravel で APIのバージョン管理をする場合、どんな方法で実現しよう? オープンソースを調べてみた。

July 11, 2021 • ☕️ 4 min read

Laravel で APIのバージョン管理をする場合、どんな方法がいいのだろう。
と思い、オープンソースを参考にしてみる事にした。

ちなみに、APIのバージョン管理、↓のような感じ。

https://qiita.com/api/v2/items

※「v2」がバージョン番号

以下、Laravel を使用したオープンソースを適当にピックアップして調査してみました。

調査対象の基準は、
『リポジトリ内を「v1」「v2」というキーワードで検索して、何かしらのファイルがヒットしたか』

Koel

https://github.com/koel/koel

一見、バージョン管理してるっぽく見えたけど、管理しているのは old ファイルのみ?
特にプロダクトとして組み込んでいるわけでは無さそう。

MONICA

https://github.com/monicahq/monica

‘us1.locationiq.com/v1/’ という固定文字があったが、それ以外は特に無し。
特に参考になる内容は無さそう。

Laracom

https://github.com/jsdecena/laracom

‘v1’ という記述があったが、単に CDN をコールしているだけだった。

October

https://github.com/octobercms/october

検索に引っかかったのはコメントのみ。

AIRFLIX

https://github.com/wells/airflix

ようやくそれっぽいのが見つかった。

api-versioning

「v1」という階層を設け、そこにファイルを格納していく、という方法。

バージョンが上がるごとに、無関係なファイル(変更が加えれれなかったファイル)もどんどん増えて行くのか・・・?
それはちょっと避けたい。

「$resourceVersion = 1.0」という変数があるが、詳細は未調査。

バージョンアップの影響が、今後も限定的に留められるアプリならまだしも、バージョンアップの影響範囲が今後も読めないプロダクトで実施すると、後で酷い目に遭いそう。

オープンソースを調べての感想

良く考えたら、オープンソースなんて個人または少数の開発者が趣味でやってるのが大半だし、そうなると APIのバージョン管理なんて面倒な事、誰もしたくないよね。

こんなのが必要なのは、きっかりした会社の正式プロダクトだ。

という事で、オープンソースはあまり参考にならなさそう。

その他の参考情報

という事で、他の方法を調べてみた。

Laravel で API バージョニングを実装するなら

APIのバージョニングは限局分岐でやるのが良い

Laravel RESTful APIバージョン管理設計

LaravelでAPIのバージョニングをする

Versioning your REST API with Laravel

泥臭く頭捻りながら考え出すしか無さそう。

結局、「v1 と v2 の挙動を if文で分岐する」みたいな実装になるのだろうか。

「v2 を追加したら、v1 がバグった!」という事態になるのは仕組みとして防止したいので、ソースコードレベルから分離するのが理想なんじゃないか(v2 の挙動は、v1 の挙動に一切影響を受けない構造が望ましいのではないか)と思ったが、そうすると似たようなソースが次々と生産され、無駄にソースが肥大化していくので、それは避けたい。。

となると、v1 と v2 の挙動を分岐処理なりインタフェースなりファクトリメソッドなりで差異を表現するのがベターか。

なら重要なのはテストコードを書く事と、テストコードが書きやすい実装にする事だな。


Relative Posts:

【PHP】Carbon:値を指定した日付の減算は、subDay($value) ではなく、subDays($value) を使おう!(公式)

July 14, 2021

PHP_CodeSniffer を使って、コーディング規約に準拠しているかをチェックする

July 1, 2021

福岡の物流エンジニアが、七転び八起きしたあと九回転び、寝っ転がったまま何かやってる事を垂れ流しているブログ

RotateLinkImg-iconRotateLinkImg-iconRotateLinkImg-iconRotateLinkImg-icon