Laravel API: Laravel에서 API 생성 및 테스트

게시 됨: 2023-05-10

Laravel Eloquent는 데이터베이스와 상호 작용하는 쉬운 방법입니다. 테이블과 상호 작용하는 모델을 제공하여 데이터베이스의 복잡성을 단순화하는 개체 관계형 매퍼(ORM)입니다.

이와 같이 Laravel Eloquent는 개발을 지원하는 API를 생성하고 테스트하기 위한 뛰어난 도구를 제공합니다. 이 실습 기사에서는 Laravel을 사용하여 API를 생성하고 테스트하는 것이 얼마나 쉬운지 확인할 수 있습니다.

이 데모에서는 API 및 데이터베이스 테이블을 빌드하는 데 사용할 수 있는 모델을 생성하여 시작합니다. 그런 다음 컨트롤러를 비즈니스 논리 계층으로 추가하고 API를 완료하는 경로를 확인합니다. 그런 다음 최종적으로 인증 및 오류 처리에 집중하기 전에 Postman을 사용하여 API 테스트를 수행하는 방법을 배웁니다.

전제 조건

시작하려면 다음이 필요합니다.

  • 라라벨 버전 8 또는 9
  • 작곡가
  • 우편 집배원
  • XAMPP
  • API 및 PHP에 대한 기본 지식

API 기본 사항

<code>composer</code>를 사용하여 새 Laravel 프로젝트를 생성하여 시작합니다.

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

서버를 시작하려면 포트 8000에서 응용 프로그램 서버를 실행하는 다음 명령을 실행합니다.

 cd laravel-api-create-test php artisan serve

다음 화면이 표시됩니다.

Laravel 랜딩 페이지
라라벨

그런 다음 아래 코드를 사용하여 마이그레이션을 위한 -m 플래그가 있는 모델을 생성합니다.

 php artisan make:model Product -m

이제 필수 필드를 포함하도록 마이그레이션 파일을 업그레이드하십시오. 제품 모델에 대한 제목 및 설명 필드와 database/migrations/{date_stamp}_create_products_table.php 파일 내에 이 두 테이블 필드를 추가합니다.

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

다음 단계는 이러한 필드를 채울 수 있도록 만드는 것입니다. app/Models/ Product.php 내부에서 titledescription 채울 수 있는 필드로 만듭니다.

 protected $fillable = ['title', 'description'];
다음 바이러스 성 앱 아이디어가 있다고 믿으십니까? API를 빠르게 생성하고 테스트하는 방법은 다음과 같습니다. ️ Click to Tweet

컨트롤러를 만드는 방법

이제 다음 명령을 실행하여 제품에 대한 컨트롤러 파일을 생성합니다. 이렇게 하면 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를 테스트하기 전에 app/Http/Requests/StoreProductRequest.php 내부의 <code>authorize</code> 메서드가 <code>true</code>를 반환하도록 설정되어 있는지 확인하세요.

이제 Postman을 사용하여 새 제품을 만들 수 있습니다. http://127.0.0.1:8000/api/products/ URL에 POST 요청을 쳐서 시작합니다. 새 제품을 생성하기 위한 POST 요청이므로 제목 및 설명과 함께 JSON 개체를 전달해야 합니다.

 { "title":"Apple", "description":"Best Apples of the world" }
Postman에서 새 제품 만들기
Postman에서 새 제품 만들기

보내기 버튼을 클릭하면 다음이 표시됩니다.

보내기를 클릭한 후 우편 배달부
보내기를 클릭한 후

이제 GET 요청을 사용하여 생성된 제품을 가져옵니다. URL은 동일합니다. 결과는 다음과 같습니다.

GET 요청으로 가져온 제품입니다.
GET 요청으로 가져온 제품입니다.

Sanctum을 사용하여 API를 인증하는 방법

인증은 API를 보호할 때 중요합니다. Laravel은 미들웨어로 사용할 수 있는 Sanctum 토큰의 기능을 제공하여 이를 쉽게 만듭니다. 사용자가 올바른 자격 증명을 사용하여 로그인할 때 생성된 토큰을 사용하여 API를 보호합니다. 사용자는 토큰 없이는 보안 API에 액세스할 수 없습니다.

인증을 추가하는 첫 번째 단계는 아래 코드를 사용하여 Sanctum 패키지를 추가하는 것입니다.

 composer require laravel/sanctum

그런 다음 Sanctum 구성 파일을 게시합니다.

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

그런 다음 Sanctum의 토큰을 미들웨어로 추가합니다. app/Http/Kernel.php 파일 내에서 다음 클래스를 사용하고 보호된 미들웨어 그룹의 API에서 middlewareGroups 다음 코드로 바꿉니다.

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

인증을 테스트하기 전에 시더를 사용하는 사용자를 생성하십시오. 다음 명령은 UsersTableSeeder 파일을 만듭니다.

 php artisan make:seeder UsersTableSeeder

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

이제 다음 명령을 사용하여 시더를 실행합니다.

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

미들웨어에 경로를 추가한 후 제품을 가져오려고 하면 내부 서버 오류가 발생합니다.

경로 추가 후 내부 서버 오류
경로 추가 후 내부 서버 오류

그러나 일단 로그인하고 토큰을 받아 헤더에 사용하면 사용자를 인증하고 작업을 시작합니다. 다음 본문을 사용하여 http://127.0.0.1:8000/api/login으로 POST 요청을 보낼 수 있습니다.

 { "email":"[email protected]", "password":"password" }
성공적인 인증 및 Bearer 토큰
성공적인 인증

Bearer 토큰으로 받은 토큰을 Authorization 헤더로 추가합니다.

Bearer 토큰을 Authorization 헤더로 추가
Bearer 토큰을 Authorization 헤더로 추가

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 개발의 재미있는 부분에 집중하세요. 클릭하여 트윗하는 방법은 다음과 같습니다.

요약

라라벨의 Eloquent 모델은 API를 쉽게 생성, 검증 및 테스트할 수 있도록 합니다. 개체 관계형 매핑은 데이터베이스와 상호 작용하는 간단한 접근 방식을 제공합니다.

또한 미들웨어 역할을 하는 Laravel의 Sanctum 토큰은 API를 빠르게 보호하는 데 도움이 될 수 있습니다.

추가 최적화가 필요한 경우 Kinsta의 데이터베이스 호스팅 솔루션은 모든 웹 프로젝트에 대한 데이터베이스 설정 및 관리를 단순화합니다.