Найти в Дзене
drutsa2007

Laravel Passport API

В этой статье я поделюсь своим опытом создания REST API на бекенде Laravel 9.x. Постраюсь более коротко и по пунктам. Надеюсь основное вы уже знаете, знаете как пользоваться artisan, ну и уже создавали что-то на этом фреймворке. Создаем проект. composer create-project laravel/laravel restapi Создадим проект restapi в котором и будем работать. Для теста будем использовать Postman. Сначала установим, самый минимум без авторизации и аутентификации (об этом будет ниже). Пойдем по руководству официального сайта laravel. Не забудьте перейти в папку проекта. Установим passport. composer require laravel/passport Чтобы идти дальше нужно создать БД (я делаю через MySQL) и обновить данные в файле .env. Создадим БД и назовем также restapi кодировку установим (у меня она по умолчанию) utf8mb4_unicode_ci. Если хотите поменять на utf8_unicode_ci, тогда нужно заменить в файле config/database.php в строках: 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', После этого в файле .env укажем БД. DB_CO

В этой статье я поделюсь своим опытом создания REST API на бекенде Laravel 9.x. Постраюсь более коротко и по пунктам. Надеюсь основное вы уже знаете, знаете как пользоваться artisan, ну и уже создавали что-то на этом фреймворке.

Создаем проект.

composer create-project laravel/laravel restapi

Создадим проект restapi в котором и будем работать. Для теста будем использовать Postman. Сначала установим, самый минимум без авторизации и аутентификации (об этом будет ниже).

Пойдем по руководству официального сайта laravel. Не забудьте перейти в папку проекта.

Установим passport.

composer require laravel/passport

Чтобы идти дальше нужно создать БД (я делаю через MySQL) и обновить данные в файле .env. Создадим БД и назовем также restapi кодировку установим (у меня она по умолчанию) utf8mb4_unicode_ci. Если хотите поменять на utf8_unicode_ci, тогда нужно заменить в файле config/database.php в строках:

'charset' => 'utf8',

'collation' => 'utf8_unicode_ci',

После этого в файле .env укажем БД.

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=restapi

DB_USERNAME=root

DB_PASSWORD=

Сделаем миграции.

php artisan migrate

Далее сразу создадим .htaccess в корне проекта с таким содержимым, для того чтобы не запускать наш проект для проверки.

Создать .htaccess (не обязательно)

RewriteEngine on

RewriteCond %{REQUEST_URI} !^public

RewriteRule ^(.*)$ public/$1 [L]

Хотя я наверно переборщил с этим. Это я делал для того чтобы работать через openserver, создав там соответствующий домен. Здесь мы все-таки бедм запускать проект через artisan.

Первая проверка через postman. Запускаем сайт php artisan serve, запускаем postman.

В postman вставляем путь http://127.0.0.1:8000 параметр выставляем GET. В пункте headers убираем галочку у Accept, и добавляем свой Accept со значением application/json. Выставляем body, preview и нажимаем SEND. Как на картинке.

Если у вас тоже появилась главная страница то, это уже хорошо.

Теперь создадим контроллер. Назовем его Name и сделаем его сразу для api.

php artisan make:controller API\NameController --api

Далее заходим в routes/api.php и делаем как на рисунке. Добавляем 5 строку и 22 строку. и Закомментируем 18-20 строки, они нам не понадобятся.

-2

После этого проверим какие роуты мы получим командой php artisan route:list.

-3

Откроем контроллер и добавим минимум функционала для общего вывода (index) и конкретного вывода (show). Остальные методы я думаю вы сами осилите.

-4

Проверяем в postman оба варианта

-5

И второй

-6

Поздравляю, REST API работает. Теперь нужно чтобы все это выдавало только зарегистрированным пользователям.

Давайте по порядку. Первое изменяем файл config\auth.php. Добавляем пункт api

-7

Второе меняем routes\api.php

-8

И третье устанавливаем ключи для passport

php artisan passport:install

Проверяем через postman

-9

Теперь мы не можем получить данные, закрыто для неавторизованных пользователей.

Нам нужно получить Bearer Token.

Давайте добавим функционал по входу, выходу и регистрации.

Создадим 3 контроллера в папке Auth

-10

Также добавляем роуты в api

-11

Регистрация и вход, будет доступен всем. Выход будет доступен только вошедшим.

Регистрация

Делаем так как написано, возможно это не идеальный код, можете изменить его как хотите. Создаем метод в контроллере регистрации

-12

Проверяем через Postman. Обратите внимание где что нажимается и заполняется. Вверху Body->form-data. Внизу Body->Pretty. И не забудьте про метод POST.

-13

Успешно, пользователь зарегистрирован. Теперь нужен вход на сайт.

Вход на сайт

Первое что нужно сделать изменить модель User.

-14

Теперь создадим метод login в LoginController

-15

Проверяем в postman

-16

Пришел наш заветный токен, давайте используя этот токен получим наши данные. Копируем весь токен, все что в кавычках. Выставляем в пункте Authorization Type=Bearer Token и правее в поле Token вставляем сам токен.

-17

Нажимаем SEND и должно все сработать.

Осталось сделать выход, опять же нам потребуется наш токен для выхода.

Создаем метод logout в LogoutController

-18

Проверяем в postman

-19

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

Всем спасибо. Буду рад за комментарии, лайки и прочее.