Laravel API: creați și testați un API în Laravel

Publicat: 2023-05-10

Laravel Eloquent este o modalitate ușoară de a interacționa cu baza ta de date. Este un obiect-relațional mapper (ORM) care simplifică complexitatea bazelor de date, oferind un model pentru a interacționa cu tabelele.

Ca atare, Laravel Eloquent are instrumente excelente pentru crearea și testarea API-urilor pentru a vă sprijini dezvoltarea. În acest articol practic, veți vedea cât de ușor este să creați și să testați API-uri folosind Laravel.

În această demonstrație, veți începe prin a crea un model pe care îl puteți utiliza pentru a construi API-ul și tabelul bazei de date. Apoi, veți vedea cum să adăugați un controler ca strat de logică de afaceri și o rută pentru a finaliza API-ul. Veți învăța apoi cum să efectuați testarea API-urilor folosind Postman înainte de a vă concentra în cele din urmă pe autentificare și tratarea erorilor.

Cerințe preliminare

Pentru a începe, iată de ce aveți nevoie:

  • Laravel versiunea 8 sau 9
  • Compozitor
  • Poştaş
  • XAMPP
  • Cunoștințe de bază despre API și PHP

Bazele API

Începeți prin a crea un nou proiect Laravel folosind <code>compozitor</code>:

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

Pentru a porni serverul, executați următoarea comandă, care rulează serverul de aplicații pe portul 8000:

 cd laravel-api-create-test php artisan serve

Ar trebui să vedeți următorul ecran:

Pagina de destinație Laravel
Laravel

Apoi, creați un model cu un steag -m pentru migrare folosind codul de mai jos:

 php artisan make:model Product -m

Acum actualizați fișierul de migrare pentru a include câmpul necesar. Adăugați câmpuri de titlu și descriere pentru modelul de produs și aceste două câmpuri de tabel în fișierul database/migrations/{date_stamp}_create_products_table.php .

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

Următorul pas este să completați aceste câmpuri. În interiorul aplicației/Modelelor/ Product.php , faceți câmpuri de completare title și description .

 protected $fillable = ['title', 'description'];
Crezi că ai următoarea idee de aplicație virală? Iată cum vă puteți crea și testa rapid API-ul ️ Faceți clic pentru a Tweet

Cum se creează un controler

Acum, creați un fișier controler pentru produs executând următoarea comandă. Acest lucru va crea fișierul app/Http/Controllers/Api/ProductController.php .

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

Acum, adăugați logica pentru crearea și preluarea produselor. În metoda index , adăugați următorul cod pentru a prelua toate produsele:

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

După aceea, trebuie să adăugați o clasă StoreProductRequest pentru stocarea noilor produse în baza de date. Adăugați următoarea clasă în partea de sus a aceluiași fișier.

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

Acum, veți crea cererea, pe care o puteți face executând următoarea comandă:

 php artisan make:request StoreProductRequest

Dacă doriți să adăugați validări, puteți utiliza fișierul app/Http/Requests/StoreProductRequest.php . Pentru această demonstrație, nu există validări.

Cum se creează o rută

Ultimul pas înainte de a testa API-ul este adăugarea unei rute. Pentru a face acest lucru, adăugați următorul cod în fișierul routes/api.php . Adăugați instrucțiunea use la începutul fișierului și instrucțiunea Route în corpul:

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

Înainte de a începe testarea API-ului, asigurați-vă că tabelul cu produse se află în baza de date. Dacă nu există, creați unul folosind un panou de control precum XAMPP. Alternativ, puteți executa următoarea comandă pentru a migra baza de date:

 php artisan migrate

Cum se testează un API

Înainte de a testa API-ul, asigurați-vă că metoda <code>authorize</code> din cadrul aplicației/Http/Requests/StoreProductRequest.php este setată să returneze <code>true</code>.

Acum, puteți crea un produs nou folosind Postman. Începeți prin a apăsa o solicitare POST la această adresă URL: http://127.0.0.1:8000/api/products/. Deoarece este o solicitare POST pentru crearea unui produs nou, trebuie să transmiteți un obiect JSON cu un titlu și o descriere.

 { "title":"Apple", "description":"Best Apples of the world" }
Crearea unui produs nou în Postman
Crearea unui produs nou în Postman

După ce faceți clic pe butonul Trimite , ar trebui să vedeți următoarele:

Poștaș după ce a făcut clic pe Trimite
După ce faceți clic pe Trimitere

Acum, preluați produsele create folosind cererea GET . URL-ul este același. Rezultatele vor arăta astfel:

Produsele preluate prin cererea GET.
Produsele preluate prin cererea GET.

Cum să autentificați un API folosind Sanctum

Autentificarea este crucială atunci când securizați un API. Laravel ușurează, oferind funcționalitatea jetonului Sanctum, pe care îl puteți folosi ca middleware. Securizează API-ul folosind jetoane generate atunci când utilizatorul se conectează folosind acreditările corecte. Rețineți că utilizatorii nu pot accesa API-ul securizat fără un token.

Primul pas pentru a adăuga autentificare este să adăugați un pachet Sanctum folosind codul de mai jos:

 composer require laravel/sanctum

Apoi, publicați fișierul de configurare Sanctum:

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

După aceea, adăugați jetonul Sanctum ca middleware. În interiorul fișierului app/Http/Kernel.php , utilizați următoarea clasă și înlocuiți middlewareGroups cu următorul cod în API-ul grupurilor de middleware protejate.

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

Următorul pas este să creați un UserController și să adăugați codul pentru a autentifica jetonul.

 php artisan make:controller UserController

După crearea UserController , navigați la fișierul app/Http/Controllers/UserController.php și înlocuiți codul existent cu următorul cod:

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

Înainte de a putea testa autentificarea, creați un utilizator care folosește seedere. Următoarea comandă creează un fișier UsersTableSeeder .

 php artisan make:seeder UsersTableSeeder

În interiorul fișierului baza de date/seeders/UsersTableSeeder.php , înlocuiți codul existent cu următorul cod pentru a genera utilizatorul:

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

Acum rulați semănătorul folosind această comandă:

 php artisan db:seed --class=UsersTableSeeder

Ultimul pas rămas în fluxul de autentificare este utilizarea middleware-ului creat pentru a proteja ruta. Navigați la fișierul routes/api.php și adăugați ruta produselor în interiorul middleware-ului.

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

După ce adăugați o rută la middleware, veți primi o eroare internă de server dacă încercați să preluați produsele.

O eroare internă de server după adăugarea unei rute
O eroare internă de server după adăugarea unei rute

Dar odată ce vă conectați, obțineți un simbol și îl utilizați în antet, acesta vă va autentifica și începe să funcționeze. Puteți trimite o solicitare POST la http://127.0.0.1:8000/api/login cu următorul corp:

 { "email":"[email protected]", "password":"password" }
Autentificare reușită și simbolul Purtătorului
Autentificare reușită

Folosiți jetonul primit ca simbol Purtător și adăugați-l ca antet Autorizare.

Adăugarea simbolului Purtător ca antet Autorizare
Adăugarea simbolului Purtător ca antet Autorizare

Cum să gestionați erorile API

Ori de câte ori trimiteți o solicitare către server, acesta răspunde. Odată cu răspunsul, trimite și un cod de stare în funcție de natura răspunsului. De exemplu, un cod de stare 200 indică faptul că cererea a reușit, iar un cod 404 sugerează că serverul nu poate găsi resursa solicitată.

Cu toate acestea, un cod de stare nu este suficient. Este necesar un mesaj de eroare care poate fi citit de om. Laravel vine cu multe moduri de a gestiona erorile. Puteți utiliza un bloc try-catch, metoda de rezervă sau puteți trimite un răspuns personalizat. Următorul cod pe care l-ați adăugat la UserController demonstrează acest lucru.

 if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); }
Concentrați-vă pe părțile distractive ale dezvoltării API fără a vă face griji cu privire la complexitatea bazei de date. Iată cum faceți clic pentru a trimite pe Tweet

rezumat

Modelul Eloquent de la Laravel facilitează crearea, validarea și testarea API-urilor. Maparea sa obiect-relațională oferă o abordare simplă a interacțiunii cu baza de date.

În plus, acționând ca middleware, jetonul Sanctum de la Laravel vă poate ajuta să vă securizați rapid API-urile.

Și dacă aveți nevoie de o optimizare suplimentară, soluția de găzduire a bazelor de date de la Kinsta simplifică configurarea și gestionarea bazelor de date pentru toate proiectele dvs. web.