Bird
Raised Fist0
Laravelframework~5 mins

API resource classes in Laravel - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the main purpose of API resource classes in Laravel?
API resource classes help transform your models and collections into JSON responses that are easy to read and consistent for API clients.
Click to reveal answer
beginner
How do you create a new API resource class in Laravel?
Use the artisan command: <code>php artisan make:resource ResourceName</code>. This creates a class in <code>app/Http/Resources</code>.
Click to reveal answer
beginner
In an API resource class, which method defines how the model data is transformed?
The toArray method defines how the model's attributes are converted into an array for JSON output.
Click to reveal answer
intermediate
What is the difference between a single resource and a resource collection in Laravel?
A single resource transforms one model instance, while a resource collection transforms multiple models, usually returned as a list.
Click to reveal answer
intermediate
How can you add additional data to the JSON response from an API resource class?
Override the <code>with</code> method in the resource class to add extra data outside the main resource array.
Click to reveal answer
Which artisan command creates a new API resource class in Laravel?
Aphp artisan make:resource ResourceName
Bphp artisan make:model ResourceName
Cphp artisan make:controller ResourceName
Dphp artisan make:migration ResourceName
Which method in an API resource class controls the JSON structure of the response?
AtoArray()
BtoJson()
Crender()
Dformat()
What does a resource collection represent in Laravel?
AA controller method
BA single model instance
CA database migration
DA group of models transformed together
How can you add extra data to the JSON response besides the model attributes?
AOverride the toJson() method
BOverride the with() method
CAdd data in the controller only
DUse a middleware
Where are API resource classes stored by default in a Laravel project?
Aapp/Models
Bapp/Http/Controllers
Capp/Http/Resources
Dresources/views
Explain how Laravel API resource classes help in building APIs and how you create and use them.
Think about how you turn data into clean JSON for your API users.
You got /4 concepts.
    Describe the difference between a single API resource and a resource collection in Laravel and when to use each.
    Consider if you are sending one item or many items in your API response.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of an API Resource Class in Laravel?
      easy
      A. To manage user authentication
      B. To handle database migrations
      C. To format and control the data sent in API responses
      D. To create views for web pages

      Solution

      1. Step 1: Understand the role of API Resource Classes

        API Resource Classes in Laravel are designed to transform data models into JSON responses for APIs.
      2. Step 2: Identify what they do not do

        They do not handle database migrations, authentication, or view rendering.
      3. Final Answer:

        To format and control the data sent in API responses -> Option C
      4. Quick Check:

        API Resource Classes = Format API data [OK]
      Hint: Remember: API Resource Classes shape API output data [OK]
      Common Mistakes:
      • Confusing resource classes with controllers
      • Thinking resource classes handle database or auth
      • Assuming resource classes create HTML views
      2. Which of the following is the correct way to return a single resource in a Laravel controller using an API Resource Class named UserResource?
      easy
      A. return new UserResource($user);
      B. return UserResource::collection($user);
      C. return UserResource::makeCollection($user);
      D. return UserResource::toJson($user);

      Solution

      1. Step 1: Recall syntax for returning a single resource

        To return a single model as a resource, you instantiate the resource class with the model: new UserResource($user).
      2. Step 2: Understand collection syntax

        UserResource::collection($user) is for multiple models, not a single one.
      3. Final Answer:

        return new UserResource($user); -> Option A
      4. Quick Check:

        Single resource = new Resource($model) [OK]
      Hint: Use 'new Resource($model)' for single items [OK]
      Common Mistakes:
      • Using collection() for single model
      • Calling non-existent methods like makeCollection()
      • Trying toJson() on resource class directly
      3. Given the following Laravel API Resource class code, what will be the JSON output for a user with id=5 and name='Alice'?
      class UserResource extends JsonResource {
          public function toArray($request) {
              return [
                  'user_id' => $this->id,
                  'user_name' => $this->name
              ];
          }
      }
      
      // In controller:
      return new UserResource($user);
      medium
      A. {"id":5,"name":"Alice"}
      B. {"user_id":5,"user_name":"Alice"}
      C. {"userId":5,"userName":"Alice"}
      D. {"user_id":5,"name":"Alice"}

      Solution

      1. Step 1: Analyze the toArray method

        The method returns an array with keys 'user_id' and 'user_name' mapped to the model's id and name.
      2. Step 2: Match output keys and values

        Given id=5 and name='Alice', the JSON keys and values must match exactly as defined.
      3. Final Answer:

        {"user_id":5,"user_name":"Alice"} -> Option B
      4. Quick Check:

        toArray keys = JSON keys [OK]
      Hint: Match keys exactly as returned in toArray() [OK]
      Common Mistakes:
      • Assuming default keys like 'id' instead of 'user_id'
      • Mixing camelCase and snake_case keys
      • Ignoring the resource's toArray method
      4. What is wrong with this Laravel API Resource class code snippet?
      class ProductResource extends JsonResource {
          public function toArray($request) {
              return [
                  'id' => $this->id,
                  'name' => $this->name,
                  'price' => $this->price
              ];
          }
      }
      
      // In controller:
      return ProductResource::collection($products);
      medium
      A. The code is correct and will return a collection of formatted products
      B. Using ProductResource::collection is incorrect for multiple products
      C. The controller should instantiate ProductResource with new keyword for collections
      D. The toArray method should return a JSON string, not an array

      Solution

      1. Step 1: Check toArray method return type

        toArray should return an array, which Laravel converts to JSON automatically.
      2. Step 2: Verify collection usage

        Using ProductResource::collection($products) is the correct way to return multiple resources.
      3. Final Answer:

        The code is correct and will return a collection of formatted products -> Option A
      4. Quick Check:

        collection() for multiple models = correct [OK]
      Hint: Use ::collection() for multiple models, toArray returns array [OK]
      Common Mistakes:
      • Expecting toArray to return JSON string
      • Using new keyword for collections
      • Confusing single resource and collection syntax
      5. You want to add a conditional field is_admin to your UserResource that only appears if the user has admin rights. Which is the best way to do this in the toArray method?
      hard
      A. Add 'is_admin' => $this->isAdmin() ? true : false, unconditionally
      B. Return two different resource classes for admin and non-admin users
      C. Add 'is_admin' only if $this->isAdmin() is true by overriding toResponse()
      D. Use 'when' helper: 'is_admin' => $this->when($this->isAdmin(), true)

      Solution

      1. Step 1: Understand conditional fields in API Resources

        Laravel provides the 'when' helper to conditionally include fields in the response.
      2. Step 2: Evaluate options

        Use 'when' helper: 'is_admin' => $this->when($this->isAdmin(), true) uses 'when' correctly to include 'is_admin' only if the user is admin.
      3. Final Answer:

        Use 'when' helper: 'is_admin' => $this->when($this->isAdmin(), true) -> Option D
      4. Quick Check:

        Use when() for conditional fields [OK]
      Hint: Use when() helper to add fields conditionally [OK]
      Common Mistakes:
      • Always including the field even if false
      • Overriding toResponse unnecessarily
      • Creating separate resource classes for small condition