0Pricing
PHP Academy · 강의

API 리소스 및 JSON 응답

Eloquent API Resources와 ResourceCollections로 JSON 출력을 구성합니다.

API 리소스 및 JSON 응답은(는) CoddyKit의 무료 PHP Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 PHP Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

API 리소스란 무엇입니까?

Eloquent API 리소스는 모델과 컬렉션을 JSON으로 사용할 수 있는 배열로 변환하여 API 응답의 형태를 완전히 제어할 수 있게 합니다.

리소스 생성

Artisan으로 리소스 클래스를 생성합니다.

$ php artisan make:resource UserResource
# For collections:
$ php artisan make:resource UserCollection

기본 리소스

toArray()를 재정의하여 JSON 구조를 정의합니다.

<?php
namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    public function toArray($request): array
    {
        return [
            "id"         => $this->id,
            "name"       => $this->name,
            "email"      => $this->email,
            "created_at" => $this->created_at->toISOString(),
        ];
    }
}

리소스 반환

컨트롤러에서 리소스를 반환하면 모델이 자동으로 data 키로 감싸집니다.

<?php
public function show(User $user): UserResource
{
    return new UserResource($user);
}
// Response: {"data": {"id": 1, "name": "Alice", ...}}

리소스 컬렉션

::collection()으로 모델 컬렉션을 감쌉니다.

<?php
public function index(): AnonymousResourceCollection
{
    return UserResource::collection(User::paginate(15));
}

조건부 필드

when()을 사용하여 조건이 충족될 때만 필드를 포함합니다.

<?php
return [
    "id"    => $this->id,
    "email" => $this->when($request->user()?->isAdmin(), $this->email),
    "token" => $this->whenLoaded("tokens", $this->tokens->first()->plainTextToken),
];

whenLoaded()

관계가 이미 로드된 경우에만 조건부로 포함하여 리소스 응답에서 N+1 문제를 방지합니다.

<?php
return [
    "id"      => $this->id,
    "posts"   => PostResource::collection($this->whenLoaded("posts")),
    "profile" => new ProfileResource($this->whenLoaded("profile")),
];

중첩 리소스

풍부하고 타입이 지정된 응답 형태를 만들기 위해 다른 리소스 안에 리소스를 중첩합니다.

<?php
return [
    "id"     => $this->id,
    "author" => new UserResource($this->author),
    "tags"   => TagResource::collection($this->tags),
];

추가 메타데이터

with()를 재정의하여 응답에 메타데이터를 추가합니다.

<?php
public function with($request): array
{
    return [
        "meta" => ["version" => "1.0"],
    ];
}

래핑

기본적으로 리소스는 data 키로 감싸집니다. JsonResource::withoutWrapping()으로 전역 래핑을 비활성화할 수 있습니다.

<?php
// In AppServiceProvider::boot():
JsonResource::withoutWrapping();

리소스의 페이지 매김

페이지 매김 처리기를 리소스 컬렉션에 전달하면 페이지 매김 메타데이터가 자동으로 포함됩니다.

<?php
return UserResource::collection(User::paginate(15));
// Response includes: data[], links{}, meta{}

리소스 테스트

assertJson() 또는 assertJsonStructure()를 사용하여 테스트에서 리소스 구조를 검증합니다.

<?php
$response->assertJsonStructure([
    "data" => ["id", "name", "email"]
]);

요약

API 리소스는 JSON 출력 형태를 제어합니다. 조건부 필드에는 when()과 whenLoaded()를 사용합니다. 관계를 표현하려면 리소스를 중첩합니다. 여러 모델에는 ::collection()을 사용합니다.

빠른 확인

관계가 이미 로드된 경우에만 조건부로 포함하는 메서드는 무엇입니까?

자주 묻는 질문

“API 리소스 및 JSON 응답” 강의는 무료인가요?

네 — “API 리소스 및 JSON 응답” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 PHP Academy 강의 전체를 잠금 해제할 수 있습니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“API 리소스 및 JSON 응답”에서 뭘 배우나요?

Eloquent API Resources와 ResourceCollections로 JSON 출력을 구성합니다. 브라우저에서 직접 실행하는 실습 코드로 PHP Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

PHP Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 PHP Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“API 리소스 및 JSON 응답” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 PHP Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 PHP Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. API 경로 및 리소스 컨트롤러
  2. API 리소스 및 JSON 응답
  3. Laravel Sanctum으로 인증하기
  4. 요청 제한 및 API 버전 관리
← PHP Academy(으)로 돌아가기