API resource controllers help organize your code to handle common actions like listing, creating, updating, and deleting data in a clean way.
API resource controllers in Laravel
php artisan make:controller NameController --api // In routes/api.php Route::apiResource('names', NameController::class);
The --api flag creates a controller without methods for showing forms, since APIs usually don't need HTML forms.
The apiResource method sets up routes for index, store, show, update, and destroy actions automatically.
php artisan make:controller ProductController --api
Route::apiResource('products', ProductController::class);
<?php namespace AppHttpControllers; use AppModelsProduct; use IlluminateHttpRequest; class ProductController extends Controller { public function index() { return Product::all(); } public function store(Request $request) { return Product::create($request->all()); } public function show(Product $product) { return $product; } public function update(Request $request, Product $product) { $product->update($request->all()); return $product; } public function destroy(Product $product) { $product->delete(); return response()->noContent(); } }
This example shows a TaskController with all API resource methods. The routes/api.php file uses apiResource to create routes automatically for tasks.
<?php namespace AppHttpControllers; use AppModelsTask; use IlluminateHttpRequest; class TaskController extends Controller { public function index() { return Task::all(); } public function store(Request $request) { return Task::create($request->all()); } public function show(Task $task) { return $task; } public function update(Request $request, Task $task) { $task->update($request->all()); return $task; } public function destroy(Task $task) { $task->delete(); return response()->noContent(); } } // In routes/api.php use AppHttpControllers\TaskController; Route::apiResource('tasks', TaskController::class);
API resource controllers do not include methods for creating or editing forms because APIs usually work with JSON data.
Use route model binding (like Task $task) to automatically get the model instance from the URL.
Remember to add validation in the store and update methods to keep data safe.
API resource controllers organize common API actions in one place.
Use php artisan make:controller NameController --api to create one quickly.
Use Route::apiResource to set up routes automatically for your API.