Laravel API: создание и тестирование API в Laravel

Опубликовано: 2023-05-10

Laravel Eloquent — это простой способ взаимодействия с вашей базой данных. Это объектно-реляционный преобразователь (ORM), который упрощает сложные базы данных, предоставляя модель для взаимодействия с таблицами.

Таким образом, Laravel Eloquent имеет отличные инструменты для создания и тестирования API для поддержки вашей разработки. В этой практической статье вы увидите, как легко создавать и тестировать API с помощью Laravel.

В этой демонстрации вы начнете с создания модели, которую можно использовать для построения API и таблицы базы данных. Затем вы увидите, как добавить контроллер в качестве уровня бизнес-логики и маршрут для завершения API. Затем вы узнаете, как выполнять тестирование API с помощью Postman, прежде чем, наконец, сосредоточиться на аутентификации и обработке ошибок.

Предпосылки

Для начала вот что вам понадобится:

  • Laravel версии 8 или 9
  • Композитор
  • Почтальон
  • XAMPP
  • Базовые знания API и PHP

Основы API

Начните с создания нового проекта Laravel с помощью <code>composer</code>:

 composer create-project laravel/laravel laravel-api-create-test

Чтобы запустить сервер, выполните следующую команду, которая запускает сервер приложений на порту 8000:

 cd laravel-api-create-test php artisan serve

Вы должны увидеть следующий экран:

Целевая страница Laravel
Ларавель

Затем создайте модель с флагом -m для миграции, используя приведенный ниже код:

 php artisan make:model Product -m

Теперь обновите файл миграции, включив в него необходимое поле. Добавьте поля заголовка и описания для модели продукта и эти два поля таблицы в файле database/migrations/{date_stamp}_create_products_table.php .

 $table->string('title'); $table->longText('description');

Следующий шаг — сделать эти поля заполняемыми. Внутри app/Models/ Product.php сделайте поля title и description заполняемыми.

 protected $fillable = ['title', 'description'];
Верите, что у вас есть идея следующего вирусного приложения? Вот как вы можете быстро создать и протестировать свой API ️ Нажмите, чтобы твитнуть

Как создать контроллер

Теперь создайте файл контроллера для продукта, выполнив следующую команду. Это создаст файл app/Http/Controllers/Api/ProductController.php .

 php artisan make:controller Api\\ProductController --model=Product

Теперь добавьте логику для создания и получения продуктов. Внутри метода index добавьте следующий код для получения всех продуктов:

 $products = Product::all(); return response()->json([ 'status' => true, 'products' => $products ]);

После этого вы должны добавить класс StoreProductRequest для хранения новых продуктов в базе данных. Добавьте следующий класс вверху того же файла.

 public function store(StoreProductRequest $request) { $product = Product::create($request->all()); return response()->json([ 'status' => true, 'message' => "Product Created successfully!", 'product' => $product ], 200); }

Теперь вы создадите запрос, который вы можете сделать, выполнив следующую команду:

 php artisan make:request StoreProductRequest

Если вы хотите добавить проверки, вы можете использовать файл app/Http/Requests/StoreProductRequest.php . Для этой демонстрации нет никаких проверок.

Как создать маршрут

Последний шаг перед тестированием API — добавление маршрута. Для этого добавьте следующий код в файл route/api.php . Добавьте оператор use в начало файла и оператор Route в тело:

 use App\Http\Controllers\Api\ProductController; Route::apiResource('products', ProductController::class);

Прежде чем приступить к тестированию API, убедитесь, что таблица products находится в вашей базе данных. Если он не существует, создайте его с помощью панели управления, такой как XAMPP. Кроме того, вы можете выполнить следующую команду для переноса базы данных:

 php artisan migrate

Как протестировать API

Перед тестированием API убедитесь, что метод <code>authorize</code> в файле app/Http/Requests/StoreProductRequest.php настроен на возврат <code>true</code>.

Теперь вы можете создать новый продукт с помощью Postman. Начните с отправки POST запроса по этому URL-адресу: http://127.0.0.1:8000/api/products/. Поскольку это запрос POST для создания нового продукта, вы должны передать объект JSON с заголовком и описанием.

 { "title":"Apple", "description":"Best Apples of the world" }
Создание нового продукта в Postman
Создание нового продукта в Postman

После нажатия кнопки «Отправить» вы должны увидеть следующее:

Почтальон после нажатия Отправить
После нажатия Отправить

Теперь извлеките созданные продукты с помощью запроса GET . URL тот же. Результаты будут выглядеть следующим образом:

Продукты, полученные запросом GET.
Продукты, полученные запросом GET.

Как аутентифицировать API с помощью Sanctum

Аутентификация имеет решающее значение при защите API. Laravel упрощает это, предоставляя функциональность токена Sanctum, который вы можете использовать в качестве промежуточного программного обеспечения. Он защищает API с помощью токенов, генерируемых, когда пользователь входит в систему, используя правильные учетные данные. Помните, что пользователи не могут получить доступ к защищенному API без токена.

Первым шагом к добавлению аутентификации является добавление пакета Sanctum с помощью приведенного ниже кода:

 composer require laravel/sanctum

Затем опубликуйте файл конфигурации Sanctum:

 php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

После этого добавьте токен Sanctum в качестве промежуточного ПО. Внутри файла app/Http/Kernel.php используйте следующий класс и замените middlewareGroups на следующий код в API защищенных групп промежуточного ПО.

 use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];

Следующим шагом является создание UserController и добавление кода для аутентификации токена.

 php artisan make:controller UserController

После создания UserController перейдите к файлу app/Http/Controllers/UserController.php и замените существующий код следующим кодом:

 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Facades\Hash; class UserController extends Controller { // function index(Request $request) { $user= User::where('email', $request->email)->first(); // print_r($data); if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); } $token = $user->createToken('my-app-token')->plainTextToken; $response = [ 'user' => $user, 'token' => $token ]; return response($response, 201); } }

Прежде чем вы сможете протестировать аутентификацию, создайте пользователя, использующего сидеры. Следующая команда создает файл UsersTableSeeder .

 php artisan make:seeder UsersTableSeeder

Внутри файла database/seeders/UsersTableSeeder.php замените существующий код следующим кодом для заполнения пользователя:

 <?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('users')->insert([ 'name' => 'John Doe', 'email' => '[email protected]', 'password' => Hash::make('password') ]); } }

Теперь запустите сидер с помощью этой команды:

 php artisan db:seed --class=UsersTableSeeder

Последний шаг, оставшийся в потоке аутентификации, — это использование созданного промежуточного программного обеспечения для защиты маршрута. Перейдите к файлу route/api.php и добавьте маршрут продуктов внутри промежуточного программного обеспечения.

 use App\Http\Controllers\UserController; Route::group(['middleware' => 'auth:sanctum'], function () { Route::apiResource('products', ProductController::class); }); Route::post("login",[UserController::class,'index']);

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

Внутренняя ошибка сервера после добавления маршрута
Внутренняя ошибка сервера после добавления маршрута

Но как только вы войдете в систему, получите токен и используете его в заголовке, он аутентифицирует вас и начнет работать. Вы можете отправить запрос POST на http://127.0.0.1:8000/api/login со следующим телом:

 { "email":"[email protected]", "password":"password" }
Успешная аутентификация и токен Bearer
Успешная аутентификация

Используйте токен, полученный в качестве токена носителя, и добавьте его в качестве заголовка авторизации.

Добавление токена носителя в качестве заголовка авторизации
Добавление токена носителя в качестве заголовка авторизации

Как обрабатывать ошибки API

Всякий раз, когда вы отправляете запрос на сервер, он отвечает. Вместе с ответом он также отправляет код состояния в соответствии с характером ответа. Например, код состояния 200 указывает на то, что запрос выполнен успешно, а код 404 указывает на то, что сервер не может найти запрошенный ресурс.

Однако кода состояния недостаточно. Требуется удобочитаемое сообщение об ошибке. В Laravel есть много способов обработки ошибок. Вы можете использовать блок try-catch, резервный метод или отправить собственный ответ. Следующий код, который вы добавили в UserController , демонстрирует это.

 if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); }
Сосредоточьтесь на интересных аспектах разработки API, не беспокоясь о сложности базы данных. Вот как нажмите, чтобы твитнуть

Краткое содержание

Модель Laravel Eloquent упрощает создание, проверку и тестирование API. Его объектно-реляционное отображение обеспечивает простой подход к взаимодействию с базой данных.

Кроме того, выступая в качестве промежуточного программного обеспечения, токен Laravel Sanctum может помочь вам быстро защитить ваши API.

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