REST API
Beginner
1 min read
Designing RESTful Endpoints
Example
# Laravel resource routes (routes/api.php)
Route::apiResource('products', ProductController::class);
# Generates:
# GET /products -> index
# POST /products -> store
# GET /products/{id} -> show
# PUT /products/{id} -> update
# PATCH /products/{id} -> update
# DELETE /products/{id} -> destroy
# Nested resources
Route::apiResource('users.orders', UserOrderController::class);
# GET /users/{user}/orders -> index
# POST /users/{user}/orders -> store
# GET /users/{user}/orders/{order} -> show
# Custom action endpoints
Route::post('/orders/{order}/cancel', [OrderController::class, 'cancel']);
Route::post('/users/{user}/verify', [UserController::class, 'verify']);
# app/Http/Controllers/ProductController.php (skeleton)
class ProductController extends Controller {
public function index(Request $req): JsonResponse {
return response()->json(Product::paginate(20));
}
public function store(StoreProductRequest $req): JsonResponse {
$product = Product::create($req->validated());
return response()->json($product, 201);
}
public function show(Product $product): JsonResponse {
return response()->json($product);
}
public function update(UpdateProductRequest $req, Product $product): JsonResponse {
$product->update($req->validated());
return response()->json($product);
}
public function destroy(Product $product): JsonResponse {
$product->delete();
return response()->json(null, 204);
}
}