Laravel Eloquent — это простой способ взаимодействия с вашей базой данных. Это объектно-реляционный преобразователь (ORM), который упрощает сложные базы данных, предоставляя модель для взаимодействия с таблицами.
Таким образом, Laravel Eloquent имеет отличные инструменты для создания и тестирования API для поддержки вашей разработки. В этой практической статье вы увидите, как легко создавать и тестировать API с помощью Laravel.
В этой демонстрации вы начнете с создания модели, которую можно использовать для построения API и таблицы базы данных. Затем вы увидите, как добавить контроллер в качестве уровня бизнес-логики и маршрут для завершения API. Затем вы узнаете, как выполнять тестирование API с помощью Postman, прежде чем, наконец, сосредоточиться на аутентификации и обработке ошибок.
Предпосылки
Для начала вот что вам понадобится:
- Laravel версии 8 или 9
- Композитор
- Почтальон
- XAMPP
- Базовые знания API и PHP
Основы API
Начните с создания нового проекта Laravel, используя composer
:
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
Теперь обновите файл миграции, включив в него необходимое поле. Добавьте поля заголовка и описания для модели продукта и эти два поля таблицы внутри база данных/миграции/{date_stamp}_create_products_table.php файл.
$table->string('title');
$table->longText('description');
Следующий шаг — сделать эти поля заполняемыми. Внутри приложение/Модели/Продукт.phpделать title
и description
заполняемые поля.
protected $fillable = ['title', 'description'];
Как создать контроллер
Теперь создайте файл контроллера для продукта, выполнив следующую команду. Это создаст приложение/Http/Контроллеры/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
Если вы хотите добавить проверки, вы можете использовать приложение/Http/запросы/StoreProductRequest.php файл. Для этой демонстрации нет никаких проверок.
Как создать маршрут
Последний шаг перед тестированием API — добавление маршрута. Для этого добавьте следующий код внутрь файла маршруты /api.php файл. Добавить use
оператор в начале файла и Route
утверждение в теле:
use App\Http\Controllers\Api\ProductController;
Route::apiResource('products', ProductController::class);
Прежде чем приступить к тестированию API, убедитесь, что продукты таблица находится в вашей базе данных. Если он не существует, создайте его с помощью панели управления, такой как XAMPP. Кроме того, вы можете выполнить следующую команду для переноса базы данных:
php artisan migrate
Как протестировать API
Перед тестированием API убедитесь, что authorize
метод внутри приложение/Http/запросы/StoreProductRequest.php настроен на возвращение true
.
Теперь вы можете создать новый продукт с помощью 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 в качестве промежуточного ПО. Внутри приложение/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
перейдите к приложение/Http/Контроллеры/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
Внутри база данных/сидеры/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
Последний шаг, оставшийся в потоке аутентификации, — это использование созданного промежуточного программного обеспечения для защиты маршрута. Перейдите к маршруты /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 для хостинга баз данных упрощает настройку и управление базами данных для всех ваших веб-проектов.