ObjectStackObjectStack

Documentation

Documentation protocol schemas

API Documentation & Testing Interface Protocol

Provides schemas for generating interactive API documentation and testing interfaces similar to Swagger UI, Postman, etc.

Features:

  • OpenAPI/Swagger specification generation
  • Interactive API testing playground
  • API versioning and changelog
  • Code generation templates
  • Mock server configuration

Architecture Alignment:

  • Swagger UI: Interactive API documentation
  • Postman: API testing collections
  • Redoc: Documentation rendering

@example Documentation Config

const docConfig: ApiDocumentationConfig = {
  enabled: true,
  title: 'ObjectStack API',
  version: '1.0.0',
  servers: [{ url: 'https://api.example.com', description: 'Production' }],
  ui: {
    type: 'swagger-ui',
    theme: 'light',
    enableTryItOut: true
  }
}

Source: packages/spec/src/api/documentation.zod.ts

TypeScript Usage

import { ApiChangelogEntrySchema, ApiDocumentationConfigSchema, ApiTestCollectionSchema, ApiTestRequestSchema, ApiTestingUiConfigSchema, ApiTestingUiType, CodeGenerationTemplateSchema, GeneratedApiDocumentationSchema, OpenApiSecuritySchemeSchema, OpenApiServerSchema, OpenApiSpecSchema } from '@objectstack/spec/api';
import type { ApiChangelogEntry, ApiDocumentationConfig, ApiTestCollection, ApiTestRequest, ApiTestingUiConfig, ApiTestingUiType, CodeGenerationTemplate, GeneratedApiDocumentation, OpenApiSecurityScheme, OpenApiServer, OpenApiSpec } from '@objectstack/spec/api';

// Validate data
const result = ApiChangelogEntrySchema.parse(data);

ApiChangelogEntry

Properties

PropertyTypeRequiredDescription
versionstringAPI version
datestringRelease date
changes{ added: string[]; changed: string[]; deprecated: string[]; removed: string[]; … }Version changes
migrationGuidestringoptionalMigration guide URL or text

ApiDocumentationConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable API documentation
titlestringDocumentation title
versionstringAPI version
descriptionstringoptionalAPI description
servers{ url: string; description?: string; variables?: Record<string, object> }[]API server URLs
ui{ type: Enum<'swagger-ui' | 'redoc' | 'rapidoc' | 'stoplight' | 'scalar' | 'graphiql' | 'postman' | 'custom'>; path: string; theme: Enum<'light' | 'dark' | 'auto'>; enableTryItOut: boolean; … }optionalTesting UI configuration
generateOpenApibooleanGenerate OpenAPI 3.0 specification
generateTestCollectionsbooleanGenerate API test collections
testCollections{ name: string; description?: string; variables: Record<string, any>; requests: object[]; … }[]Predefined test collections
changelog{ version: string; date: string; changes: object; migrationGuide?: string }[]API version changelog
codeTemplates{ language: string; name: string; template: string; variables?: string[] }[]Code generation templates
termsOfServicestringoptionalTerms of service URL
contact{ name?: string; url?: string; email?: string }optionalContact information
license{ name: string; url?: string }optionalAPI license
externalDocs{ description?: string; url: string }optionalExternal documentation link
securitySchemesRecord<string, { type: Enum<'apiKey' | 'http' | 'oauth2' | 'openIdConnect'>; scheme?: string; bearerFormat?: string; name?: string; … }>optionalSecurity scheme definitions
tags{ name: string; description?: string; externalDocs?: object }[]optionalGlobal tag definitions

ApiTestCollection

Properties

PropertyTypeRequiredDescription
namestringCollection name
descriptionstringoptionalCollection description
variablesRecord<string, any>Shared variables
requests{ name: string; description?: string; method: Enum<'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'>; url: string; … }[]Test requests in this collection
folders{ name: string; description?: string; requests: object[] }[]optionalRequest folders for organization

ApiTestRequest

Properties

PropertyTypeRequiredDescription
namestringTest request name
descriptionstringoptionalRequest description
methodEnum<'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'>HTTP method
urlstringRequest URL (can include variables)
headersRecord<string, string>Request headers
queryParamsRecord<string, string | number | boolean>Query parameters
bodyanyoptionalRequest body
variablesRecord<string, any>Template variables
expectedResponse{ statusCode: integer; body?: any }optionalExpected response for validation

ApiTestingUiConfig

Properties

PropertyTypeRequiredDescription
typeEnum<'swagger-ui' | 'redoc' | 'rapidoc' | 'stoplight' | 'scalar' | 'graphiql' | 'postman' | 'custom'>Testing UI implementation
pathstringURL path for documentation UI
themeEnum<'light' | 'dark' | 'auto'>UI color theme
enableTryItOutbooleanEnable interactive API testing
enableFilterbooleanEnable endpoint filtering
enableCorsbooleanEnable CORS for browser testing
defaultModelsExpandDepthintegerDefault expand depth for schemas (-1 = fully expand)
displayRequestDurationbooleanShow request duration
syntaxHighlightingbooleanEnable syntax highlighting
customCssUrlstringoptionalCustom CSS stylesheet URL
customJsUrlstringoptionalCustom JavaScript URL
layout{ showExtensions: boolean; showCommonExtensions: boolean; deepLinking: boolean; displayOperationId: boolean; … }optionalLayout configuration

ApiTestingUiType

Allowed Values

  • swagger-ui
  • redoc
  • rapidoc
  • stoplight
  • scalar
  • graphiql
  • postman
  • custom

CodeGenerationTemplate

Properties

PropertyTypeRequiredDescription
languagestringTarget language/framework (e.g., typescript, python, curl)
namestringTemplate name
templatestringCode template with placeholders
variablesstring[]optionalRequired template variables

GeneratedApiDocumentation

Properties

PropertyTypeRequiredDescription
openApiSpec{ openapi: string; info: object; servers: object[]; paths: Record<string, any>; … }optionalGenerated OpenAPI specification
testCollections{ name: string; description?: string; variables: Record<string, any>; requests: object[]; … }[]optionalGenerated test collections
markdownstringoptionalGenerated markdown documentation
htmlstringoptionalGenerated HTML documentation
generatedAtstringGeneration timestamp
sourceApisstring[]Source API IDs used for generation

OpenApiSecurityScheme

Properties

PropertyTypeRequiredDescription
typeEnum<'apiKey' | 'http' | 'oauth2' | 'openIdConnect'>Security type
schemestringoptionalHTTP auth scheme (bearer, basic, etc.)
bearerFormatstringoptionalBearer token format (e.g., JWT)
namestringoptionalAPI key parameter name
inEnum<'header' | 'query' | 'cookie'>optionalAPI key location
flows{ implicit?: any; password?: any; clientCredentials?: any; authorizationCode?: any }optionalOAuth2 flows
openIdConnectUrlstringoptionalOpenID Connect discovery URL
descriptionstringoptionalSecurity scheme description

OpenApiServer

Properties

PropertyTypeRequiredDescription
urlstringServer base URL
descriptionstringoptionalServer description
variablesRecord<string, { default: string; description?: string; enum?: string[] }>optionalURL template variables

OpenApiSpec

Properties

PropertyTypeRequiredDescription
openapistringOpenAPI specification version
info{ title: string; version: string; description?: string; termsOfService?: string; … }API metadata
servers{ url: string; description?: string; variables?: Record<string, object> }[]API servers
pathsRecord<string, any>API paths and operations
components{ schemas?: Record<string, any>; responses?: Record<string, any>; parameters?: Record<string, any>; examples?: Record<string, any>; … }optionalReusable components
securityRecord<string, string[]>[]optionalGlobal security requirements
tags{ name: string; description?: string; externalDocs?: object }[]optionalTag definitions
externalDocs{ description?: string; url: string }optionalExternal documentation

On this page