Работая с API иногда имеет смысл делать лог запросов, которые приходят на сервер, и ответов, которые сервер отправляет. Я уже написал статью о том, как делать лог, когда работаешь с API клиентом. Ее можно посмотреть здесь. Сейчас давайте рассмотрим как делать лог, когда программируешь API сервис. Например, если система третьей стороны присылает нам уведомления, что заказ отправлен, неплохо было бы сделать лог запросов которые эта система присылает и ответов, которые высылает наша система. Такой лог поможет разрешить спорные ситуации или найти ошибки в работе системы. Итак, начнем.
В routes/api.php файле Laravel создадим следующий маршрут:
Одна из самых распространенных проблем с производительностью, которую я видел в Laravel - это использование методов Eloquent и отношений из шаблонов Blade, создание ненужных дополнительных циклов и запросов. В этой статье я покажу различные сценарии и способы их эффективного использования.
Сценарий 1. Загрузка отношения belongsTo(): не забудьте про «жадную загрузку»
Типичный случай — вы перебираете записи через @foreach, и, в каком-то столбце, вам нужно показать родительскую запись с определенным полем.
И, конечно, Session принадлежит User, в app/Session.php :
public function user()
{
return $this->belongsTo(User::class)…
ИМХО, совершенно недопустимо изменять данные в Представлении. У кого-то может возникнуть такой соблазн, типа, для "оптимизации". Счётчик какой-нибудь посчитать и сохранить. Но не надо так делать! Потому что это портит логику и усложняет сопровождение.
Что же до "обращения к базе" в смысле операций чтения, в идеале да, они должны все происходить до обращения к Представлению. Но мы же сами добиваемся абстракции, когда чтение свойства объекта может неявно сопровождаться каким-то действием. Представление понятия не имеет делали мы eager loading или нет. Оно просто использует объект. Короче, врядли удастся избежать select в 100% случаев. По причине именно "объектности", "принципа чёрного ящика". Мы не всегда знаем как что-то работает внутри. Мы знаем только внешний эффект.
Недавно автор статьи Povilas опубликовал свой приём по внедрению данных в шаблон: через инъекцию сервиса (@inject), который рендерит свою вьюху и возвращает её как текст для вставки. Внутри такого сервиса очевидно будут операции с базой и как по мне это не очень страшно, если они не изменяют состояние.
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Вдобавок к поддержке отправки email Laravel поддерживает отправку уведомлений по разным каналам доставки, включая почту, SMS (через Nexmo) и Slack. Уведомления также можно сохранять в БД, чтобы выводить их в вашем веб-интерфейсе.
Обычно уведомления — это короткие информационные сообщения для пользователей о том…
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Во многих современных веб-приложениях для реализации обновляющегося на лету пользовательского интерфейса, работающего в режиме реального времени, используются WebSockets. Когда какая-либо информация изменяется на сервере, обычно посылается сообщение через WebSocket-подключение для обработки на клиенте. Это обеспечивает более надёжную и эффективную альтернативу постоянному опросу вашего приложения о наличии изменений.
Для помощи в создании таких приложений Laravel обеспечивает простую настройку…
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Laravel предоставляет очень удобный API для создания HTTP-запросов к вашему приложению, проверки вывода, и даже заполнения форм. Например, посмотрим на приведённый тест:
PHP
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation…
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Laravel предоставляет множество полезных инструментов для тестирования ваших приложений, использующих БД. Во-первых, вы можете использовать вспомогательный метод PHPseeInDatabase() для проверки того, что данные в БД соответствуют определённому набору критериев. Например, если вы хотите проверить, что в таблице users есть запись с полем email равным sally@example.com, вы можете сделать следующее:
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
При тестирование Laravel-приложений иногда нужно «заглушить» некоторые части приложения, чтобы во время тестирования они на самом деле не работали. Например, при тестировании контроллера, создающего события, можно заглушить слушателей событий, чтобы они не выполнились во время теста. Это позволит вам протестировать только HTTP-отклик контроллера, не беспокоясь о выполнении слушателей событий, которые можно протестировать отдельно.
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
В Laravel можно легко настроить аутентификацию через обычные формы входа, но что насчёт API? API обычно использует токены для аутентификации пользователей и не сохраняет состояние сессии между запросами. В Laravel реализована простая API аутентификация с помощью Laravel Passport, который предоставляет полную реализацию сервера OAuth2 для вашего приложения в считанные минуты. Passport создан на основе сервера League OAuth2, созданного Алексом…
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Laravel Scout предоставляет простое решение на основе драйверов для добавления полнотекстового поиска в ваши Eloquent-модели. С помощью наблюдателей за моделями Scout будет автоматически синхронизировать ваши поисковые индексы с вашими записями Eloquent.
Сейчас Scout поставляется с драйвером Algolia, однако написать свой драйвер довольно просто и вы можете дополнить Scout…
Этот перевод актуален для англоязычной документации на
(ветка
5.3).
Опечатка? Выдели и нажми Ctrl+Enter.
Введение
Laravel позволяет легко защитить ваше приложение от атак с подделкой межсайтовых запросов (CSRF). Подделка межсайтовых запросов — тип атаки на сайты, при котором несанкционированные команды выполняются от имени аутентифицированного пользователя.
Laravel автоматически генерирует CSRF-"токен" для каждой активной…
вид наверное был создан просто как .php без добавления .blade
ИМХО, совершенно недопустимо изменять данные в Представлении. У кого-то может возникнуть такой соблазн, типа, для "оптимизации". Счётчик какой-нибудь посчитать и сохранить. Но не надо так делать! Потому что это портит логику и усложняет сопровождение.
Что же до "обращения к базе" в смысле операций чтения, в идеале да, они должны все происходить до обращения к Представлению. Но мы же сами добиваемся абстракции, когда чтение свойства объекта может неявно сопровождаться каким-то действием. Представление понятия не имеет делали мы eager loading или нет. Оно просто использует объект. Короче, врядли удастся избежать select в 100% случаев. По причине именно "объектности", "принципа чёрного ящика". Мы не всегда знаем как что-то работает внутри. Мы знаем только внешний эффект.
Недавно автор статьи Povilas опубликовал свой приём по внедрению данных в шаблон: через инъекцию сервиса (@inject), который рендерит свою вьюху и возвращает её как текст для вставки. Внутри такого сервиса очевидно будут операции с базой и как по мне это не очень страшно, если они не изменяют состояние.
Calculations in Blade, without violating MVC? Use Service Injection