LoginSignup
33
30

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-09-14

Laravelのルーティングは上から順番に読まれることを利用した小技です。

前提条件

  • 一部APIに大幅な変更があり、APIのバージョンをあげて対応したい
  • 旧APIはversion1として残したい
  • クライアントからのアクセスはAPI単位ではなく、一括でversion2に切り替えたい
  • 変更がないAPIに関してはversion1同様の処理をするようにしたい
  • しかし、version1のControllerの処理をversion2にコピーして使いたくない

routes.phpの設定方法

Routeのpatternとgroupを組み合わせて定義します。

routes.php
<?php

// API version2の定義
Route::pattern('apiVersion2', 'v2');
Route::group(['namespace' => 'Api\V2', 'prefix' => '{apiVersion2}'], function() {
    Route::get('example/show', 'UserController@show');
});

// API version2に未定義なrouteはv1のAPIを使う
// v1でもv2でもアクセスできるようにpattern定義する
Route::pattern('apiVersion1', 'v[12]');
Route::group(['namespace' => 'Api\V1', 'prefix' => '{apiVersion1}'], function() {
    Route::get('example/show', 'ExampleController@show');
    Route::post('example/delete', 'ExampleController@delete');
    Route::post('example/register', 'ExampleController@register');
});

上記のように設定することにより、以下のようなルーティングを実現できる。

URI controller
/v2/example/show Api\V2\ExampleController@show
/v1/example/show Api\V1\ExampleController@show
/v1/example/register Api\V2\ExampleController@register
/v2/example/register Api\V1\ExampleController@register

apiVersion2のRoute::groupに定義がないので、apiVersion1の定義が有効になる。

Controllerはversionごとにディレクトリを分けておくといい感じです。

/controllers
  /api
    /v1
      /ExampleController.php
    /v2
      /ExampleController.php
33
30
1

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
33
30