Laravel API: Membuat dan Menguji API di Laravel
Diterbitkan: 2023-05-10Laravel Eloquent adalah cara mudah untuk berinteraksi dengan database Anda. Ini adalah object-relational mapper (ORM) yang menyederhanakan kompleksitas database dengan menyediakan model untuk berinteraksi dengan tabel.
Dengan demikian, Laravel Eloquent memiliki alat yang sangat baik untuk membuat dan menguji API untuk mendukung pengembangan Anda. Dalam artikel praktis ini, Anda akan melihat betapa mudahnya membuat dan menguji API menggunakan Laravel.
Dalam demonstrasi ini, Anda akan memulai dengan membuat model yang dapat Anda gunakan untuk membuat API dan tabel database. Kemudian, Anda akan melihat cara menambahkan pengontrol sebagai lapisan logika bisnis dan rute untuk menyelesaikan API. Anda kemudian akan mempelajari cara melakukan pengujian API menggunakan Postman sebelum akhirnya berfokus pada autentikasi dan penanganan kesalahan.
Prasyarat
Untuk memulai, inilah yang Anda perlukan:
- Laravel versi 8 atau 9
- Komposer
- Tukang pos
- XAMPP
- Pengetahuan dasar tentang API dan PHP
Dasar API
Mulailah dengan membuat proyek Laravel baru menggunakan <code>composer</code>:
composer create-project laravel/laravel laravel-api-create-test
Untuk memulai server, jalankan perintah berikut, yang menjalankan server aplikasi pada port 8000:
cd laravel-api-create-test php artisan serve
Anda akan melihat layar berikut:
Kemudian, buat model dengan flag -m
untuk migrasi menggunakan kode di bawah ini:
php artisan make:model Product -m
Sekarang perbarui file migrasi untuk memasukkan bidang yang diperlukan. Tambahkan kolom judul dan deskripsi untuk model produk dan kedua kolom tabel ini di dalam file database/migrations/{date_stamp}_create_products_table.php .
$table->string('title'); $table->longText('description');
Langkah selanjutnya adalah membuat bidang ini dapat diisi. Di dalam app/Models/ Product.php , buat bidang title
dan description
yang dapat diisi.
protected $fillable = ['title', 'description'];
Cara Membuat Pengontrol
Sekarang, buat file pengontrol untuk produk dengan menjalankan perintah berikut. Ini akan membuat file app/Http/Controllers/Api/ProductController.php .
php artisan make:controller Api\\ProductController --model=Product
Sekarang, tambahkan logika untuk membuat dan mengambil produk. Di dalam metode index
, tambahkan kode berikut untuk mengambil semua produk:
$products = Product::all(); return response()->json([ 'status' => true, 'products' => $products ]);
Setelah itu, Anda harus menambahkan kelas StoreProductRequest
untuk menyimpan produk baru di database. Tambahkan kelas berikut di bagian atas file yang sama.
public function store(StoreProductRequest $request) { $product = Product::create($request->all()); return response()->json([ 'status' => true, 'message' => "Product Created successfully!", 'product' => $product ], 200); }
Sekarang, Anda akan membuat permintaan, yang dapat Anda lakukan dengan menjalankan perintah berikut:
php artisan make:request StoreProductRequest
Jika Anda ingin menambahkan validasi, Anda dapat menggunakan file app/Http/Requests/StoreProductRequest.php . Untuk demonstrasi ini, tidak ada validasi.
Cara Membuat Rute
Langkah terakhir sebelum menguji API adalah menambahkan rute. Untuk melakukannya, tambahkan kode berikut di dalam file routes/api.php . Tambahkan pernyataan use
di awal file dan pernyataan Route
di badan:
use App\Http\Controllers\Api\ProductController; Route::apiResource('products', ProductController::class);
Sebelum Anda mulai menguji API, pastikan tabel produk ada di database Anda. Jika tidak ada, buatlah menggunakan control panel seperti XAMPP. Atau, Anda dapat menjalankan perintah berikut untuk memigrasi database:
php artisan migrate
Cara Menguji API
Sebelum menguji API, pastikan metode <code>otorisasi</code> di dalam app/Http/Requests/StoreProductRequest.php disetel untuk mengembalikan <code>true</code>.
Sekarang, Anda dapat membuat produk baru menggunakan Postman. Mulailah dengan menekan permintaan POST
ke URL ini: http://127.0.0.1:8000/api/products/. Karena ini adalah permintaan POST
untuk membuat produk baru, Anda harus mengirimkan objek JSON dengan judul dan deskripsi.
{ "title":"Apple", "description":"Best Apples of the world" }
Setelah mengklik tombol Kirim , Anda akan melihat yang berikut:
Sekarang, ambil produk yang dibuat menggunakan permintaan GET
. URLnya sama. Hasilnya akan terlihat seperti berikut:
Cara Mengotentikasi API Menggunakan Sanctum
Otentikasi sangat penting saat mengamankan API. Laravel memudahkannya dengan menyediakan fungsionalitas token Sanctum, yang dapat Anda gunakan sebagai middleware. Itu mengamankan API menggunakan token yang dihasilkan saat pengguna masuk menggunakan kredensial yang benar. Ingatlah bahwa pengguna tidak dapat mengakses API aman tanpa token.
Langkah pertama untuk menambahkan autentikasi adalah menambahkan paket Sanctum menggunakan kode di bawah ini:
composer require laravel/sanctum
Kemudian, publikasikan file konfigurasi Sanctum:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Setelah itu, tambahkan token Sanctum sebagai middleware. Di dalam file app/Http/Kernel.php , gunakan kelas berikut dan ganti middlewareGroups
dengan kode berikut di API grup middleware yang dilindungi.
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, ], ];
Langkah selanjutnya adalah membuat UserController
dan menambahkan kode agar token dapat diautentikasi.
php artisan make:controller UserController
Setelah membuat UserController
, buka file app/Http/Controllers/UserController.php dan ganti kode yang ada dengan kode berikut:
<?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); } }
Sebelum Anda dapat menguji autentikasi, buat pengguna yang menggunakan seeder. Perintah berikut membuat file UsersTableSeeder .
php artisan make:seeder UsersTableSeeder
Di dalam file database/seeders/UsersTableSeeder.php , ganti kode yang ada dengan kode berikut untuk memasukkan pengguna:
<?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') ]); } }
Sekarang jalankan seeder menggunakan perintah ini:
php artisan db:seed --class=UsersTableSeeder
Langkah terakhir yang tersisa di alur autentikasi adalah menggunakan middleware yang dibuat untuk melindungi rute. Arahkan ke file route/api.php dan tambahkan rute produk di dalam middleware.
use App\Http\Controllers\UserController; Route::group(['middleware' => 'auth:sanctum'], function () { Route::apiResource('products', ProductController::class); }); Route::post("login",[UserController::class,'index']);
Setelah menambahkan rute ke middleware, Anda akan mendapatkan kesalahan server internal jika mencoba mengambil produk.
Tapi begitu Anda masuk, dapatkan token, dan gunakan di header, itu akan mengautentikasi Anda dan mulai bekerja. Anda dapat mengirim permintaan POST ke http://127.0.0.1:8000/api/login dengan isi berikut:
{ "email":"[email protected]", "password":"password" }
Gunakan token yang diterima sebagai token Pembawa dan tambahkan sebagai header Otorisasi.
Cara Menangani Kesalahan API
Setiap kali Anda mengirim permintaan ke server, itu merespons. Dengan tanggapan tersebut, ia juga mengirimkan kode status sesuai dengan sifat tanggapannya. Misalnya, kode status 200 menunjukkan bahwa permintaan telah berhasil, dan 404 menunjukkan bahwa server tidak dapat menemukan sumber daya yang diminta.
Namun, kode status saja tidak cukup. Diperlukan pesan kesalahan yang dapat dibaca manusia. Laravel hadir dengan banyak cara untuk menangani error. Anda dapat menggunakan blok try-catch, metode fallback, atau mengirim respons khusus. Kode berikut yang Anda tambahkan ke UserController
menunjukkan hal ini.
if (!$user || !Hash::check($request->password, $user->password)) { return response([ 'message' => ['These credentials do not match our records.'] ], 404); }
Ringkasan
Eloquent Model Laravel membuatnya mudah untuk membuat, memvalidasi, dan menguji API. Pemetaan objek-relasionalnya menyediakan pendekatan langsung untuk berinteraksi dengan database.
Selain itu, bertindak sebagai middleware, token Sanctum Laravel dapat membantu Anda mengamankan API dengan cepat.
Dan jika Anda memerlukan pengoptimalan lebih lanjut, solusi Hosting Basis Data Kinsta menyederhanakan penyiapan dan pengelolaan basis data untuk semua proyek web Anda.