方法1
・上記URLの構造で、webアプリを開発していく場合、1つのwebアプリ毎にプロジェクトを新規作成していくのか。
・共通で使用したい処理がある場合、別途プロジェクトを新規作成して、APIのような構造で実現するのか。(例えばFTPアップロードを行う処理を別々のwebアプリから呼びたい場合など)
この方法でも可能かと思いますし、そういった方法をとる場合もあるかと思います。
この場合、プロジェクトごとに完全に分離できますので、プロジェクト毎の影響がほぼないのがメリットです。共通部分のプロジェクトを変更しなければ、基本的に各プロジェクトの変更は別のプロジェクトに影響を与えないはずです。
デメリットとしては複数のプロジェクトを管理しなくてはいけなくなるのとソースコードの記述量も肥大化しやすいかと思いますので、結果的に開発/保守の規模が膨らみがちになる点でしょうか。結果的に開発速度は後述する方法2よりも遅くなるかと思います。
方法2
ルーティングの設定でprefixを使えば、1つのプロジェクトですべてまかなってしまうことも可能です。
https://example.com/appA/
https://example.com/appB/
このケースですと、以下のようにします。
php
1Route::prefix('appA')->group(function () {
2 Route::get('users', 'UserController@index');
3 Route::get('cars', 'AppACarController@index');
4});
5
6Route::prefix('appB')->group(function () {
7 Route::get('users', 'UserController@index');
8 Route::get('cars', 'AppBCarController@index');
9});
以下、参考にしてみてください。
https://readouble.com/laravel/5.6/ja/routing.html#route-group-prefixes
こちらの方法のメリットは、ルーティングの設定をするだけですので、難しいことを考えずに通常通りの開発でいける点です。また、プロジェクトも1つなので開発/保守の規模は方法1よりは確実に小さくなるかと思います。結果的に開発速度はこちらのほうが早い気がします。
デメリットはappAとappBが同じプロジェクトで管理されるため、appAの変更がappBに影響してしまうと行ったケースが方法1より出てきやすい点かと思います。
どっちをとるべきか・・・
実際にどちらを使うべきかは、開発の予算やスケジュール、開発規模、改修などの予定を考慮するべきなので一概には言えません。
個人的な嗜好としては、方法2が好みです。好みの根拠としてはKISSの原則ですかね。
ご参考になれば幸いです。