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'];

Верите, что у вас есть идея следующего вирусного приложения? Вот как вы можете быстро создать и протестировать свой API ⬇️Нажмите, чтобы твитнуть

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

Теперь создайте файл контроллера для продукта, выполнив следующую команду. Это создаст приложение/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"
}
Создание нового продукта в 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 в качестве промежуточного ПО. Внутри приложение/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"
}
Успешная аутентификация и токен 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 для хостинга баз данных упрощает настройку и управление базами данных для всех ваших веб-проектов.