Laravel API: สร้างและทดสอบ API ใน Laravel

เผยแพร่แล้ว: 2023-05-10

Laravel Eloquent เป็นวิธีที่ง่ายในการโต้ตอบกับฐานข้อมูลของคุณ มันเป็นตัวทำแผนที่เชิงวัตถุ (ORM) ที่ทำให้ความซับซ้อนของฐานข้อมูลง่ายขึ้นโดยการจัดเตรียมแบบจำลองเพื่อโต้ตอบกับตาราง

ด้วยเหตุนี้ Laravel Eloquent จึงมีเครื่องมือที่ยอดเยี่ยมสำหรับการสร้างและทดสอบ API เพื่อสนับสนุนการพัฒนาของคุณ ในบทความภาคปฏิบัตินี้ คุณจะเห็นว่าการสร้างและทดสอบ API โดยใช้ Laravel นั้นง่ายเพียงใด

ในการสาธิตนี้ คุณจะเริ่มต้นด้วยการสร้างโมเดลที่คุณสามารถใช้สร้าง API และตารางฐานข้อมูลได้ จากนั้น คุณจะเห็นวิธีเพิ่มคอนโทรลเลอร์เป็นเลเยอร์ตรรกะทางธุรกิจและเส้นทางเพื่อทำให้ API สมบูรณ์ จากนั้น คุณจะได้เรียนรู้วิธีดำเนินการทดสอบ API โดยใช้บุรุษไปรษณีย์ ก่อนที่จะมุ่งเน้นไปที่การรับรองความถูกต้องและการจัดการข้อผิดพลาดในท้ายที่สุด

ข้อกำหนดเบื้องต้น

ในการเริ่มต้น คุณต้องมีสิ่งต่อไปนี้:

  • Laravel เวอร์ชัน 8 หรือ 9
  • นักแต่งเพลง
  • บุรุษไปรษณีย์
  • XAMPP
  • ความรู้พื้นฐานเกี่ยวกับ API และ PHP

พื้นฐาน API

เริ่มต้นด้วยการสร้างโครงการ Laravel ใหม่โดยใช้ <code>composer</code>:

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

ในการสตาร์ทเซิร์ฟเวอร์ ให้รันคำสั่งต่อไปนี้ ซึ่งรันแอ็พพลิเคชันเซิร์ฟเวอร์บนพอร์ต 8000:

 cd laravel-api-create-test php artisan serve

คุณควรเห็นหน้าจอต่อไปนี้:

หน้า Landing Page ของ Laravel
ลาราเวล

จากนั้น สร้างโมเดลที่มีแฟล็ก -m สำหรับการโยกย้ายโดยใช้รหัสด้านล่าง:

 php artisan make:model Product -m

ตอนนี้อัปเกรดไฟล์การย้ายข้อมูลเพื่อรวมฟิลด์ที่จำเป็น เพิ่มฟิลด์ชื่อและคำอธิบายสำหรับรุ่นผลิตภัณฑ์และฟิลด์ตารางทั้งสองนี้ภายใน ไฟล์ฐานข้อมูล/migrations/{date_stamp}_create_products_table.php

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

ขั้นตอนต่อไปคือการทำให้ฟิลด์เหล่านี้สามารถกรอกได้ ภายใน app/Models/ Product.php ให้กรอกช่องกรอก title และ description

 protected $fillable = ['title', 'description'];
เชื่อไหมว่าคุณมีความคิดเกี่ยวกับแอปไวรัสตัวต่อไป นี่คือวิธีที่คุณสามารถสร้างและทดสอบ API ของคุณได้อย่างรวดเร็ว ️ คลิกเพื่อทวีต

วิธีสร้างคอนโทรลเลอร์

ตอนนี้ สร้างไฟล์คอนโทรลเลอร์สำหรับผลิตภัณฑ์โดยดำเนินการคำสั่งต่อไปนี้ สิ่งนี้จะสร้างไฟล์ app/Http/Controllers/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

หากคุณต้องการเพิ่มการตรวจสอบ คุณสามารถใช้ไฟล์ app/Http/Requests/StoreProductRequest.php สำหรับการสาธิตนี้ไม่มีการตรวจสอบ

วิธีสร้างเส้นทาง

ขั้นตอนสุดท้ายก่อนการทดสอบ API คือการเพิ่มเส้นทาง โดยเพิ่มโค้ดต่อไปนี้ในไฟล์ route/api.php เพิ่มคำสั่ง use ที่จุดเริ่มต้นของไฟล์และคำสั่ง Route ในเนื้อหา:

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

ก่อนที่คุณจะเริ่มทดสอบ API ตรวจสอบให้แน่ใจว่าตาราง ผลิตภัณฑ์ อยู่ในฐานข้อมูลของคุณ หากไม่มี ให้สร้างโดยใช้แผงควบคุมเช่น XAMPP หรือคุณสามารถดำเนินการคำสั่งต่อไปนี้เพื่อย้ายฐานข้อมูล:

 php artisan migrate

วิธีทดสอบ API

ก่อนทดสอบ API ตรวจสอบให้แน่ใจว่าเมธอด <code>authorize</code> ภายใน app/Http/Requests/StoreProductRequest.php ถูกตั้งค่าให้ส่งคืน <code>true</code>

ตอนนี้ คุณสามารถสร้างผลิตภัณฑ์ใหม่โดยใช้บุรุษไปรษณีย์ เริ่มต้นด้วยการส่งคำขอ POST ไปยัง URL นี้: http://127.0.0.1:8000/api/products/ เนื่องจากเป็นคำขอ POST สำหรับการสร้างผลิตภัณฑ์ใหม่ คุณต้องส่งออบเจ็กต์ JSON ที่มีชื่อเรื่องและคำอธิบาย

 { "title":"Apple", "description":"Best Apples of the world" }
การสร้างผลิตภัณฑ์ใหม่ในบุรุษไปรษณีย์
การสร้างผลิตภัณฑ์ใหม่ในบุรุษไปรษณีย์

หลังจากคลิกปุ่ม ส่ง คุณจะเห็นสิ่งต่อไปนี้:

บุรุษไปรษณีย์หลังจากคลิกส่ง
หลังจากคลิกที่ส่ง

ตอนนี้ ดึงข้อมูลผลิตภัณฑ์ที่สร้างขึ้นโดยใช้คำขอ 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 เป็นมิดเดิลแวร์ ภายในไฟล์ app/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 แล้ว ให้ไปที่ไฟล์ app/Http/Controllers/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); } }

ก่อนที่คุณจะสามารถทดสอบการรับรองความถูกต้องได้ ให้สร้างผู้ใช้ที่ใช้ seeders คำสั่งต่อไปนี้สร้างไฟล์ UsersTableSeeder

 php artisan make:seeder UsersTableSeeder

ภายในไฟล์ ฐานข้อมูล/seeders/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') ]); } }

ตอนนี้รัน Seeder โดยใช้คำสั่งนี้:

 php artisan db:seed --class=UsersTableSeeder

ขั้นตอนสุดท้ายที่เหลืออยู่ในโฟลว์การรับรองความถูกต้องคือการใช้มิดเดิลแวร์ที่สร้างขึ้นเพื่อป้องกันเส้นทาง นำทางไปยังไฟล์ route/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
การรับรองความถูกต้องสำเร็จ

ใช้โทเค็นที่ได้รับเป็นโทเค็น Bearer และเพิ่มเป็นส่วนหัวการให้สิทธิ์

การเพิ่มโทเค็น Bearer เป็นส่วนหัวการให้สิทธิ์
การเพิ่มโทเค็น 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 dev โดยไม่ต้องกังวลเกี่ยวกับความซับซ้อนของฐานข้อมูล นี่คือวิธีการ คลิกเพื่อทวีต

สรุป

Eloquent Model ของ Laravel ช่วยให้สร้าง ตรวจสอบ และทดสอบ API ได้อย่างง่ายดาย การทำแผนที่เชิงวัตถุให้แนวทางที่ตรงไปตรงมาในการโต้ตอบกับฐานข้อมูล

นอกจากนี้ การทำหน้าที่เป็นมิดเดิลแวร์ โทเค็น Sanctum ของ Laravel ยังช่วยให้คุณรักษาความปลอดภัยของ API ได้อย่างรวดเร็ว

และหากคุณต้องการเพิ่มประสิทธิภาพเพิ่มเติม โซลูชันโฮสติ้งฐานข้อมูลของ Kinsta จะช่วยให้การตั้งค่าและจัดการฐานข้อมูลสำหรับโครงการเว็บทั้งหมดของคุณง่ายขึ้น