В Laravel из под капота не поддержки работы с GraphQL поэтому для работы с GraphQL в Laravel проекте самым подходящим пакетом будет Lighthouse (Документация: https://lighthouse-php.com/) Устанавливается как и любой пакет в PHP через Composer # Установка пакета composer require nuwave/lighthouse # Публикация конфигурации php artisan vendor:publish --provider="Nuwave\Lighthouse\LighthouseServiceProvider" Типы запроса: Схематика входных и выходных данных: 1. Input - будет использоваться для схематики входных данных Пример: input UserCreateInput { name: String! surname: String! email: String! } 2...
Заметки программиста
GraphQL API. Лучше или хуже чем REST API
GraphQL - это язык запросов для API-интерфейсов и среда, в которой они выполняются. С помощью GraphQL можно получить данные из API и передать их в приложение (от сервера к клиенту). У них есть официальная документация, которая расположена по адреу https://graphql.org/learn/. Данный язык был придуман компанией Facebook чтобы, якобы, исправить ошибки REST API. Facebook видели в REST API следующие недостатки, которые они решили исправить создав GraphQL: Если вы понимаете, что в вашей организации присутствуют данные проблемы, то можете попробовать создать один из новых проектов на GraphQL и, возможно, будет вам счастье...
Паттерн DTO (Data Transfer Object)
Data Transfer Object или же DTO или же в переводе на русский язык - "объект передачи данных" - это шаблон проектирования приложения, который позволяет упаковывать все необходимые данные в один экземпляр класса и передавать их в любой участок вашего приложения в удобном виде. Все начинается с проблемы. Допустим мы создаем кусок приложения, который создает кусок пользователя. Для начала мы создаем метод createUser , который будет выглядеть примерно так: public function createUser(string $email, string $password): User { return User::create([ 'email' => $email, 'password' => bcrypt($password) ]); }...
Что такое declare(strict_types=1)?
PHP с каждым большим обновлением все больше стримится к строгой типизации. Так вначале пути нельзя было вообще указывать типы (было просто var), потом стало можно указывать типы у аргументов, но нельзя указывать возвращаемый тип. Потом добавили скалярные типы, nullable. Потом типы у свойств классов и так далее. Но несмотря на все это - PHP не является строго типизированным языком, что дает много свободы разработчикам. Директива declare(strict_types=1) показывает интерпретатору то, что в данном файле будет использоваться строгая типизация. Это так сказать "бьет по рукам" неграмотным разработчикам, выдавая ошибки при нарушении типизации...
Сервисный слой (Service Layer) на примерах Laravel
Сервисный слой — это архитектурный паттерн, который выносит бизнес-логику из контроллеров в отдельные классы-сервисы. Это помогает: Главное что стоит понимать - это то, что контроллер нужен лишь для того чтобы принять запрос, передать его куда нужно, дождаться ответа и вернуть ответ. То есть в идеале метод контроллера будет выглядить следующим образом: class UserController extends Contoller { public function get(UserRequest $request): JsonResponse { return (new UserGetAction)->handle($request->perPage); } } Контроллеры должны быть тонкими. Представьте, что у вас есть контроллер...
Принцип TDD простыми словами
TDD (Test-Driven Development) - это подход к разработке, когда вы сначала пишете тест, а потом код, который делает этот тест успешным. Процесс состоит из 3 шагов, которые называют "Красный-Зеленый-Рефакторинг": Это как ускоряет разработку, так и повышает надежность кода + избавляет от необходимости писать автотесты в дальнейшем. Можно подумать, что разработка, наоборот, затягивается так как помимо написание функционала еще нужно тратить время на написание теста, но на самом деле это не так. В случае если вы пишете функционал, например, какой-то api роут. То написание идет примерно по следующей схеме: 1...
