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
Building API Routes in Laravel
📖 Scenario: You are creating a simple API for a book store. The API will allow users to get a list of books and add new books.
🎯 Goal: Build API routes in Laravel to handle requests for listing all books and adding a new book.
📋 What You'll Learn
Create a route group with prefix api
Define a GET route /books that returns all books
Define a POST route /books that adds a new book
Use a controller named BookController with methods index and store
💡 Why This Matters
🌍 Real World
API routes are used to build backend services that mobile apps or frontend apps can call to get or send data.
💼 Career
Knowing how to define API routes in Laravel is essential for backend developers building RESTful services.
Progress0 / 4 steps
1
Create the initial API route group
Create a route group with prefix api in routes/api.php using Route::prefix('api')->group(function () { ... });
Laravel
Hint
Use Route::prefix('api')->group(function () { ... }); to start the API routes.
2
Add a GET route for listing books
Inside the api route group, add a GET route /books that uses BookController@index.
Laravel
Hint
Use Route::get('/books', [BookController::class, 'index']); inside the group.
3
Add a POST route for adding a new book
Inside the api route group, add a POST route /books that uses BookController@store.
Laravel
Hint
Use Route::post('/books', [BookController::class, 'store']); inside the group.
4
Complete the API routes with middleware
Add the auth:sanctum middleware to the api route group to protect the routes.
Laravel
Hint
Add ->middleware('auth:sanctum') after prefix('api') to protect the routes.
Practice
(1/5)
1. What is the main purpose of defining API routes in Laravel's routes/api.php file?
easy
A. To configure middleware for user authentication
B. To define web page routes that return HTML views
C. To store database connection settings
D. To handle requests from other apps or devices and return JSON responses
Solution
Step 1: Understand the role of API routes
API routes are designed to handle requests from external apps or devices, not for web pages.
Step 2: Identify the correct file and response type
In Laravel, API routes are placed in routes/api.php and usually return JSON data.
Final Answer:
To handle requests from other apps or devices and return JSON responses -> Option D
Quick Check:
API routes = handle external requests + JSON [OK]
Hint: API routes handle external requests and return JSON [OK]
Common Mistakes:
Confusing API routes with web routes that return HTML
Thinking API routes are for database settings
Assuming API routes are only for middleware
2. Which of the following is the correct syntax to define a GET API route in Laravel that returns a JSON message "Hello World"?
easy
A. Route::get('/hello', function () { return response()->json(['message' => 'Hello World']); });
B. Route::post('/hello', function () { return 'Hello World'; });
C. Route::get('/hello', function () { return view('hello'); });
D. Route::put('/hello', function () { return response('Hello World'); });
Solution
Step 1: Identify the HTTP verb and response type
The question asks for a GET route that returns JSON data.
Step 2: Check each option's method and return
Route::get('/hello', function () { return response()->json(['message' => 'Hello World']); }); uses GET and returns JSON with response()->json(), which is correct. Others use wrong verbs or return types.
Final Answer:
Route::get('/hello', function () { return response()->json(['message' => 'Hello World']); }); -> Option A
Quick Check:
GET + JSON response = Route::get('/hello', function () { return response()->json(['message' => 'Hello World']); }); [OK]
Hint: GET routes return JSON with response()->json() [OK]
What will be the JSON response if a POST request sends {"name": "Alice", "age": 30}?
medium
A. An error because input() is not valid
B. {"name": null, "age": null}
C. {"name": "Alice", "age": 30}
D. Empty response
Solution
Step 1: Understand the route and request handling
The route accepts a POST request and reads 'name' and 'age' from the request input.
Step 2: Analyze the input data and response
The POST request sends JSON with 'name' as "Alice" and 'age' as 30, so the route returns these values as JSON.
Final Answer:
{"name": "Alice", "age": 30} -> Option C
Quick Check:
POST input data returned as JSON = {"name": "Alice", "age": 30} [OK]
Hint: POST data accessed by input() returns JSON response [OK]
Common Mistakes:
Assuming input() won't read JSON body
Expecting null values if input keys missing
Confusing GET and POST request handling
4. What is wrong with this API route definition?
Route::get('/data', function () {
return response('Data');
});
medium
A. It should return JSON, not plain text, for API routes
B. The HTTP verb GET is not allowed in API routes
C. The route path must start with /api/
D. The closure must accept a Request parameter
Solution
Step 1: Check the response type for API routes
API routes should return JSON data, but this returns plain text with response('Data').
Step 2: Verify HTTP verb and route path
GET is allowed, and route paths don't need to start with /api/ because the file already scopes them.
Final Answer:
It should return JSON, not plain text, for API routes -> Option A
Quick Check:
API routes expect JSON responses [OK]
Hint: API routes should return JSON, not plain text [OK]
Common Mistakes:
Thinking GET is disallowed in API routes
Believing route paths must start with /api/
Assuming Request parameter is mandatory
5. You want to create an API route that accepts a user ID in the URL and returns JSON with the user's name. Which of these route definitions correctly achieves this?
hard
A. Route::post('/user', function ($id) { return ['name' => 'User ' . $id]; });
B. Route::get('/user/{id}', function ($id) { return ['name' => 'User ' . $id]; });
C. Route::get('/user', function (Request $request) { return ['name' => 'User ' . $request->id]; });
D. Route::get('/user/{id}', function () { return ['name' => 'User']; });
Solution
Step 1: Identify route with URL parameter
The route must accept a user ID in the URL, so it needs a parameter like {id} in the path.
Step 2: Check function parameters and response
Route::get('/user/{id}', function ($id) { return ['name' => 'User ' . $id]; }); correctly uses $id parameter and returns JSON with the user's name including the ID.
Final Answer:
Route::get('/user/{id}', function ($id) { return ['name' => 'User ' . $id]; }); -> Option B
Quick Check:
URL param {id} passed as $id = Route::get('/user/{id}', function ($id) { return ['name' => 'User ' . $id]; }); [OK]
Hint: Use {id} in route and accept $id in closure [OK]