Должен ли я использовать Laravel Controller в группе маршрутизации веб-промежуточного программного обеспечения для ответа на вызовы API, используя отдельный маршрут с промежуточным программным обеспечением auth: api? - PullRequest
0 голосов
/ 23 января 2020

Я унаследовал приложение Laravel 5.4 на работе (очень хорошо написанное и сложное). Приложение имеет четыре группы маршрутов в соответствии с четырьмя различными конечными пользователями в файле routes.php. Все группы маршрутов имеют свое собственное пространство имен в App\Http\Controllers.

как App\Http\Controllers\Api App\Http\Controllers\Admin

Мой вопрос касается двух групп маршрутов - Api и Admin. Основная доля код находится под пространством имен Admin, а пространство имен Api имеет меньшую долю. Прямо сейчас вызовы API из внешней среды используют группу маршрутов Api с использованием пространства имен Api, а веб-приложение работает через группу маршрутов Admin с использованием пространства имен Admin.

Мне нужно сделать вызовы API для приложения GET / Данные POST в базе данных. Те же самые задачи создания и выборки прекрасно выполняются в веб-приложении в браузере, поскольку в одном из контроллеров в пространстве имен Admin есть функции для выполнения этих задач. Я хочу использовать эти существующие функции для выполнения новых вызовов API.

Я использую Postman для тестирования этих вызовов API.

У меня есть два варианта:

  1. Создайте новые функции для вызовов API в ApiController в пространстве имен Api. Используйте существующую группу маршрутов Api с промежуточным программным обеспечением auth:api в файле routes.php, создав fre sh маршруты для этих вызовов API. Это потребует репликации этих существующих функций в пространстве имен Admin.
  2. Используйте существующие функции в пространстве имен Admin. Создайте отдельную группу маршрутов в файле routes.php, которая использует пространство имен Admin, но промежуточное ПО auth:api вместо обычного промежуточного ПО web. Маршрут в этом будет похож на тот, который уже существовал в группе маршрутов администратора. Это не потребовало бы написания намного более нового кода по сравнению с другим вариантом.

Я пробовал оба решения, и оба работают. Я могу хранить данные в базе данных. Но я должен выполнить этот вызов API, чтобы получить огромный объем данных для статистических целей, и вставка большого количества кода только для этого не кажется правильной, когда у меня уже есть функции, выполняющие ту же задачу. Отсюда и вопрос, который здесь задают.

Может кто-нибудь сказать, какой подход из двух приведенных выше лучше? И есть ли проблемы безопасности с любым из этих параметров?

Вот мой код.

Опция 1:

routes.php file

Route::group(['domain' => getenv('API_URL') , 'namespace' => 'Api', 'middleware' => 'api-auth'], function () {
    Route::match(['get', 'post'], 'v1/createTask1', 'ApiController@create_task1');
    Route::match(['get', 'post'], 'v1/createTask2', 'ApiController@create_task2');
    Route::match(['get', 'post'], 'v1/getStats', 'ApiController@get_stats_task');
);

Вариант 2:

routes.php файл

// Routes for making API calls to the Web functions already present under the Admin namespace
Route::group(['domain' => getenv('API_URL') , 'namespace' => 'Admin', 'middleware' => 'api-auth'], function() {
    Route::match(['get', 'post'], 'v1/controller1_prefix/create', 'Controller1@createAction');
    Route::match(['get', 'post'], 'v1/controller2_prefix/create', 'Controller2@createAction');
    Route::match(['get', 'post'], 'v1/controller3_prefix/fetchStats', 'Controller2@statsAction');
});

Route::group(['domain' => getenv('ADM_URL') , 'namespace' => 'Admin', 'middleware' => 'web'], function () {
    Route::group(['middleware' => 'auth:admins'], function() {
        Route::match(['get', 'post'], 'v1/controller3_prefix/fetchStats', 'Controller2@statsAction');
  });
       *** Whole lot of routes ***
    Route::group(['middleware' => ['auth:admins', 'check-role:SUPER_ADMIN|ADMIN']], function() {
        Route::match(['get', 'post'], 'v1/controller1_prefix/create', 'Controller1@createAction');
        Route::match(['get', 'post'], 'v1/controller2_prefix/create', 'Controller2@createAction');
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...