Laravel 9로 Secured Rest API 프로젝트를 빠르게 시작하는 방법은 무엇입니까?

라라벨 9에서 REST API 만들기



오늘은 라라벨 9에서 REST API를 만드는 방법에 대해 설명하겠습니다. 이번 영상에서는 REST API를 이용한 CRUD Operation에 대해 설명하겠습니다.

라라벨 9 설치.



그런 다음 Editor에서 코드를 엽니다.

1 단계



마이그레이션으로 모델Post을 생성합니다.

php artisan make:model Post -m


다음 업데이트 마이그레이션 파일은 database/migrations 폴더에 있습니다.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->longText('description');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
};



다음으로 Model fillable 속성을 업데이트합니다app/models/Post.php.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'description'];
}



2 단계



이제 명령을 실행하여 컨트롤러 생성

php artisan make:controller Api\\PostController --model=Post


이 명령은 app/Http/Controllers/Api/PostController.php에 파일을 생성합니다.

파일을 열고 아래 코드를 업데이트합니다.

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\StorePostRequest;
use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $posts = Post::all();

        return response()->json([
            'status' => true,
            'posts' => $posts
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StorePostRequest $request)
    {
        $post = Post::create($request->all());

        return response()->json([
            'status' => true,
            'message' => "Post Created successfully!",
            'post' => $post
        ], 200);
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function show(Post $post)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function edit(Post $post)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function update(StorePostRequest $request, Post $post)
    {
        $post->update($request->all());

        return response()->json([
            'status' => true,
            'message' => "Post Updated successfully!",
            'post' => $post
        ], 200);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function destroy(Post $post)
    {
        $post->delete();

        return response()->json([
            'status' => true,
            'message' => "Post Deleted successfully!",
        ], 200);
    }
}


3단계



이제 아래 명령을 실행하여 데이터 유효성 검사 요청을 생성해 보겠습니다.

php artisan make:request StorePostRequest


이제 app/Http/Requests/StorePostRequest.php에서 파일을 열고 아래 코드를 업데이트합니다.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            "title" => "required|max:70",
            "description" => "required"
        ];
    }
}


4단계



이제 routes/api.php에서 API 경로를 생성합니다.

<?php

use App\Http\Controllers\Api\PostController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;


Route::apiResource('posts', PostController::class);



이제 애플리케이션을 제공하고 우편 배달부에서 URL을 엽니다.
결과는 다음과 같습니다.








LARAVEL SANCTUM을 사용하여 LARAVEL 9에서 REST API 인증 만들기



Laravel Sanctum은 SPA(단일 페이지 애플리케이션), 모바일 애플리케이션 및 간단한 토큰 기반 API를 위한 초경량 인증 시스템을 제공합니다.

설치 단계



라라벨 9을 사용하지 않는 경우 라라벨 생텀을 설치해야 합니다. 그렇지 않으면 설치 단계를 건너뛸 수 있습니다.

1 단계



작성기를 통해 설치

composer require laravel/sanctum


2 단계



Sanctum 서비스 공급자 게시

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


3단계



데이터베이스 마이그레이션

php artisan migrate


라라벨에서 SANCTUM 사용하기



App\Models\User의 사용자 HasApiTokens 특성



Sanctum을 사용하려면 User Model에서 HasApiTokens Trait Class를 사용해야 합니다.
사용자 모델은 다음과 같아야 합니다.

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}


API 인증 경로



API와 관련된 모든 인증을 처리하기 위해 생성AuthController
php artisan make:controller Api\\AuthController

routes\api.php 파일에서 API 업데이트

Route::post('/auth/register', [AuthController::class, 'createUser']);
Route::post('/auth/login', [AuthController::class, 'loginUser']);


이제 다음으로 업데이트AuthContoller
<?php

namespace App\Http\Controllers\Api;

use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller
{
    /**
     * Create User
     * @param Request $request
     * @return User 
     */
    public function createUser(Request $request)
    {
        try {
            //Validated
            $validateUser = Validator::make($request->all(), 
            [
                'name' => 'required',
                'email' => 'required|email|unique:users,email',
                'password' => 'required'
            ]);

            if($validateUser->fails()){
                return response()->json([
                    'status' => false,
                    'message' => 'validation error',
                    'errors' => $validateUser->errors()
                ], 401);
            }

            $user = User::create([
                'name' => $request->name,
                'email' => $request->email,
                'password' => Hash::make($request->password)
            ]);

            return response()->json([
                'status' => true,
                'message' => 'User Created Successfully',
                'token' => $user->createToken("API TOKEN")->plainTextToken
            ], 200);

        } catch (\Throwable $th) {
            return response()->json([
                'status' => false,
                'message' => $th->getMessage()
            ], 500);
        }
    }

    /**
     * Login The User
     * @param Request $request
     * @return User
     */
    public function loginUser(Request $request)
    {
        try {
            $validateUser = Validator::make($request->all(), 
            [
                'email' => 'required|email',
                'password' => 'required'
            ]);

            if($validateUser->fails()){
                return response()->json([
                    'status' => false,
                    'message' => 'validation error',
                    'errors' => $validateUser->errors()
                ], 401);
            }

            if(!Auth::attempt($request->only(['email', 'password']))){
                return response()->json([
                    'status' => false,
                    'message' => 'Email & Password does not match with our record.',
                ], 401);
            }

            $user = User::where('email', $request->email)->first();

            return response()->json([
                'status' => true,
                'message' => 'User Logged In Successfully',
                'token' => $user->createToken("API TOKEN")->plainTextToken
            ], 200);

        } catch (\Throwable $th) {
            return response()->json([
                'status' => false,
                'message' => $th->getMessage()
            ], 500);
        }
    }
}


인증으로 API를 보호하려면 auth:sanctum 미들웨어를 사용해야 합니다.




Route::apiResource('posts', PostController::class)->middleware('auth:sanctum');


결과는 다음과 같습니다.







전체 자습서는 비디오 아래에 있습니다.



REST API를 만드는 동안 문제가 발생하면 쿼리를 댓글로 남겨주세요.

읽어 주셔서 감사합니다

나에게 연락하십시오.

좋은 웹페이지 즐겨찾기