slogan3

Ontwerp een flexibele API voor mijn toepassing

description

Met deze prompt kan de gebruiker een op maat gemaakte API ontwerpen die schaalbaar en onderhoudbaar is, afgestemd op hun specifieke projectwensen. Het helpt hen om te leren hoe ze robuuste interfaces kunnen bouwen volgens de beste praktijken, wat leidt tot efficiëntere samenwerking en uitbreidbaarheid.

prompt

Help me een flexibele API te ontwerpen voor mijn toepassing die de volgende functionaliteit ondersteunt: <beschrijf de fun ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een stapsgewijze uitleg en een voorbeeldimplementatie van een flexibele API voor het aanmaken, bijwerken en ophalen van bestellingen in Python, gebruikmakend van Flask (een populair webframework). **Stapsgewijze uitleg** 1. **Bepaal de data structuur** Definieer wat een bestelling bevat, bijvoorbeeld: - bestelnummer (ID) - klantnaam - producten (lijst) - totaalbedrag - status 2. **Kies een opslagmethode** Voor eenvoud gebruiken we een in-memory dictionary. In productie zou je een database gebruiken. 3. **Maak de API endpoints** - POST /bestellingen: voor het aanmaken van een nieuwe bestelling - GET /bestellingen/<id>: voor het ophalen van een bestelling - PUT /bestellingen/<id>: voor het bijwerken van een bestelling 4. **Implementeer de logica** - Validatie van invoer - Aanmaak en bijwerking van data - Ophalen van data 5. **Test de API** Gebruik tools zoals Postman of curl. --- **Voorbeeldimplementatie in Python met Flask** ```python from flask import Flask, request, jsonify, abort app = Flask(__name__) # In-memory opslag voor bestellingen bestellingen = {} volgnummer = 1 # Endpoint voor het aanmaken van een bestelling @app.route('/bestellingen', methods=['POST']) def create_bestelling(): global volgnummer data = request.get_json() # Basis validatie if not data or 'klantnaam' not in data or 'producten' not in data: return jsonify({"error": "Onvoldoende gegevens"}), 400 bestelling_id = volgnummer volgnummer += 1 bestelling = { 'id': bestelling_id, 'klantnaam': data['klantnaam'], 'producten': data['producten'], 'totaal': data.get('totaal', 0), 'status': data.get('status', 'In behandeling') } bestellingen[bestelling_id] = bestelling return jsonify(bestelling), 201 # Endpoint voor het ophalen van een bestelling @app.route('/bestellingen/<int:bestelling_id>', methods=['GET']) def get_bestelling(bestelling_id): bestelling = bestellingen.get(bestelling_id) if not bestelling: abort(404, description="Bestelling niet gevonden") return jsonify(bestelling) # Endpoint voor het bijwerken van een bestelling @app.route('/bestellingen/<int:bestelling_id>', methods=['PUT']) def update_bestelling(bestelling_id): data = request.get_json() bestelling = bestellingen.get(bestelling_id) if not bestelling: abort(404, description="Bestelling niet gevonden") # Bijwerken van velden indien aanwezig if 'klantnaam' in data: bestelling['klantnaam'] = data['klantnaam'] if 'producten' in data: bestelling['producten'] = data['producten'] if 'totaal' in data: bestelling['totaal'] = data['totaal'] if 'status' in data: bestelling['status'] = data['status'] return jsonify(bestelling) if __name__ == '__main__': app.run(debug=True) ``` **Samenvatting:** - We gebruiken POST om nieuwe bestellingen te maken - GET om bestaande bestellingen op te halen - PUT om bestellingen bij te werken Voor verdere flexibiliteit kun je extra velden en validaties toevoegen, en je opslag aanpassen naar een database.
provider: deepseek
model: deepseek-chat
Ik help je graag met het ontwerpen van een flexibele API voor bestellingen. Hier is een stapsgewijze uitleg en voorbeeldimplementatie in Python. ## Stap 1: API Design Principes **RESTful endpoints:** - `POST /orders` - Nieuwe bestelling aanmaken - `GET /orders` - Alle bestellingen ophalen - `GET /orders/{order_id}` - Specifieke bestelling ophalen - `PUT /orders/{order_id}` - Bestelling bijwerken - `DELETE /orders/{order_id}` - Bestelling verwijderen ## Stap 2: Data Model ```python from pydantic import BaseModel, Field from typing import List, Optional from datetime import datetime from enum import Enum class OrderStatus(str, Enum): PENDING = "pending" PROCESSING = "processing" SHIPPED = "shipped" DELIVERED = "delivered" CANCELLED = "cancelled" class OrderItem(BaseModel): product_id: str quantity: int price: float name: str class OrderCreate(BaseModel): customer_id: str items: List[OrderItem] shipping_address: str class OrderResponse(OrderCreate): id: str status: OrderStatus created_at: datetime updated_at: datetime total_amount: float ``` ## Stap 3: FastAPI Implementatie ```python from fastapi import FastAPI, HTTPException, status from fastapi.middleware.cors import CORSMiddleware import uuid from datetime import datetime app = FastAPI(title="Order Management API", version="1.0.0") # CORS middleware voor frontend integratie app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # In-memory database (vervang dit met echte database) orders_db = {} @app.post("/orders", response_model=OrderResponse, status_code=status.HTTP_201_CREATED) async def create_order(order: OrderCreate): """Maak een nieuwe bestelling aan""" order_id = str(uuid.uuid4()) total_amount = sum(item.price * item.quantity for item in order.items) order_data = { "id": order_id, "customer_id": order.customer_id, "items": [item.dict() for item in order.items], "shipping_address": order.shipping_address, "status": OrderStatus.PENDING, "created_at": datetime.now(), "updated_at": datetime.now(), "total_amount": total_amount } orders_db[order_id] = order_data return order_data @app.get("/orders", response_model=List[OrderResponse]) async def get_orders( customer_id: Optional[str] = None, status: Optional[OrderStatus] = None, limit: int = 100, offset: int = 0 ): """Haal bestellingen op met optionele filters""" filtered_orders = list(orders_db.values()) if customer_id: filtered_orders = [o for o in filtered_orders if o["customer_id"] == customer_id] if status: filtered_orders = [o for o in filtered_orders if o["status"] == status] return filtered_orders[offset:offset + limit] @app.get("/orders/{order_id}", response_model=OrderResponse) async def get_order(order_id: str): """Haal een specifieke bestelling op""" if order_id not in orders_db: raise HTTPException(status_code=404, detail="Bestelling niet gevonden") return orders_db[order_id] @app.put("/orders/{order_id}", response_model=OrderResponse) async def update_order(order_id: str, status: OrderStatus): """Update de status van een bestelling""" if order_id not in orders_db: raise HTTPException(status_code=404, detail="Bestelling niet gevonden") orders_db[order_id]["status"] = status orders_db[order_id]["updated_at"] = datetime.now() return orders_db[order_id] @app.delete("/orders/{order_id}", status_code=status.HTTP_204_NO_CONTENT) async def delete_order(order_id: str): """Verwijder een bestelling""" if order_id not in orders_db: raise HTTPException(status_code=404, detail="Bestelling niet gevonden") del orders_db[order_id] return None ``` ## Stap 4: Gebruiksvoorbeelden **1. Nieuwe bestelling aanmaken:** ```python import requests BASE_URL = "http://localhost:8000" # Nieuwe bestelling order_data = { "customer_id": "cust_123", "shipping_address": "Straatnaam 123, 1000 Amsterdam", "items": [ { "product_id": "prod_001", "name": "Laptop", "quantity": 1, "price": 999.99 }, { "product_id": "prod_002", "name": "Muis", "quantity": 2, "price": 25.50 } ] } response = requests.post(f"{BASE_URL}/orders", json=order_data) print(response.json()) ``` **2. Bestellingen ophalen:** ```python # Alle bestellingen response = requests.get(f"{BASE_URL}/orders") # Bestellingen van specifieke klant response = requests.get(f"{BASE_URL}/orders?customer_id=cust_123") # Bestellingen met status filter response = requests.get(f"{BASE_URL}/orders?status=processing") ``` ## Stap 5: Uitvoeren en Testen ```bash # Installeer dependencies pip install fastapi uvicorn # Start de server uvicorn main:app --reload --host 0.0.0.0 --port 8000 # Bekijk API documentatie # http://localhost:8000/docs ``` ## Flexibiliteit Features: 1. **Filtering**: Ondersteunt filtering op customer_id en status 2. **Paginering**: Limit en offset parameters voor grote datasets 3. **Validatie**: Automatische data validatie met Pydantic 4. **Error Handling**: Duidelijke foutmeldingen met HTTP status codes 5. **CORS**: Ondersteuning voor cross-origin requests 6. **Documentatie**: Automatische OpenAPI/Swagger docs Deze API is gemakkelijk uit te breiden met extra functionaliteit zoals betalingen, verzendtracking, of integratie met externe services.
error: Generation failed [deepseek] prompt_id=1177 locale=fr err=DeepSeek connection/timeout