Задать вопрос
@knotik

В чём отличие в Laravel web.php и api.php?

Доброго время суток.
Перечитал много информации на эту тему но так и не понял, зачем использовать из приложения роуты api.php когда есть web.php?

Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.

Но все настоятельно рекомендуют использовать web.php для выдачи view, а все последующие post запросы со страницы уже пускать через api.php

Например загружается приложение на Vuejs и делается post запрос к серверу на выдачу списка пользователей.
Если это делается через web.php то там есть авторизация, и не авторизированный пользователь не сможет получить данный список, в тоже время используя api.php любой человек может запросить любой роут и получить кучу информации.

Количество Middleware на web.php значительно больше, т.е. любой запрос проходит больше проверок перед тем как выдать результат.

Я в курсе что на api.php можно прикрутить авторизацию auth:sanctum но зачем это делать когда уже всё это есть на web.php?

В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.php
  • Вопрос задан
  • 45 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Попробуем отделить коней от людей, насколько это получится.
Говоря просто: API - для отдачи непосредственного среза данных, обычно в виде JSON, WEB - для отдачи целых страниц в виде HTML.

Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.
Ну, неправильно думали, ничего страшного. Точнее, очень узко. Вот есть у вас сайт, а потом вы решили сделать к нему в пару мобильное приложение. Оно стороннее? Ничего сделать с отданным через WEB HTML оно не сможет*, потребуется API.
Наличие или отсутствие авторизации тут совершенно ни при чём.

в тоже время используя api.php любой человек может запросить любой роут и получить кучу информации
Любой человек получит то, что вы ему отдадите. Никакого запрета (или сложностей) на внедрение авторизации в API нет.

Количество Middleware на web.php значительно больше, т.е. любой запрос проходит больше проверок перед тем как выдать результат.
Middleware - это любые обработчики, а не только проверки. Т.е. "больше обработчиков не значит больше проверок". Любые обработчики вы можете навесить и на API**. И их даже не надо писать отдельно, в Laravel уже всё есть.

В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.php
С точки зрения безопасности разницы нет. API может быть несколько производительнее за счёт того, что обрабатывает и отдаёт меньше "лишнего". Но по этим аспектам их вообще не надо сравнивать, это всё равно, что выбирать между экскаватором и самосвалом по степени лёгкости угона того или другого.

* без костылей
** с поправкой на отсутствие сессии обычно
Ответ написан
Комментировать
yesbro
@yesbro
Думаю, помогаю думать
Все верно, у этих групп маршрутов разные Middleware.

Web-маршруты используют cookies, для них поднимается ларавелевская сессий, для не get-запросов проверяется csfr-токен. Для api-маршрутов всего этого нет.

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

Всегда думал что api.php нужно для запроса от сторонних приложений, сайтов к твоему сайту для получения какой то информации, которую я хочу предоставить, без авторизации.


Нет, ты и для своих запросов можешь использовать апи-группу маршрутов. И так же там можно сделать авторизацию, просто она будет по другому принципу.

но зачем это делать когда уже всё это есть на web.php?


Потому что есть не только возможность авторизовывать пользователя при помощи кук, но и через токен, который передается при каждом запросе. Бек и фронт вообще может быть разделен на разные сервера и на разные домены.

В итоге вопрос, с точки зрения безопасности, производительности есть преимущества api.php перед web.php


Ни у того ни у другого нет особых преимуществ.
Ответ написан
Комментировать
anatoly_kulikov
@anatoly_kulikov
Помог ответ? Отметь решением!
Хотел зайти и написать, но авторы двух других ответов дали по сути базу, добавить нечего =) просто поставил всем плюсы
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы