LoginSignup
3
3

More than 5 years have passed since last update.

PHPでRestfulなWebApiのバージョン管理について

Posted at
1 / 19

目的

PHPでRestfulなWebApiのバージョン管理についての実装方法の考察


経緯

webアプリを作ろうって思った際に、phpでwebapiを作成することになりました。Restfulを採用してやろうと思ったが、バージョン管理をどうしようと。


注釈

  • 使用フレームワークはLaravel5.3
  • 今回のapiは公開用ではない
  • version情報はurlへ埋め込む方式。例:/v1/messages/:messageId

考え1

ルーティングで参照するディレクトリを分けて、Controllers/下のディレクトリ構造をこんな感じにしてやったら良いんじゃないか?


こんな感じ
app/
┠ HTTP/
│ ┠ Controllers/
│ │ ┠ v1/
│ │ ┠ v2/
│ │ ┠ Auth/
│ │ └ Kernel.php
│ ┠ Middleware


結果: Middlewareなどに更新が入ることは滅多にないが、Middlewareを修正したり、Authを修正したりする際に、v1とv2、両方に影響を与えてしまう可能性が非常に高い。


考え2

ルーティングで参照するディレクトリを分けて、HTTP/下のディレクトリ構造をこんな感じにしてやったら良いんじゃないか?


こんな感じ
app/
┠ HTTP/
│ ┠ v1/
│ ┠ v2/
│ │ ┠ Controllers/
│ │ ┠ middleware/
│ │ └ Kernel.php


結果:メジャーバージョンはよさげ。


考え2−1

では、マイナーバージョンアップの際はどうする?ちょっとやり方を統一してみよう。


app/
┠ HTTP/
│ ┠ v1/
│ ┠ v2/
│ │ ┠ 001
│ │ ┠ 010
│ │ │ ┠ Controllers/
│ │ │ ┠ middleware/
│ │ │ └ Kernel.php


結果:こりゃあ酷いorz
そもそも私が欲しいのは、Gitのbranch機能的な奴なんだよ!


考え2−2

そもそもマイナーバージョンはAccept: application/json; version=010などで指定可能な様にしようと思っていて、指定しない場合は、自動的に最新のマイナーバージョンを適用する。では、api内でif文で対応するか。。。


結果:まぁ、普通。


考え3

そもそも自分で作ったサービスでしか使用しないapiで、他人に提供する予定ないし、その場合は古いバージョンのapiは完全に使用しないし。この場合、Gitで普通に管理した方が良いんじゃないか?
master/
┠ v1/
│ └ dev/
┠ v2/
│ └ dev/


結果:まぁ、普通。。。


結論

Gitは素晴らしい。公開する予定のあるapiの場合は、考え2-2が良いのかなって思っています。
しかし、世の中素晴らしいアーキテクチャが沢山あるので、もし意見やアドバイスがある場合、些細なことでも良いのでコメント頂けると幸いです。


参考サイト

3
3
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
3
3