API Versioning Strategies
use Illuminate\Support\Facades\Route;
// URI-based versioning
Route::prefix("v1")->group(function () {
Route::apiResource("users", App\Http\Controllers\Api\V1\UserController::class);
});
Route::prefix("v2")->group(function () {
Route::apiResource("users", App\Http\Controllers\Api\V2\UserController::class);
});
API Route Model Binding
// Implicit binding
Route::get("v1/posts/{post}", [PostController::class, "show"]);
// Custom key binding
Route::get("v1/posts/{post:slug}", [PostController::class, "show"]);
// Soft deleted models
Route::get("v1/posts/{post}", [PostController::class, "show"])->withTrashed();
API Resource Routes
// Standard resource routes (excludes create/edit)
Route::apiResource("posts", PostController::class);
// Nested resources
Route::apiResource("users.posts", UserPostController::class);
// Shallow nesting
Route::apiResource("users.comments", CommentController::class)->shallow();