Examples
# Example with Reusable Components
# Demonstrates using $ref for DRY schema definitions
opendpi: "1.0.0"
info:
title: User Management Platform
version: "3.1.0"
description: User data and activity tracking
connections:
users_db:
type: postgresql
host: users.db.example.com:5432
variables:
database: users
schema: public
activity_stream:
type: kafka
host: kafka.example.com:9092
ports:
users:
description: User account data
connections:
- connection: "#/connections/users_db"
location: users
schema:
$ref: "#/components/schemas/User"
user_profiles:
description: Extended user profile information
connections:
- connection: "#/connections/users_db"
location: user_profiles
schema:
$ref: "#/components/schemas/UserProfile"
activity_log:
description: User activity events
connections:
- connection: "#/connections/activity_stream"
location: user-activity-v1
schema:
$ref: "#/components/schemas/ActivityEvent"
login_events:
description: User login/logout events
connections:
- connection: "#/connections/activity_stream"
location: user-auth-events
schema:
$ref: "#/components/schemas/AuthEvent"
components:
schemas:
# Reusable base schemas
Timestamp:
type: object
properties:
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Address:
type: object
properties:
street:
type: string
city:
type: string
state:
type: string
postal_code:
type: string
country:
type: string
pattern: "^[A-Z]{2}$"
# Main schemas that use components
User:
type: object
required:
- id
- email
- status
properties:
id:
type: string
format: uuid
email:
type: string
format: email
username:
type: string
minLength: 3
maxLength: 50
status:
type: string
enum:
- active
- inactive
- suspended
- deleted
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
UserProfile:
type: object
properties:
user_id:
type: string
format: uuid
first_name:
type: string
last_name:
type: string
phone:
type: string
avatar_url:
type: string
format: uri
billing_address:
$ref: "#/components/schemas/Address"
shipping_address:
$ref: "#/components/schemas/Address"
preferences:
type: object
properties:
language:
type: string
default: en
timezone:
type: string
default: UTC
notifications:
type: boolean
default: true
# Event schemas
BaseEvent:
type: object
required:
- event_id
- timestamp
properties:
event_id:
type: string
format: uuid
timestamp:
type: string
format: date-time
source:
type: string
correlation_id:
type: string
format: uuid
ActivityEvent:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- type: object
required:
- user_id
- action
properties:
user_id:
type: string
format: uuid
action:
type: string
resource_type:
type: string
resource_id:
type: string
metadata:
type: object
additionalProperties: true
AuthEvent:
allOf:
- $ref: "#/components/schemas/BaseEvent"
- type: object
required:
- user_id
- event_type
properties:
user_id:
type: string
format: uuid
event_type:
type: string
enum:
- login
- logout
- password_change
- mfa_enabled
- mfa_disabled
ip_address:
type: string
user_agent:
type: string
success:
type: boolean
failure_reason:
type: string