slogan3

Ontwerp een schaalbare API met Laravel Resource Controllers

description

Deze prompt helpt gebruikers een gestructureerde en schaalbare API op te zetten met Laravel Resource Controllers, waardoor onderhoud en uitbreiding eenvoudiger worden. Het vermijdt duplicatie van bestaande middleware- en artisan command prompts en richt zich op best practices voor API design binnen Laravel. Hiermee kunnen gebruikers efficiënt routes en controllers beheren, wat leidt tot een robuustere backend.

prompt

Help me bij het ontwerpen van een schaalbare API met Laravel Resource Controllers die CRUD-operaties ondersteunt voor <voer het onderwerp van de API in>. Besch ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzicht van hoe je een schaalbare API met Laravel Resource Controllers kunt ontwerpen voor Productenbeheer, inclusief resource routes en optimalisaties. ### 1. Maak een Resource Controller aan Gebruik de artisan command om een controller te genereren: ```bash php artisan make:controller ProductController --api ``` De `--api` optie genereert alleen de methoden die relevant zijn voor API (zonder `create` en `edit`). ### 2. Definieer resource routes In je `routes/api.php` bestand voeg je de resource route toe: ```php use Illuminate\Support\Facades\Route; Route::apiResource('producten', ProductController::class); ``` Dit creëert automatisch de volgende routes: | HTTP Methode | URL | Controller Methode | Beschrijving | |----------------|---------------------------|---------------------|----------------------------------| | GET | /producten | index | Lijst van producten | | POST | /producten | store | Nieuw product aanmaken | | GET | /producten/{id} | show | Specifiek product bekijken | | PUT/PATCH | /producten/{id} | update | Product bijwerken | | DELETE | /producten/{id} | destroy | Product verwijderen | ### 3. Optimalisaties en best practices - **Gebruik route model binding**: Pas de methodesignatures aan voor automatische modelbinding: ```php public function show(Product $product) { return response()->json($product); } ``` - **Validatie**: Voeg validatie toe in `store()` en `update()` methoden, bijvoorbeeld met Form Requests. - **Filtering en paginatie**: Voeg query parameters toe voor filtering, sortering en paginatie voor schaalbaarheid. - **Resource Responses**: Gebruik Laravel Resources voor consistente API-responses. ### 4. Voorbeeld van een resource controller method ```php public function index() { $producten = Product::paginate(10); return ProductResource::collection($producten); } ``` ### 5. Samenvatting - Gebruik `Route::apiResource` voor minimaal en schaalbaar routebeheer. - Maak gebruik van modelbinding voor cleaner code. - Implementeer filtering, sortering en paginatie. - Gebruik API Resources voor gestructureerde responses. Met deze aanpak bouw je een schaalbare, onderhoudbare en efficiënte API voor Productenbeheer in Laravel.
provider: deepseek
model: deepseek-chat
Zeker! Hier is een complete handleiding voor het ontwerpen van een schaalbare API met Laravel Resource Controllers voor productenbeheer. ## 1. Route Definitie Definieer je routes in `routes/api.php`: ```php <?php use App\Http\Controllers\ProductController; use Illuminate\Support\Facades\Route; // Resource routes voor producten Route::apiResource('producten', ProductController::class); // Optionele aanvullende routes voor specifieke functionaliteiten Route::prefix('producten')->group(function () { Route::get('categorie/{categorie}', [ProductController::class, 'getByCategory']); Route::get('zoek/{zoekterm}', [ProductController::class, 'search']); }); // Of met middleware voor authenticatie Route::middleware('auth:api')->apiResource('producten', ProductController::class); ``` ## 2. Controller Genereren Genereer de resource controller: ```bash php artisan make:controller ProductController --api ``` ## 3. ProductController Implementatie ```php <?php namespace App\Http\Controllers; use App\Models\Product; use App\Http\Resources\ProductResource; use App\Http\Requests\StoreProductRequest; use App\Http\Requests\UpdateProductRequest; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class ProductController extends Controller { /** * Toon alle producten (met paginatie) */ public function index(Request $request): JsonResponse { $perPage = $request->get('per_page', 15); $products = Product::with('category') ->orderBy('created_at', 'desc') ->paginate($perPage); return ProductResource::collection($products)->response(); } /** * Sla een nieuw product op */ public function store(StoreProductRequest $request): JsonResponse { $product = Product::create($request->validated()); return (new ProductResource($product)) ->response() ->setStatusCode(201); } /** * Toon een specifiek product */ public function show(Product $product): JsonResponse { $product->load('category', 'reviews'); return (new ProductResource($product))->response(); } /** * Update een product */ public function update(UpdateProductRequest $request, Product $product): JsonResponse { $product->update($request->validated()); return (new ProductResource($product))->response(); } /** * Verwijder een product */ public function destroy(Product $product): JsonResponse { $product->delete(); return response()->json(null, 204); } /** * Aanvullende methoden */ public function getByCategory($category): JsonResponse { $products = Product::where('category_id', $category) ->with('category') ->paginate(15); return ProductResource::collection($products)->response(); } public function search($searchTerm): JsonResponse { $products = Product::where('name', 'LIKE', "%{$searchTerm}%") ->orWhere('description', 'LIKE', "%{$searchTerm}%") ->with('category') ->paginate(15); return ProductResource::collection($products)->response(); } } ``` ## 4. Form Request Validation **StoreProductRequest.php:** ```php <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreProductRequest extends FormRequest { public function authorize():