ObjectStackObjectStack

Plugin Rest Api

Plugin Rest Api protocol schemas

REST API Plugin Protocol

Defines the schema for REST API plugins that register Discovery, Metadata,

Data CRUD, Batch, and Permission routes with the HTTP Dispatcher.

This plugin type implements Phase 2 of the API Protocol implementation plan,

providing standardized REST endpoints with:

  • Request validation middleware using Zod schemas

  • Response envelope wrapping with BaseResponseSchema

  • Error handling using ApiErrorSchema

  • OpenAPI documentation auto-generation

Features:

  • Route registration for core API endpoints

  • Automatic schema-based validation

  • Standardized request/response envelopes

  • OpenAPI/Swagger documentation generation

Architecture Alignment:

  • Salesforce: REST API with metadata and data CRUD

  • Microsoft Dynamics: Web API with entity operations

  • Strapi: Auto-generated REST endpoints from schemas

@example Plugin Manifest


\{

"name": "rest_api",

"version": "1.0.0",

"type": "server",

"contributes": \{

"routes": [

\{

"prefix": "/api/v1/discovery",

"service": "metadata",

"methods": ["getDiscovery"],

"middleware": [

\{ "name": "response_envelope", "type": "transformation", "enabled": true \}

]

\},

\{

"prefix": "/api/v1/meta",

"service": "metadata",

"methods": ["getMetaTypes", "getMetaItems", "getMetaItem", "saveMetaItem"],

"middleware": [

\{ "name": "auth", "type": "authentication", "enabled": true \},

\{ "name": "request_validation", "type": "validation", "enabled": true \}

]

\},

\{

"prefix": "/api/v1/data",

"service": "data",

"methods": ["findData", "getData", "createData", "updateData", "deleteData"]

\}

]

\}

\}

Source: packages/spec/src/api/plugin-rest-api.zod.ts

TypeScript Usage

import { ErrorHandlingConfig, OpenApiGenerationConfig, RequestValidationConfig, ResponseEnvelopeConfig, RestApiEndpoint, RestApiPluginConfig, RestApiRouteCategory, RestApiRouteRegistration, ValidationMode } from '@objectstack/spec/api';
import type { ErrorHandlingConfig, OpenApiGenerationConfig, RequestValidationConfig, ResponseEnvelopeConfig, RestApiEndpoint, RestApiPluginConfig, RestApiRouteCategory, RestApiRouteRegistration, ValidationMode } from '@objectstack/spec/api';

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

ErrorHandlingConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable standardized error handling
includeStackTracebooleanInclude stack traces in error responses
logErrorsbooleanLog errors to system logger
exposeInternalErrorsbooleanExpose internal error details in responses
includeRequestIdbooleanInclude requestId in error responses
includeTimestampbooleanInclude timestamp in error responses
includeDocumentationbooleanInclude documentation URLs for errors
documentationBaseUrlstringoptionalBase URL for error documentation
customErrorMessagesRecord<string, string>optionalCustom error messages by error code
redactFieldsstring[]optionalField names to redact from error details

OpenApiGenerationConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable automatic OpenAPI documentation generation
versionEnum<'3.0.0' | '3.0.1' | '3.0.2' | '3.0.3' | '3.1.0'>OpenAPI specification version
titlestringAPI title
descriptionstringoptionalAPI description
apiVersionstringAPI version
outputPathstringURL path to serve OpenAPI JSON
uiPathstringURL path to serve documentation UI
uiFrameworkEnum<'swagger-ui' | 'redoc' | 'rapidoc' | 'elements'>Documentation UI framework
includeInternalbooleanInclude internal endpoints in documentation
generateSchemasbooleanAuto-generate schemas from Zod definitions
includeExamplesbooleanInclude request/response examples
serversObject[]optionalServer URLs for API
contactObjectoptionalAPI contact information
licenseObjectoptionalAPI license information
securitySchemesRecord<string, Object>optionalSecurity scheme definitions

RequestValidationConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable automatic request validation
modeEnum<'strict' | 'permissive' | 'strip'>How to handle validation errors
validateBodybooleanValidate request body against schema
validateQuerybooleanValidate query string parameters
validateParamsbooleanValidate URL path parameters
validateHeadersbooleanValidate request headers
includeFieldErrorsbooleanInclude field-level error details in response
errorPrefixstringoptionalCustom prefix for validation error messages
schemaRegistrystringoptionalSchema registry name to use for validation

ResponseEnvelopeConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable automatic response envelope wrapping
includeMetadatabooleanInclude meta object in responses
includeTimestampbooleanInclude timestamp in response metadata
includeRequestIdbooleanInclude requestId in response metadata
includeDurationbooleanInclude request duration in ms
includeTraceIdbooleanInclude distributed traceId
customMetadataRecord<string, any>optionalAdditional metadata fields to include
skipIfWrappedbooleanSkip wrapping if response already has success field

RestApiEndpoint

Properties

PropertyTypeRequiredDescription
methodEnum<'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS'>HTTP method for this endpoint
pathstringURL path pattern (e.g., /api/v1/data/:object/:id)
handlerstringProtocol method name or handler identifier
categoryEnum<'discovery' | 'metadata' | 'data' | 'batch' | 'permission' | 'analytics' | 'automation' | 'workflow' | 'ui' | 'realtime' | 'notification' | 'ai' | 'i18n'>Route category
publicbooleanIs publicly accessible without authentication
permissionsstring[]optionalRequired permissions (e.g., ["data.read", "object.account.read"])
summarystringoptionalShort description for OpenAPI
descriptionstringoptionalDetailed description for OpenAPI
tagsstring[]optionalOpenAPI tags for grouping
requestSchemastringoptionalRequest schema name (for validation)
responseSchemastringoptionalResponse schema name (for documentation)
timeoutintegeroptionalRequest timeout in milliseconds
rateLimitstringoptionalRate limit policy name
cacheablebooleanWhether response can be cached
cacheTtlintegeroptionalCache TTL in seconds

RestApiPluginConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable REST API plugin
basePathstringBase path for all API routes
versionstringAPI version identifier
routesObject[]Route registrations
validationObjectoptionalRequest validation configuration
responseEnvelopeObjectoptionalResponse envelope configuration
errorHandlingObjectoptionalError handling configuration
openApiObjectoptionalOpenAPI documentation configuration
globalMiddlewareObject[]optionalGlobal middleware stack
corsObjectoptionalCORS configuration
performanceObjectoptionalPerformance optimization settings

RestApiRouteCategory

Allowed Values

  • discovery
  • metadata
  • data
  • batch
  • permission
  • analytics
  • automation
  • workflow
  • ui
  • realtime
  • notification
  • ai
  • i18n

RestApiRouteRegistration

Properties

PropertyTypeRequiredDescription
prefixstringURL path prefix for this route group
servicestringCore service name (metadata, data, auth, etc.)
categoryEnum<'discovery' | 'metadata' | 'data' | 'batch' | 'permission' | 'analytics' | 'automation' | 'workflow' | 'ui' | 'realtime' | 'notification' | 'ai' | 'i18n'>Primary category for this route group
methodsstring[]optionalProtocol method names implemented
endpointsObject[]optionalEndpoint definitions
middlewareObject[]optionalMiddleware stack for this route group
authRequiredbooleanWhether authentication is required by default
documentationObjectoptionalDocumentation metadata for this route group

ValidationMode

Allowed Values

  • strict
  • permissive
  • strip

On this page