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

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

нравитьсяApp\Http\Controllers\ApiApp\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файл, создав новые маршруты для этих вызовов API. Это потребует репликации существующих функций в пространстве имен Admin.
  2. Используйте существующие функции в пространстве имен Admin. Создайте отдельную группу маршрутов вroutes.php файл, который использует пространство имен Admin, но auth:api промежуточное ПО вместо обычного webпромежуточное ПО. Маршрут в этом случае будет похож на тот, который существовал ранее в группе маршрутов администратора. Это не потребует написания более нового кода по сравнению с другим вариантом.

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

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

Вот мой код.

Опция 1:

routes.php файл

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');
  });
});

0 ответов

Другие вопросы по тегам