Laravel API: Twórz i testuj API w Laravel

Opublikowany: 2023-05-10

Laravel Eloquent to łatwy sposób na interakcję z bazą danych. Jest to mapowanie obiektowo-relacyjne (ORM), które upraszcza złożoność baz danych, udostępniając model do interakcji z tabelami.

W związku z tym Laravel Eloquent ma doskonałe narzędzia do tworzenia i testowania interfejsów API, które wspierają Twój rozwój. W tym praktycznym artykule zobaczysz, jak łatwo jest tworzyć i testować interfejsy API przy użyciu Laravel.

Ta demonstracja rozpocznie się od utworzenia modelu, którego można użyć do zbudowania interfejsu API i tabeli bazy danych. Następnie zobaczysz, jak dodać kontroler jako warstwę logiki biznesowej i trasę do ukończenia interfejsu API. Następnie dowiesz się, jak przeprowadzać testowanie interfejsów API za pomocą Postmana, zanim w końcu skupisz się na uwierzytelnianiu i obsłudze błędów.

Wymagania wstępne

Aby rozpocząć, potrzebujesz:

  • Wersja Laravela 8 lub 9
  • Kompozytor
  • Listonosz
  • XAMPP
  • Podstawowa znajomość API i PHP

Podstawy API

Zacznij od utworzenia nowego projektu w Laravel za pomocą <code>composer</code>:

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

Aby uruchomić serwer, wykonaj następujące polecenie, które uruchamia serwer aplikacji na porcie 8000:

 cd laravel-api-create-test php artisan serve

Powinieneś zobaczyć następujący ekran:

Strona docelowa Laravela
Laravel

Następnie utwórz model z opcją -m do migracji, korzystając z poniższego kodu:

 php artisan make:model Product -m

Teraz zaktualizuj plik migracji, aby zawierał wymagane pole. Dodaj pola tytułu i opisu dla modelu produktu oraz te dwa pola tabeli w pliku database/migrations/{date_stamp}_create_products_table.php .

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

Następnym krokiem jest umożliwienie wypełnienia tych pól. Wewnątrz app/Models/ Product.php stwórz pola title i description które można wypełnić.

 protected $fillable = ['title', 'description'];
Wierzysz, że masz pomysł na kolejną wirusową aplikację? Oto jak możesz szybko stworzyć i przetestować swoje API ️ Kliknij, aby tweetować

Jak stworzyć kontroler

Teraz utwórz plik kontrolera dla produktu, wykonując następujące polecenie. Spowoduje to utworzenie pliku app/Http/Controllers/Api/ProductController.php .

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

Teraz dodaj logikę tworzenia i pobierania produktów. Wewnątrz metody index dodaj następujący kod, aby pobrać wszystkie produkty:

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

Następnie musisz dodać klasę StoreProductRequest do przechowywania nowych produktów w bazie danych. Dodaj następującą klasę na początku tego samego pliku.

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

Teraz utworzysz żądanie, co możesz zrobić, wykonując następujące polecenie:

 php artisan make:request StoreProductRequest

Jeśli chcesz dodać walidacje, możesz użyć pliku app/Http/Requests/StoreProductRequest.php . Dla tej demonstracji nie ma żadnych walidacji.

Jak utworzyć trasę

Ostatnim krokiem przed przetestowaniem interfejsu API jest dodanie trasy. Aby to zrobić, dodaj następujący kod do pliku tras/api.php . Dodaj instrukcję use na początku pliku i instrukcję Route w treści:

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

Zanim zaczniesz testować interfejs API, upewnij się, że tabela produktów znajduje się w Twojej bazie danych. Jeśli nie istnieje, utwórz go za pomocą panelu sterowania, takiego jak XAMPP. Alternatywnie możesz wykonać następujące polecenie, aby przeprowadzić migrację bazy danych:

 php artisan migrate

Jak przetestować interfejs API

Przed przetestowaniem interfejsu API upewnij się, że metoda <code>authorize</code> w pliku app/Http/Requests/StoreProductRequest.php jest ustawiona na zwracanie wartości <code>true</code>.

Teraz możesz stworzyć nowy produkt za pomocą Postmana. Zacznij od trafienia żądania POST do tego adresu URL: http://127.0.0.1:8000/api/products/. Ponieważ jest to żądanie POST dotyczące tworzenia nowego produktu, musisz przekazać obiekt JSON z tytułem i opisem.

 { "title":"Apple", "description":"Best Apples of the world" }
Tworzenie nowego produktu w Postmanie
Tworzenie nowego produktu w Postmanie

Po kliknięciu przycisku Wyślij powinieneś zobaczyć:

Listonosz po kliknięciu Wyślij
Po kliknięciu Wyślij

Teraz pobierz utworzone produkty za pomocą żądania GET . Adres URL jest taki sam. Wyniki będą wyglądać następująco:

Produkty pobrane przez żądanie GET.
Produkty pobrane przez żądanie GET.

Jak uwierzytelnić interfejs API za pomocą Sanctum

Uwierzytelnianie ma kluczowe znaczenie podczas zabezpieczania interfejsu API. Laravel ułatwia to, udostępniając funkcjonalność tokena Sanctum, którego możesz użyć jako oprogramowania pośredniczącego. Zabezpiecza API za pomocą tokenów generowanych, gdy użytkownik loguje się przy użyciu poprawnych danych uwierzytelniających. Pamiętaj, że użytkownicy nie mogą uzyskać dostępu do zabezpieczonego interfejsu API bez tokena.

Pierwszym krokiem do dodania uwierzytelnienia jest dodanie pakietu Sanctum przy użyciu poniższego kodu:

 composer require laravel/sanctum

Następnie opublikuj plik konfiguracyjny Sanctum:

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

Następnie dodaj token Sanctum jako oprogramowanie pośredniczące. W pliku app/Http/Kernel.php użyj następującej klasy i zastąp wartość middlewareGroups następującym kodem w interfejsie API chronionych grup oprogramowania pośredniego.

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

Następnym krokiem jest utworzenie UserController i dodanie kodu umożliwiającego uwierzytelnienie tokenu.

 php artisan make:controller UserController

Po utworzeniu UserController przejdź do pliku app/Http/Controllers/UserController.php i zastąp istniejący kod następującym kodem:

 <?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); } }

Zanim będziesz mógł przetestować uwierzytelnianie, utwórz użytkownika korzystającego z seederów. Następujące polecenie tworzy plik UsersTableSeeder .

 php artisan make:seeder UsersTableSeeder

W pliku database/seeders/UsersTableSeeder.php zastąp istniejący kod następującym kodem, aby zainicjować użytkownika:

 <?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') ]); } }

Teraz uruchom siewnik za pomocą tego polecenia:

 php artisan db:seed --class=UsersTableSeeder

Ostatnim krokiem pozostałym w przepływie uwierzytelniania jest użycie utworzonego oprogramowania pośredniczącego do ochrony trasy. Przejdź do pliku tras/api.php i dodaj trasę produktów w oprogramowaniu pośrednim.

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

Po dodaniu trasy do oprogramowania pośredniczącego przy próbie pobrania produktów wystąpi wewnętrzny błąd serwera.

Wewnętrzny błąd serwera po dodaniu trasy
Wewnętrzny błąd serwera po dodaniu trasy

Ale kiedy się zalogujesz, zdobędziesz token i użyjesz go w nagłówku, uwierzytelni cię i zacznie działać. Możesz wysłać żądanie POST na adres http://127.0.0.1:8000/api/login z następującą treścią:

 { "email":"[email protected]", "password":"password" }
Pomyślne uwierzytelnienie i token okaziciela
Pomyślne uwierzytelnienie

Użyj otrzymanego tokena jako token okaziciela i dodaj go jako nagłówek autoryzacji.

Dodanie tokenu okaziciela jako nagłówka autoryzacji
Dodanie tokenu okaziciela jako nagłówka autoryzacji

Jak obsługiwać błędy API

Za każdym razem, gdy wysyłasz żądanie do serwera, odpowiada. Wraz z odpowiedzią wysyła również kod stanu zgodnie z charakterem odpowiedzi. Na przykład kod stanu 200 wskazuje, że żądanie powiodło się, a kod 404 sugeruje, że serwer nie może znaleźć żądanego zasobu.

Jednak kod statusu nie wystarczy. Wymagany jest czytelny dla człowieka komunikat o błędzie. Laravel oferuje wiele sposobów obsługi błędów. Możesz użyć bloku try-catch, metody rezerwowej lub wysłać niestandardową odpowiedź. Pokazuje to poniższy kod dodany do UserController .

 if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); }
Skoncentruj się na zabawnych częściach programowania API, nie martwiąc się o złożoność bazy danych. Oto jak kliknąć, aby tweetować

Streszczenie

Eloquent Model Laravela ułatwia tworzenie, weryfikowanie i testowanie interfejsów API. Jego mapowanie obiektowo-relacyjne zapewnia proste podejście do interakcji z bazą danych.

Ponadto, działając jako oprogramowanie pośrednie, token Laravel Sanctum może pomóc w szybkim zabezpieczeniu interfejsów API.

A jeśli potrzebujesz dalszej optymalizacji, rozwiązanie hostingu bazy danych Kinsta upraszcza konfigurowanie baz danych i zarządzanie nimi dla wszystkich projektów internetowych.