ObjectStackObjectStack

Graphql

Graphql protocol schemas

GraphQL Protocol Support

GraphQL is a query language for APIs and a runtime for executing those queries.

It provides a complete and understandable description of the data in your API,

gives clients the power to ask for exactly what they need, and enables powerful

developer tools.

Overview

GraphQL provides:

  • Type-safe schema definition

  • Precise data fetching (no over/under-fetching)

  • Introspection and documentation

  • Real-time subscriptions

  • Batched queries with DataLoader

Use Cases

  1. Modern API Development
  • Mobile and web applications

  • Microservices federation

  • Real-time dashboards

  1. Data Aggregation
  • Multi-source data integration

  • Complex nested queries

  • Efficient data loading

  1. Developer Experience
  • Self-documenting API

  • Type safety and validation

  • GraphQL playground

@see https://graphql.org/

@see https://spec.graphql.org/

@example GraphQL Query


query GetCustomer($id: ID!) \{

customer(id: $id) \{

id

name

email

orders(limit: 10, status: "active") \{

id

total

items \{

product \{

name

price

\}

\}

\}

\}

\}

@example GraphQL Mutation


mutation CreateOrder($input: CreateOrderInput!) \{

createOrder(input: $input) \{

id

orderNumber

status

\}

\}

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

TypeScript Usage

import { FederationEntity, FederationEntityKey, FederationExternalField, FederationGateway, FederationProvides, FederationRequires, GraphQLConfig, GraphQLDataLoaderConfig, GraphQLDirectiveConfig, GraphQLDirectiveLocation, GraphQLMutationConfig, GraphQLPersistedQuery, GraphQLQueryComplexity, GraphQLQueryConfig, GraphQLQueryDepthLimit, GraphQLRateLimit, GraphQLResolverConfig, GraphQLScalarType, GraphQLSubscriptionConfig, GraphQLTypeConfig, SubgraphConfig } from '@objectstack/spec/api';
import type { FederationEntity, FederationEntityKey, FederationExternalField, FederationGateway, FederationProvides, FederationRequires, GraphQLConfig, GraphQLDataLoaderConfig, GraphQLDirectiveConfig, GraphQLDirectiveLocation, GraphQLMutationConfig, GraphQLPersistedQuery, GraphQLQueryComplexity, GraphQLQueryConfig, GraphQLQueryDepthLimit, GraphQLRateLimit, GraphQLResolverConfig, GraphQLScalarType, GraphQLSubscriptionConfig, GraphQLTypeConfig, SubgraphConfig } from '@objectstack/spec/api';

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

FederationEntity

Properties

PropertyTypeRequiredDescription
typeNamestringGraphQL type name for this entity
keysObject[]Entity key definitions
externalFieldsObject[]optionalFields owned by other subgraphs
requiresObject[]optionalRequired external fields for computed fields
providesObject[]optionalFields provided during resolution
ownerbooleanWhether this subgraph is the owner of this entity

FederationEntityKey

Properties

PropertyTypeRequiredDescription
fieldsstringSelection set of fields composing the entity key
resolvablebooleanWhether entities can be resolved from this subgraph

FederationExternalField

Properties

PropertyTypeRequiredDescription
fieldstringField name marked as external
ownerSubgraphstringoptionalSubgraph that owns this field

FederationGateway

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable GraphQL Federation gateway mode
versionEnum<'v1' | 'v2'>Federation specification version
subgraphsObject[]Subgraph configurations
serviceDiscoveryObjectoptionalService discovery configuration
queryPlanningObjectoptionalQuery planning configuration
compositionObjectoptionalSchema composition configuration
errorHandlingObjectoptionalError handling configuration

FederationProvides

Properties

PropertyTypeRequiredDescription
fieldstringField that provides additional entity fields
fieldsstringSelection set of provided fields (e.g., "name price")

FederationRequires

Properties

PropertyTypeRequiredDescription
fieldstringField with the requirement
fieldsstringSelection set of required fields (e.g., "price weight")

GraphQLConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable GraphQL API
pathstringGraphQL endpoint path
playgroundObjectoptionalGraphQL Playground configuration
schemaObjectoptionalSchema generation configuration
dataLoadersObject[]optionalDataLoader configurations
securityObjectoptionalSecurity configuration
federationObjectoptionalGraphQL Federation gateway configuration

GraphQLDataLoaderConfig

Properties

PropertyTypeRequiredDescription
namestringDataLoader name
sourcestringSource object or datasource
batchFunctionObjectBatch function configuration
cacheObjectoptionalDataLoader caching
optionsObjectoptionalDataLoader options

GraphQLDirectiveConfig

Properties

PropertyTypeRequiredDescription
namestringDirective name (camelCase)
descriptionstringoptionalDirective description
locationsEnum<'QUERY' | 'MUTATION' | 'SUBSCRIPTION' | 'FIELD' | 'FRAGMENT_DEFINITION' | 'FRAGMENT_SPREAD' | 'INLINE_FRAGMENT' | 'VARIABLE_DEFINITION' | 'SCHEMA' | 'SCALAR' | 'OBJECT' | 'FIELD_DEFINITION' | 'ARGUMENT_DEFINITION' | 'INTERFACE' | 'UNION' | 'ENUM' | 'ENUM_VALUE' | 'INPUT_OBJECT' | 'INPUT_FIELD_DEFINITION'>[]Directive locations
argsRecord<string, Object>optionalDirective arguments
repeatablebooleanCan be applied multiple times
implementationObjectoptionalDirective implementation

GraphQLDirectiveLocation

Allowed Values

  • QUERY
  • MUTATION
  • SUBSCRIPTION
  • FIELD
  • FRAGMENT_DEFINITION
  • FRAGMENT_SPREAD
  • INLINE_FRAGMENT
  • VARIABLE_DEFINITION
  • SCHEMA
  • SCALAR
  • OBJECT
  • FIELD_DEFINITION
  • ARGUMENT_DEFINITION
  • INTERFACE
  • UNION
  • ENUM
  • ENUM_VALUE
  • INPUT_OBJECT
  • INPUT_FIELD_DEFINITION

GraphQLMutationConfig

Properties

PropertyTypeRequiredDescription
namestringMutation field name (camelCase recommended)
objectstringSource ObjectQL object name
typeEnum<'create' | 'update' | 'delete' | 'upsert' | 'custom'>Mutation type
descriptionstringoptionalMutation description
inputObjectoptionalInput configuration
outputObjectoptionalOutput configuration
transactionObjectoptionalTransaction configuration
authRequiredbooleanRequire authentication
permissionsstring[]optionalRequired permissions
hooksObjectoptionalLifecycle hooks

GraphQLPersistedQuery

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable persisted queries
modeEnum<'optional' | 'required'>Persisted query mode (optional: allow both, required: only persisted)
storeObjectoptionalQuery store configuration
apqObjectoptionalAutomatic Persisted Queries configuration
allowlistObjectoptionalQuery allow list configuration
securityObjectoptionalSecurity configuration

GraphQLQueryComplexity

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable query complexity limiting
maxComplexityintegerMaximum query complexity
defaultFieldComplexityintegerDefault complexity per field
fieldComplexityRecord<string, integer | Object>optionalPer-field complexity configuration
listMultipliernumberMultiplier for list fields
onComplexityExceededEnum<'reject' | 'log' | 'warn'>Action when complexity exceeded
errorMessagestringoptionalCustom error message for complexity violations

GraphQLQueryConfig

Properties

PropertyTypeRequiredDescription
namestringQuery field name (camelCase recommended)
objectstringSource ObjectQL object name
typeEnum<'get' | 'list' | 'search'>Query type
descriptionstringoptionalQuery description
argsRecord<string, Object>optionalQuery arguments
filteringObjectoptionalFiltering capabilities
sortingObjectoptionalSorting capabilities
paginationObjectoptionalPagination configuration
fieldsObjectoptionalField selection configuration
authRequiredbooleanRequire authentication
permissionsstring[]optionalRequired permissions
cacheObjectoptionalQuery caching

GraphQLQueryDepthLimit

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable query depth limiting
maxDepthintegerMaximum query depth
ignoreFieldsstring[]optionalFields excluded from depth calculation
onDepthExceededEnum<'reject' | 'log' | 'warn'>Action when depth exceeded
errorMessagestringoptionalCustom error message for depth violations

GraphQLRateLimit

Properties

PropertyTypeRequiredDescription
enabledbooleanEnable rate limiting
strategyEnum<'token_bucket' | 'fixed_window' | 'sliding_window' | 'cost_based'>Rate limiting strategy
globalObjectoptionalGlobal rate limits
perUserObjectoptionalPer-user rate limits
costBasedObjectoptionalCost-based rate limiting
operationsRecord<string, Object>optionalPer-operation rate limits
onLimitExceededEnum<'reject' | 'queue' | 'log'>Action when rate limit exceeded
errorMessagestringoptionalCustom error message for rate limit violations
includeHeadersbooleanInclude rate limit headers in response

GraphQLResolverConfig

Properties

PropertyTypeRequiredDescription
pathstringResolver path (Type.field)
typeEnum<'datasource' | 'computed' | 'script' | 'proxy'>Resolver implementation type
implementationObjectoptionalImplementation configuration
cacheObjectoptionalResolver caching

GraphQLScalarType

Allowed Values

  • ID
  • String
  • Int
  • Float
  • Boolean
  • DateTime
  • Date
  • Time
  • JSON
  • JSONObject
  • Upload
  • URL
  • Email
  • PhoneNumber
  • Currency
  • Decimal
  • BigInt
  • Long
  • UUID
  • Base64
  • Void

GraphQLSubscriptionConfig

Properties

PropertyTypeRequiredDescription
namestringSubscription field name (camelCase recommended)
objectstringSource ObjectQL object name
eventsEnum<'created' | 'updated' | 'deleted' | 'custom'>[]Events to subscribe to
descriptionstringoptionalSubscription description
filterObjectoptionalSubscription filtering
payloadObjectoptionalPayload configuration
authRequiredbooleanRequire authentication
permissionsstring[]optionalRequired permissions
rateLimitObjectoptionalSubscription rate limiting

GraphQLTypeConfig

Properties

PropertyTypeRequiredDescription
namestringGraphQL type name (PascalCase recommended)
objectstringSource ObjectQL object name
descriptionstringoptionalType description
fieldsObjectoptionalField configuration
interfacesstring[]optionalGraphQL interface names
isInterfacebooleanDefine as GraphQL interface
directivesObject[]optionalGraphQL directives

SubgraphConfig

Properties

PropertyTypeRequiredDescription
namestringUnique subgraph identifier
urlstringSubgraph endpoint URL
schemaSourceEnum<'introspection' | 'file' | 'registry'>How to obtain the subgraph schema
schemaPathstringoptionalPath to schema file (SDL format)
entitiesObject[]optionalEntity definitions for this subgraph
healthCheckObjectoptionalSubgraph health check configuration
forwardHeadersstring[]optionalHTTP headers to forward to this subgraph

On this page