ObjectStackObjectStack

Registry

Registry protocol schemas

Unified API Registry Protocol

Provides a centralized registry for managing all API endpoints across different

API types (REST, GraphQL, OData, WebSocket, Auth, File, Plugin-registered).

This enables:

  • Unified API discovery and documentation (similar to Swagger/OpenAPI)

  • API testing interfaces

  • API governance and monitoring

  • Plugin API registration

  • Multi-protocol support

Architecture Alignment:

  • Kubernetes: Service Discovery & API Server

  • AWS API Gateway: Unified API Management

  • Kong Gateway: Plugin-based API Management

@example API Registry Entry


const apiEntry: ApiRegistryEntry = \{

id: 'customer_crud',

name: 'Customer CRUD API',

type: 'rest',

version: 'v1',

basePath: '/api/v1/data/customer',

endpoints: [...],

metadata: \{

owner: 'sales_team',

tags: ['customer', 'crm']

\}

\}

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

TypeScript Usage

import { ApiDiscoveryQuery, ApiDiscoveryResponse, ApiEndpointRegistration, ApiMetadata, ApiParameter, ApiProtocolType, ApiRegistry, ApiRegistryEntry, ApiResponse, ConflictResolutionStrategy, HttpStatusCode, ObjectQLReference, SchemaDefinition } from '@objectstack/spec/api';
import type { ApiDiscoveryQuery, ApiDiscoveryResponse, ApiEndpointRegistration, ApiMetadata, ApiParameter, ApiProtocolType, ApiRegistry, ApiRegistryEntry, ApiResponse, ConflictResolutionStrategy, HttpStatusCode, ObjectQLReference, SchemaDefinition } from '@objectstack/spec/api';

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

ApiDiscoveryQuery

Properties

PropertyTypeRequiredDescription
typeEnum<'rest' | 'graphql' | 'odata' | 'websocket' | 'file' | 'auth' | 'metadata' | 'plugin' | 'webhook' | 'rpc'>optionalFilter by API protocol type
tagsstring[]optionalFilter by tags (ANY match)
statusEnum<'active' | 'deprecated' | 'experimental' | 'beta'>optionalFilter by lifecycle status
pluginSourcestringoptionalFilter by plugin name
searchstringoptionalFull-text search in name/description
versionstringoptionalFilter by specific version

ApiDiscoveryResponse

Properties

PropertyTypeRequiredDescription
apisObject[]Matching API entries
totalintegerTotal matching APIs
filtersObjectoptionalApplied query filters

ApiEndpointRegistration

Properties

PropertyTypeRequiredDescription
idstringUnique endpoint identifier
methodEnum<'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS'>optionalHTTP method
pathstringURL path pattern
summarystringoptionalShort endpoint summary
descriptionstringoptionalDetailed endpoint description
operationIdstringoptionalUnique operation identifier
tagsstring[]Tags for categorization
parametersObject[]Endpoint parameters
requestBodyObjectoptionalRequest body specification
responsesObject[]Possible responses
rateLimitObjectoptionalEndpoint specific rate limiting
securityRecord<string, string[]>[]optionalSecurity requirements (e.g. [{"bearerAuth": []}])
requiredPermissionsstring[]Required RBAC permissions (e.g., "customer.read", "manage_users")
priorityintegerRoute priority for conflict resolution (0-1000, higher = more important)
protocolConfigRecord<string, any>optionalProtocol-specific configuration for custom protocols (gRPC, tRPC, etc.)
deprecatedbooleanWhether endpoint is deprecated
externalDocsObjectoptionalExternal documentation link

ApiMetadata

Properties

PropertyTypeRequiredDescription
ownerstringoptionalOwner team or person
statusEnum<'active' | 'deprecated' | 'experimental' | 'beta'>API lifecycle status
tagsstring[]Classification tags
pluginSourcestringoptionalSource plugin name
customRecord<string, any>optionalCustom metadata fields

ApiParameter

Properties

PropertyTypeRequiredDescription
namestringParameter name
inEnum<'path' | 'query' | 'header' | 'body' | 'cookie'>Parameter location
descriptionstringoptionalParameter description
requiredbooleanWhether parameter is required
schemaObject | ObjectParameter schema definition
exampleanyoptionalExample value

ApiProtocolType

Allowed Values

  • rest
  • graphql
  • odata
  • websocket
  • file
  • auth
  • metadata
  • plugin
  • webhook
  • rpc

ApiRegistry

Properties

PropertyTypeRequiredDescription
versionstringRegistry version
conflictResolutionEnum<'error' | 'priority' | 'first-wins' | 'last-wins'>Strategy for handling route conflicts
apisObject[]All registered APIs
totalApisintegerTotal number of registered APIs
totalEndpointsintegerTotal number of endpoints
byTypeRecord<string, Object[]>optionalAPIs grouped by protocol type
byStatusRecord<string, Object[]>optionalAPIs grouped by status
updatedAtstringoptionalLast registry update time

ApiRegistryEntry

Properties

PropertyTypeRequiredDescription
idstringUnique API identifier (snake_case)
namestringAPI display name
typeEnum<'rest' | 'graphql' | 'odata' | 'websocket' | 'file' | 'auth' | 'metadata' | 'plugin' | 'webhook' | 'rpc'>API protocol type
versionstringAPI version (e.g., v1, 2024-01)
basePathstringBase URL path for this API
descriptionstringoptionalAPI description
endpointsObject[]Registered endpoints
configRecord<string, any>optionalProtocol-specific configuration
metadataObjectoptionalAdditional metadata
termsOfServicestringoptionalTerms of service URL
contactObjectoptionalContact information
licenseObjectoptionalLicense information

ApiResponse

Properties

PropertyTypeRequiredDescription
statusCodeinteger | Enum<'2xx' | '3xx' | '4xx' | '5xx'>HTTP status code
descriptionstringResponse description
contentTypestringResponse content type
schemaany | ObjectoptionalResponse body schema
headersRecord<string, Object>optionalResponse headers
exampleanyoptionalExample response

ConflictResolutionStrategy

Allowed Values

  • error
  • priority
  • first-wins
  • last-wins

HttpStatusCode

Union Options

This schema accepts one of the following structures:

Option 1

Type: integer


Option 2

Allowed Values: 2xx, 3xx, 4xx, 5xx



ObjectQLReference

Properties

PropertyTypeRequiredDescription
objectIdstringObject name to reference
includeFieldsstring[]optionalInclude only these fields in the schema
excludeFieldsstring[]optionalExclude these fields from the schema
includeRelatedstring[]optionalInclude related objects via lookup fields

SchemaDefinition

Union Options

This schema accepts one of the following structures:

Option 1

Static JSON Schema definition

Type: any


Option 2

Dynamic ObjectQL reference

Properties

PropertyTypeRequiredDescription
$refObjectDynamic reference to ObjectQL object


On this page