Ontwerp een OpenAPI Specificatie voor API Event-Driven Architectuur
description
Met deze prompt ontwerp je een OpenAPI specificatie die event-driven API's ondersteunt, waardoor je integraties eenvoudiger, duidelijker en betrouwbaarder worden. Dit lost het probleem op van onvoldoende documentatie voor event-based communicatie en biedt een gestructureerd format voor ontwikkelaars.
prompt
Help me een OpenAPI specificatie te maken die een event-driven API beschrijft, inclusief eventtypen, payloadstructuren en abonnementsmechanismen.
API Naam: <voer de naam van mijn API in>
Type Events (bijv. create, update, delete): <beschrijf de soorten events>
Payload Structuur voor elk even ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
openapi: 3.1.0
info:
title: Klantbeheer API
description: >
Deze API ondersteunt een event-driven architectuur voor klantbeheer,
inclusief eventtypes, payloadstructuren en abonnementsmechanismen.
version: 1.0.0
servers:
- url: https://api.klantbeheer.example.com
description: API server
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
schemas:
CreateEventPayload:
type: object
properties:
id:
type: string
description: Unieke identificatie van de klant
naam:
type: string
description: Naam van de klant
required:
- id
- naam
UpdateEventPayload:
type: object
properties:
id:
type: string
description: Unieke identificatie van de klant
wijzigingen:
type: object
description: Object met de gewijzigde velden
required:
- id
- wijzigingen
paths:
/events/create:
post:
summary: Abonneer op create events
description: >
Abonneer een webhook voor het ontvangen van 'create' klant events.
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
callbackUrl:
type: string
description: De URL waar de events naartoe worden gestuurd
required:
- callbackUrl
responses:
'200':
description: Abonnement succesvol aangemaakt
/events/update:
post:
summary: Abonneer op update events
description: >
Abonneer een webhook voor het ontvangen van 'update' klant events.
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
callbackUrl:
type: string
description: De URL waar de events naartoe worden gestuurd
required:
- callbackUrl
responses:
'200':
description: Abonnement succesvol aangemaakt
/events/delete:
post:
summary: Abonneer op delete events
description: >
Abonneer een webhook voor het ontvangen van 'delete' klant events.
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
callbackUrl:
type: string
description: De URL waar de events naartoe worden gestuurd
required:
- callbackUrl
responses:
'200':
description: Abonnement succesvol aangemaakt
components:
schemas:
CreateEvent:
type: object
properties:
eventType:
type: string
enum: [create]
example: create
payload:
$ref: '#/components/schemas/CreateEventPayload'
UpdateEvent:
type: object
properties:
eventType:
type: string
enum: [update]
example: update
payload:
$ref: '#/components/schemas/UpdateEventPayload'
DeleteEvent:
type: object
properties:
eventType:
type: string
enum: [delete]
example: delete
payload:
type: object
properties:
id:
type: string
description: Unieke identificatie van de verwijderde klant
# Geen payload voor delete of optioneel kunnen andere velden worden toegevoegd
# Samenvatting:
# - Abonnementen worden ingesteld via POST endpoints (/events/create, /events/update, /events/delete)
# - Elke endpoint vereist een callbackUrl in de request body
# - Authenticatie via API Key in header (X-API-Key)
# - Events bevatten een eventType en payloadstructuur passend bij het eventtype
provider: deepseek
model: deepseek-chat
```yaml
openapi: 3.0.3
info:
title: Klantbeheer API
description: Event-driven API voor klantbeheer met webhook abonnementen
version: 1.0.0
contact:
name: API Support
email: support@voorbeeld.nl
servers:
- url: https://api.voorbeeld.nl/v1
description: Productie server
paths:
/webhooks:
post:
summary: Registreer een nieuwe webhook
description: Registreer een webhook endpoint om events te ontvangen
operationId: registerWebhook
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
- eventTypes
properties:
url:
type: string
format: uri
description: URL waar events naartoe worden gestuurd
example: "https://mijnapp.nl/webhooks/klant"
eventTypes:
type: array
items:
type: string
enum:
- klant.created
- klant.updated
- klant.deleted
description: Lijst van event types waarop geabonneerd wordt
secret:
type: string
description: Optioneel geheim voor signature verificatie
responses:
'201':
description: Webhook succesvol geregistreerd
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Unieke identifier van de webhook
url:
type: string
eventTypes:
type: array
items:
type: string
status:
type: string
enum: [active, inactive]
default: active
'400':
description: Ongeldige request
'401':
description: Niet geautoriseerd
get:
summary: Lijst alle geregistreerde webhooks op
operationId: listWebhooks
tags:
- Webhooks
responses:
'200':
description: Lijst van webhooks
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Webhook'
/webhooks/{webhookId}:
delete:
summary: Verwijder een webhook
operationId: deleteWebhook
tags:
- Webhooks
parameters:
- name: webhookId
in: path
required: true
schema:
type: string
responses:
'204':
description: Webhook succesvol verwijderd
'404':
description: Webhook niet gevonden
components:
schemas:
Event:
type: object
required:
- id
- type
- timestamp
- data
properties:
id:
type: string
description: Unieke identifier van het event
type:
type: string
enum:
- klant.created
- klant.updated
- klant.deleted
description: Type van het event
timestamp:
type: string
format: date-time
description: Tijdstip waarop het event plaatsvond
data:
oneOf:
- $ref: '#/components/schemas/KlantCreatedEvent'
- $ref: '#/components/schemas/KlantUpdatedEvent'
- $ref: '#/components/schemas/KlantDeletedEvent'
KlantCreatedEvent:
type: object
required:
- id
- naam
properties:
id:
type: string
description: Unieke identifier van de klant
naam:
type: string
description: Naam van de klant
example: "Jan Jansen"
KlantUpdatedEvent:
type: object
required:
- id
- wijzigingen
properties:
id:
type: string
description: Unieke identifier van de klant
wijzigingen:
type: object
description: Object met gewijzigde velden en hun nieuwe waarden
additionalProperties: true
example:
naam: "Jan Janssen"
email: "jan.janssen@voorbeeld.nl"
KlantDeletedEvent:
type: object
required:
- id
properties:
id:
type: string
description: Unieke identifier van de verwijderde klant
Webhook:
type: object
required:
- id
- url
- eventTypes
- status
properties:
id:
type: string
url:
type: string
eventTypes:
type: array
items:
type: string
status:
type: string
enum: [active, inactive]
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: API Key voor authenticatie
security:
- ApiKeyAuth: []
webhooks:
klantEvent:
post:
summary: Webhook voor klant events
description: Wordt aangeroepen wanneer een klant event plaatsvindt
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
responses:
'200':
description: Event succesvol ontvangen
'202':
description: Event geaccepteerd voor verwerking
'400':
description: Ongeldig event
```
Deze OpenAPI specificatie beschrijft een complete event-driven API voor klantbeheer met:
**Belangrijke kenmerken:**
- **Event types**: `klant.created`, `klant.updated`, `klant.deleted`
- **Payload structuren**:
- Create: `{ id: string, naam: string }`
- Update: `{ id: string, wijzigingen: object }`
- Delete: `{ id: string }`
- **Abonnementsmechanisme**: Webhook registratie via `/webhooks` endpoint
- **Authenticatie**: API Key in header (X-API-Key)
- **Webhook beheer**: Volledige CRUD operaties voor webhook registraties
De specificatie volgt best practices voor event-driven APIs en bevat duidelijke schema's voor alle event types en webhook management.