Laravel5.3の変更点としてルーティングに関するファイルの変更が挙げられます。

以前はapp/Http/routes.phpで設定していましたが、5.3からは次のようになりました。routesディレクトリはルートディレクトリ直下にあります。

routesディレクトリ

  • /routes/web.php
  • /routes/api.php

通常はweb.phpにルーティングし、APIのためのルーティングはapi.phpに記述するようにします。これで切り分けができるようになりました。

RouteServiceProvider

この2つのファイルはRouteServiceProviderクラスで読み込みまれます。

読み込むファイル

  • mapWebRoutes():web.php
  • mapApiRoutes():api.php

mapWebRoutes()を見てみましょう。

mapWebRoutesメソッド

ミドルウェアはweb、名前空間はnamespaceプロパティを指定し、Route::groupでまとめています。そして、クロージャでrequireしています。

mapApiRoutes()も、ミドルウェアやrequireするファイルは違えどやっていることは同じです。

mapApiRoutesメソッド

決定的に違うのは、prefixの指定がある点です。これで、webapiとを区別しているのです。

アクセス方法

まずは、ルーティングのリストを表示しましょう。

ルート一覧

初期状態だと2つありますね。このURIMiddlewareに注目してください。MiddlewareがapiだとURIの頭にapiが付いていますね。先ほどのprefixで指定されているからです。このようにapi.phpでルーティングすると必ずapiから始まるURIになります。

それでは、実際にアクセスしてみましょう。

Middlewareがwebはそのままでも問題ないですが、apiはauth:apiというミドルウェアが動作しますので次のように新しくルートを追記しましょう。ただ、api testという文字を出力するだけです。

api.php

次のコマンドを実行してビルトインサーバーを起ち上げ、それぞれにアクセスします。

ビルトインサーバー起動コマンド

次にlocalhost:8000/でwebにアクセスします。デフォルトだとwelcome.blade.phpを参照しています。

デフォルトのweb画面

ではlocalhost:8000/apiでapiにアクセスします。

追記したapiの画面

ちゃんと出力されれば成功です。

ただ、APIはjsonを返すことがほとんどだと思います。なので、api.phpを次のようにしましょう。

さらに追記したapiの画面

もう一度localhost:8000/apiにアクセスします。

追記したapiの画面

ちゃんとjsonが出力されていると思います。

まとめ

いかがでしたでしょうか。こんな感じでwebとapiを切り分けるとルーティング周りがすっきりしますね。