Добрый день! <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` зависит от того, как вы хотите, чтобы ваше приложение взаимодействовало с пользователями или другими системами.
Попробуем отделить коней от людей, насколько это получится. <br/> Говоря просто: API - для отдачи непосредственного среза данных, обычно в виде JSON, WEB - для отдачи целых страниц в виде HTML. <br/> <br/> <blockquote>Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.</blockquote> Ну, неправильно думали, ничего страшного. Точнее, очень узко. Вот есть у вас сайт, а потом вы решили сделать к нему в пару мобильное приложение. Оно стороннее? Ничего сделать с отданным через WEB HTML оно не сможет*, потребуется API. <br/> Наличие или отсутствие авторизации тут совершенно ни при чём. <br/> <br/> <blockquote>в тоже время используя api.php любой человек может запросить любой роут и получить кучу информации</blockquote> Любой человек получит то, что вы ему отдадите. Никакого запрета (или сложностей) на внедрение авторизации в API нет. <br/> <br/> <blockquote>Количество Middleware на web.php значительно больше, т.е. любой запрос проходит больше проверок перед тем как выдать результат.</blockquote> Middleware - это любые обработчики, а не только проверки. Т.е. "больше обработчиков не значит больше проверок". Любые обработчики вы можете навесить и на API**. И их даже не надо писать отдельно, в Laravel уже всё есть. <br/> <br/> <blockquote>В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.php</blockquote> С точки зрения безопасности разницы нет. API может быть несколько производительнее за счёт того, что обрабатывает и отдаёт меньше "лишнего". Но по этим аспектам их вообще не надо сравнивать, это всё равно, что выбирать между экскаватором и самосвалом по степени лёгкости угона того или другого. <br/> <br/> * без костылей <br/> ** с поправкой на отсутствие сессии обычно
Все верно, у этих групп маршрутов разные Middleware. <br/> <br/> Web-маршруты используют cookies, для них поднимается ларавелевская сессий, для не get-запросов проверяется csfr-токен. Для api-маршрутов всего этого нет. <br/> <br/> Исходя из этого ты и принимаешь решения какую группу маршрутов использовать. Нужны куки или старндартная авторизация добавляешь маршрут в веб-группу. Если вообще ничего не надо или используешь авторизацию по токену, то в апи группу. <br/> <br/> <blockquote>Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.</blockquote> <br/> <br/> Нет, ты и для своих запросов можешь использовать апи-группу маршрутов. И так же там можно сделать авторизацию, просто она будет по другому принципу. <br/> <br/> <blockquote>но зачем это делать когда уже всё это есть на web.php?</blockquote> <br/> <br/> Потому что есть не только возможность авторизовывать пользователя при помощи кук, но и через токен, который передается при каждом запросе. Бек и фронт вообще может быть разделен на разные сервера и на разные домены. <br/> <br/> <blockquote>В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.php</blockquote> <br/> <br/> Ни у того ни у другого нет особых преимуществ.