# Laravel API ๊ฐ๋ฐ
## 1. API ๋ผ์ฐํธ ์ค์
```php
// routes/api.php
Route::prefix("v1")->group(function () {
Route::apiResource("posts", PostController::class);
Route::post("login", [AuthController::class, "login"]);
});
```
## 2. API ์ปจํธ๋กค๋ฌ
```bash
php artisan make:controller Api/PostController --api
```
```php
class PostController extends Controller
{
public function index()
{
return response()->json(Post::paginate(10));
}
public function store(Request $request)
{
$post = Post::create($request->validated());
return response()->json($post, 201);
}
}
```
## 3. API Resource (์๋ต ํฌ๋งทํ
)
```bash
php artisan make:resource PostResource
```
```php
class PostResource extends JsonResource
{
public function toArray($request)
{
return [
"id" => $this->id,
"title" => $this->title,
"author" => new UserResource($this->user),
"created_at" => $this->created_at->format("Y-m-d"),
];
}
}
```
## 4. Sanctum ์ธ์ฆ
```bash
composer require laravel/sanctum
php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"
php artisan migrate
```
```php
// ํ ํฐ ๋ฐ๊ธ
$token = $user->createToken("api-token")->plainTextToken;
// ๋ผ์ฐํธ ๋ณดํธ
Route::middleware("auth:sanctum")->group(function () {
Route::get("/user", fn() => auth()->user());
});
```
## 5. Form Request ๊ฒ์ฆ
```bash
php artisan make:request StorePostRequest
```
```php
class StorePostRequest extends FormRequest
{
public function rules()
{
return [
"title" => "required|max:200",
"content" => "required",
"category_id" => "required|exists:categories,id",
];
}
}
```
## 6. API ์๋ฌ ์ฒ๋ฆฌ
```php
// app/Exceptions/Handler.php
public function render($request, Throwable $e)
{
if ($request->expectsJson()) {
return response()->json([
"error" => $e->getMessage()
], 500);
}
return parent::render($request, $e);
}
```