Добрый день! <br/> Я изучил множество материалов по поводу различий между роутами в файлах api.php и web.php, но так и не смог понять, в чем конкретно заключается их назначение. <br/> <br/> Я всегда считал, что api.php предназначен для обработки запросов от сторонних приложений и сайтов, которые хотят получить информацию с моего сайта без авторизации. <br/> <br/> Однако многие эксперты рекомендуют использовать web.php для отображения представлений, а все POST-запросы с веб-страницы обрабатывать через api.php. <br/> <br/> Приведу пример: если приложение разрабатывается на Vue.js и отправляет POST-запрос на сервер для получения списка пользователей, то, если этот запрос будет обрабатываться в web.php, требуется авторизация, и неавторизованный пользователь не сможет получить доступ к этому списку. В то же время использование api.php позволяет любому человеку запрашивать маршруты и получать доступ к различной информации. <br/> <br/> Объем Middleware в web.php значительно больше, и каждый запрос проходит более тщательные проверки, прежде чем результат будет возвращен. <br/> <br/> Я также понимаю, что в api.php
В Laravel есть два основных файла маршрутизации — `web.php` и `api.php`, и каждый из них имеет свое специфическое назначение. ### Основные отличия между `web.php` и `api.php`: 1. **Цель использования:** - **`web.php`**: Этот файл предназначен для маршрутов, которые обрабатывают запросы, поступающие от веб-браузеров. Он обычно используется для маршрутов, связанных с пользовательским интерфейсом (UI), а также для обработки форм и взаимодействия с представлениями. Например, когда вы разрабатываете обычное веб-приложение с формами, страницами и сессиями, вы будете определять маршруты в этом файле. - **`api.php`**: Это файл для маршрутов, которые обрабатывают запросы, поступающие от API-клиентов, таких как мобильные приложения или сторонние сервисы. Эти маршруты предназначены для предоставления данных в формате JSON и обычно не требуют сессий, так как они могут работать с токенами для авторизации. 2. **Middleware:** - **`web.php`**: Все маршруты в этом файле используют набор middleware, который включает `StartSession`, `ShareErrorsFromSession`, `AddQueuedCookiesToResponse` и другие. Эти middleware обеспечивают поддержку сессий, CSRF-защиту и другие функции, которые необходимы для работы веб-приложений. - **`api.php`**: В этом файле маршруты используют middleware `api`, который, как правило, менее строгий. Например, здесь отсутствует защита от CSRF, так как API часто работает с токенами и не требует сохранения состояния между запросами. 3. **Формат ответа:** - **`web.php`**: Обычные маршруты предназначены для возврата HTML-страниц и работы с представлениями (views). - **`api.php`**: Предполагается возврат данных в формате JSON или XML, так как такие форматы чаще используются в API. 4. **Структура и подход к разработке:** - **`web.php`**: Зачастую используются стандартные маршруты с формами и аутентификацией пользователей. Здесь вы можете использовать все возможности Laravel для работы с представлениями, формами и сессиями. - **`api.php`**: Оптимизирован для работы с RESTful API, где акцент сделан на предоставление и прием данных. ### Когда использовать каждый файл? - Если у вас есть веб-приложение с пользовательским интерфейсом и вы хотите обрабатывать пользовательские запросы (например, отправка форм), используйте `web.php`. - Если вы разрабатываете API, которое будет использоваться другими приложениями или клиентами (например, мобилка или SPA на Vue.js), используйте `api.php`. ### Пример: - **`web.php`:** ```php Route::get('/users', 'UserController@index')->middleware('auth'); Route::post('/users', 'UserController@store')->middleware('auth'); ``` - **`api.php`:** ```php Route::get('/users', 'Api\UserController@index'); Route::post('/users', 'Api\UserController@store'); ``` Таким образом, выбор между `web.php` и `api.php` зависит от того, как вы хотите, чтобы ваше приложение взаимодействовало с пользователями или другими системами.
Попробуем отделить коней от людей, насколько это получится.
Говоря просто: API - для отдачи непосредственного среза данных, обычно в виде JSON, WEB - для отдачи целых страниц в виде HTML.
Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.Ну, неправильно думали, ничего страшного. Точнее, очень узко. Вот есть у вас сайт, а потом вы решили сделать к нему в пару мобильное приложение. Оно стороннее? Ничего сделать с отданным через WEB HTML оно не сможет*, потребуется API.
Наличие или отсутствие авторизации тут совершенно ни при чём.
в тоже время используя api.php любой человек может запросить любой роут и получить кучу информацииЛюбой человек получит то, что вы ему отдадите. Никакого запрета (или сложностей) на внедрение авторизации в API нет.
Количество Middleware на web.php значительно больше, т.е. любой запрос проходит больше проверок перед тем как выдать результат.Middleware - это любые обработчики, а не только проверки. Т.е. "больше обработчиков не значит больше проверок". Любые обработчики вы можете навесить и на API**. И их даже не надо писать отдельно, в Laravel уже всё есть.
В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.phpС точки зрения безопасности разницы нет. API может быть несколько производительнее за счёт того, что обрабатывает и отдаёт меньше "лишнего". Но по этим аспектам их вообще не надо сравнивать, это всё равно, что выбирать между экскаватором и самосвалом по степени лёгкости угона того или другого.
* без костылей
** с поправкой на отсутствие сессии обычно
Все верно, у этих групп маршрутов разные Middleware.
Web-маршруты используют cookies, для них поднимается ларавелевская сессий, для не get-запросов проверяется csfr-токен. Для api-маршрутов всего этого нет.
Исходя из этого ты и принимаешь решения какую группу маршрутов использовать. Нужны куки или старндартная авторизация добавляешь маршрут в веб-группу. Если вообще ничего не надо или используешь авторизацию по токену, то в апи группу.
Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.
Нет, ты и для своих запросов можешь использовать апи-группу маршрутов. И так же там можно сделать авторизацию, просто она будет по другому принципу.
но зачем это делать когда уже всё это есть на web.php?
Потому что есть не только возможность авторизовывать пользователя при помощи кук, но и через токен, который передается при каждом запросе. Бек и фронт вообще может быть разделен на разные сервера и на разные домены.
В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.php
Ни у того ни у другого нет особых преимуществ.