Bird
Raised Fist0
Laravelframework~10 mins

API resource controllers in Laravel - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - API resource controllers
Client sends HTTP request
↓
Route matches resource controller method
↓
Controller method executes
↓
index
↓
Fetch data
↓
Return JSON response to client
The flow shows how HTTP requests map to controller methods that handle data and return JSON responses.
Execution Sample
Laravel
Route::apiResource('books', BookController::class);

// BookController methods:
public function index() { return Book::all(); }
public function show($id) { return Book::findOrFail($id); }
Defines API routes for books and shows how index and show methods return data.
Execution Table
StepHTTP RequestRoute MatchedController MethodActionResponse
1GET /booksbooks.indexindex()Fetch all booksJSON list of all books
2GET /books/3books.showshow(3)Fetch book with ID 3JSON data of book 3
3POST /booksbooks.storestore()Validate & save new bookJSON data of created book
4PUT /books/3books.updateupdate(3)Validate & update book 3JSON data of updated book
5DELETE /books/3books.destroydestroy(3)Delete book 3204 No Content response
6GET /books/999books.showshow(999)Book 999 not found404 Not Found error
💡 Execution stops after sending JSON response or error to client.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5After Step 6
booksempty[book1, book2, book3][book1, book2, book3][book1, book2, book3, newBook][book1, book2, updatedBook, newBook][book1, book2, newBook][book1, book2, newBook]
bookIdnullnull3null33999
responsenullJSON listJSON book 3JSON new bookJSON updated book204 No Content404 Not Found
Key Moments - 3 Insights
Why does the show method return a 404 error for a missing ID?
Because findOrFail throws an error if the book is not found, as shown in step 6 of the execution_table.
How does Laravel know which controller method to call for each HTTP request?
The apiResource route maps HTTP verbs and URLs to controller methods automatically, as seen in the Route Matched column.
What response does the destroy method send after deleting a record?
It sends a 204 No Content response, indicating success without returning data, shown in step 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what response does the index method return at step 1?
AJSON list of all books
BJSON data of book 3
C204 No Content response
D404 Not Found error
💡 Hint
Check the Response column at step 1 in the execution_table.
At which step does the controller return a 404 error?
AStep 2
BStep 6
CStep 4
DStep 5
💡 Hint
Look for 404 Not Found in the Response column of the execution_table.
If a new book is added, how does the 'books' variable change after step 3?
AIt stays the same
BIt removes a book
CIt adds the new book to the list
DIt becomes empty
💡 Hint
Check the variable_tracker row for 'books' after step 3.
Concept Snapshot
API resource controllers map HTTP verbs and URLs to controller methods.
Common methods: index, show, store, update, destroy.
They handle data fetching, validation, saving, updating, and deleting.
Responses are JSON or HTTP status codes.
Routes are defined with Route::apiResource.
Missing records return 404 errors automatically.
Full Transcript
API resource controllers in Laravel connect HTTP requests to controller methods automatically using Route::apiResource. When a client sends a request like GET /books, Laravel calls the index method to fetch all books and returns them as JSON. For GET /books/3, it calls show(3) to fetch one book or returns a 404 error if not found. POST requests call store to validate and save new data. PUT requests call update to modify existing data. DELETE requests call destroy to remove data and respond with 204 No Content. The execution table shows each step's request, matched route, controller method, action, and response. The variable tracker shows how data changes after each step. Key moments clarify why 404 errors happen, how routes map to methods, and what responses are sent after deletion. The visual quiz tests understanding of responses, error steps, and data changes. This helps beginners see how Laravel API resource controllers handle requests and responses step-by-step.

Practice

(1/5)
1. What is the main purpose of an API resource controller in Laravel?
easy
A. To manage database migrations automatically
B. To handle user authentication and sessions
C. To generate HTML views for web pages
D. To provide standard methods for RESTful API actions like index, show, store, update, and destroy

Solution

  1. Step 1: Understand the role of API resource controllers

    API resource controllers in Laravel provide a set of predefined methods that correspond to common RESTful API actions such as listing resources, showing a single resource, creating, updating, and deleting resources.
  2. Step 2: Compare with other options

    Options A, B, and D describe other Laravel features unrelated to API resource controllers. Authentication, migrations, and HTML views are handled differently.
  3. Final Answer:

    To provide standard methods for RESTful API actions like index, show, store, update, and destroy -> Option D
  4. Quick Check:

    API resource controller purpose = standard RESTful methods [OK]
Hint: API resource controllers map REST actions automatically [OK]
Common Mistakes:
  • Confusing API controllers with authentication controllers
  • Thinking API resource controllers generate views
  • Assuming they handle database migrations
2. Which of the following is the correct way to register an API resource controller route in Laravel?
easy
A. Route::getResource('posts', PostController::class);
B. Route::resource('posts', PostController::class);
C. Route::apiResource('posts', PostController::class);
D. Route::api('posts', PostController::class);

Solution

  1. Step 1: Identify the method for API resource routes

    Laravel provides the apiResource method to register routes for API resource controllers, which excludes routes for creating and editing views.
  2. Step 2: Check other options

    Route::resource('posts', PostController::class); registers a full resource controller including web routes for create/edit views, which is not typical for APIs. Options C and D are invalid Laravel route methods.
  3. Final Answer:

    Route::apiResource('posts', PostController::class); -> Option C
  4. Quick Check:

    API resource route method = apiResource [OK]
Hint: Use apiResource for API-only routes, not resource [OK]
Common Mistakes:
  • Using Route::resource instead of Route::apiResource for APIs
  • Using non-existent route methods like getResource
  • Confusing web and API route registration
3. Given this API resource controller method in Laravel:
public function show($id) {
    return response()->json(['id' => $id, 'name' => 'Item '.$id]);
}

What will be the JSON response when calling GET /api/items/5?
medium
A. {"id":"5", "name":"Item 5"}
B. {"error":"Not Found"}
C. {"id":null, "name":"Item 5"}
D. {"id":5, "name":"Item 5"}

Solution

  1. Step 1: Analyze the show method

    The method returns a JSON response with an array containing 'id' set to the passed $id parameter and 'name' as 'Item ' concatenated with $id.
  2. Step 2: Substitute the URL parameter

    Calling GET /api/items/5 passes '5' as $id (string), so the JSON will be {"id":"5", "name":"Item 5"}.
  3. Final Answer:

    {"id":"5", "name":"Item 5"} -> Option A
  4. Quick Check:

    show method returns JSON with id="5" [OK]
Hint: Check parameter passed matches JSON output exactly [OK]
Common Mistakes:
  • Assuming id is integer instead of string
  • Expecting an error response for valid id
  • Confusing JSON structure returned
4. You have this route registration:
Route::apiResource('products', ProductController::class);

But when you try to access GET /products/create, you get a 404 error. Why?
medium
A. Because the ProductController is missing the create method
B. Because apiResource does not create routes for create and edit methods
C. Because the route URL is incorrect and should be /product/create
D. Because GET requests are not allowed on apiResource routes

Solution

  1. Step 1: Understand apiResource route behavior

    The apiResource method registers only API routes and excludes routes for creating and editing resources, such as /create and /edit, which are typically used for web forms.
  2. Step 2: Analyze the 404 error cause

    Since /products/create route is not registered by apiResource, accessing it results in a 404 error. This is expected behavior.
  3. Final Answer:

    Because apiResource does not create routes for create and edit methods -> Option B
  4. Quick Check:

    apiResource excludes create/edit routes [OK]
Hint: apiResource skips create/edit routes, use resource for them [OK]
Common Mistakes:
  • Expecting create route with apiResource
  • Thinking route URL is wrong
  • Assuming GET requests are blocked
5. You want to create an API resource controller that only supports index and show methods to list and view items. Which is the best way to register the routes?
hard
A. Route::apiResource('items', ItemController::class)->only(['index', 'show']);
B. Route::resource('items', ItemController::class)->except(['store', 'update', 'destroy']);
C. Route::apiResource('items', ItemController::class)->except(['create', 'edit']);
D. Route::resource('items', ItemController::class)->only(['index', 'show', 'create']);

Solution

  1. Step 1: Identify the correct route registration method for APIs

    Since this is an API controller, apiResource is preferred because it excludes create/edit routes automatically.
  2. Step 2: Limit routes to only index and show

    The only method restricts the registered routes to just the specified methods, here 'index' and 'show'.
  3. Step 3: Evaluate other options

    Route::resource('items', ItemController::class)->except(['store', 'update', 'destroy']); uses resource which includes web routes unnecessarily. Route::apiResource('items', ItemController::class)->except(['create', 'edit']); excludes create/edit but does not limit to only index/show. Route::resource('items', ItemController::class)->only(['index', 'show', 'create']); includes 'create' which is not needed and uses resource.
  4. Final Answer:

    Route::apiResource('items', ItemController::class)->only(['index', 'show']); -> Option A
  5. Quick Check:

    Use apiResource with only(['index', 'show']) for limited API routes [OK]
Hint: Use apiResource with only() to limit API routes [OK]
Common Mistakes:
  • Using resource instead of apiResource for APIs
  • Not limiting routes and exposing unwanted methods
  • Including create/edit routes in API
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard