Laravel API: создание и тестирование API в Laravel
Опубликовано: 2023-05-10Laravel 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
Вы должны увидеть следующий экран:
Затем создайте модель с флагом -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'];
Как создать контроллер
Теперь создайте файл контроллера для продукта, выполнив следующую команду. Это создаст файл 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" }
После нажатия кнопки «Отправить» вы должны увидеть следующее:
Теперь извлеките созданные продукты с помощью запроса GET
. URL тот же. Результаты будут выглядеть следующим образом:
Как аутентифицировать 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" }
Используйте токен, полученный в качестве токена носителя, и добавьте его в качестве заголовка авторизации.
Как обрабатывать ошибки 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); }
Краткое содержание
Модель Laravel Eloquent упрощает создание, проверку и тестирование API. Его объектно-реляционное отображение обеспечивает простой подход к взаимодействию с базой данных.
Кроме того, выступая в качестве промежуточного программного обеспечения, токен Laravel Sanctum может помочь вам быстро защитить ваши API.
А если вам нужна дополнительная оптимизация, решение Kinsta для хостинга баз данных упрощает настройку и управление базами данных для всех ваших веб-проектов.