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
tags
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():