Laravel API: Membuat dan Menguji API di Laravel

Diterbitkan: 2023-05-10

Laravel 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:

Halaman arahan Laravel
Laravel

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'];
Yakin Anda punya ide aplikasi viral berikutnya? Inilah cara Anda dapat dengan cepat membuat dan menguji API Anda ️ Klik untuk Tweet

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" }
Membuat produk baru di Postman
Membuat produk baru di Postman

Setelah mengklik tombol Kirim , Anda akan melihat yang berikut:

Tukang pos setelah mengklik Kirim
Setelah mengklik Kirim

Sekarang, ambil produk yang dibuat menggunakan permintaan GET . URLnya sama. Hasilnya akan terlihat seperti berikut:

Produk diambil oleh permintaan GET.
Produk diambil oleh permintaan GET.

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.

Kesalahan server internal setelah menambahkan rute
Kesalahan server internal setelah menambahkan rute

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" }
Otentikasi berhasil dan token Pembawa
Otentikasi berhasil

Gunakan token yang diterima sebagai token Pembawa dan tambahkan sebagai header Otorisasi.

Menambahkan token Pembawa sebagai tajuk Otorisasi
Menambahkan token Pembawa sebagai tajuk 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); }
Fokus pada bagian yang menyenangkan dari API dev tanpa mengkhawatirkan kerumitan databasenya. Begini caranya Klik untuk Tweet

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.