Schema Stitching · Schema

Schema Stitching Configuration

JSON Schema for configuring a GraphQL schema stitching gateway, defining subschemas, type merging, and field delegation.

API CompositionAPI GatewayFederationGraphQLMicroservicesSchema StitchingType Merging

Properties

Name Type Description
subschemas array Array of subschemas to stitch together into a unified gateway schema.
typeDefs string Additional GraphQL type definitions to extend the stitched schema with extra fields or types.
resolvers object Additional resolver functions for types and fields added via typeDefs.
mergeTypes boolean Whether to automatically merge types with the same name across subschemas.
View JSON Schema on GitHub

JSON Schema

schema-stitching-config-schema.json Raw ↑
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://schema-stitching.dev/schema-stitching-config-schema.json",
  "title": "Schema Stitching Configuration",
  "description": "JSON Schema for configuring a GraphQL schema stitching gateway, defining subschemas, type merging, and field delegation.",
  "type": "object",
  "properties": {
    "subschemas": {
      "type": "array",
      "description": "Array of subschemas to stitch together into a unified gateway schema.",
      "items": {
        "$ref": "#/definitions/SubschemaConfig"
      }
    },
    "typeDefs": {
      "type": "string",
      "description": "Additional GraphQL type definitions to extend the stitched schema with extra fields or types."
    },
    "resolvers": {
      "type": "object",
      "description": "Additional resolver functions for types and fields added via typeDefs.",
      "additionalProperties": true
    },
    "mergeTypes": {
      "type": "boolean",
      "default": true,
      "description": "Whether to automatically merge types with the same name across subschemas."
    }
  },
  "definitions": {
    "SubschemaConfig": {
      "type": "object",
      "required": ["schema"],
      "properties": {
        "schema": {
          "type": "string",
          "description": "The GraphQL schema SDL string or reference to a remote schema."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the remote GraphQL service endpoint."
        },
        "batch": {
          "type": "boolean",
          "default": false,
          "description": "Whether to batch queries to this subschema using DataLoader-style batching."
        },
        "merge": {
          "type": "object",
          "description": "Type merging configuration for this subschema.",
          "additionalProperties": {
            "$ref": "#/definitions/MergeTypeConfig"
          }
        },
        "transforms": {
          "type": "array",
          "description": "Schema transforms to apply to this subschema before stitching.",
          "items": {
            "$ref": "#/definitions/SchemaTransform"
          }
        },
        "executor": {
          "type": "string",
          "description": "Custom executor function name for this subschema."
        }
      }
    },
    "MergeTypeConfig": {
      "type": "object",
      "properties": {
        "selectionSet": {
          "type": "string",
          "description": "GraphQL selection set for fetching the key fields required to merge this type.",
          "example": "{ id }"
        },
        "fieldName": {
          "type": "string",
          "description": "The query field name used to fetch a single merged type by key."
        },
        "argsFromKeys": {
          "type": "string",
          "description": "Function expression mapping key values to query arguments."
        },
        "key": {
          "type": "string",
          "description": "Function expression extracting the merge key from a type object."
        },
        "dataLoaderOptions": {
          "type": "object",
          "description": "DataLoader configuration for batched type merging.",
          "properties": {
            "maxBatchSize": {
              "type": "integer",
              "description": "Maximum number of keys per batch request."
            }
          }
        }
      }
    },
    "SchemaTransform": {
      "type": "object",
      "description": "A schema transformation to apply to a subschema.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "FilterRootFields",
            "FilterObjectFields",
            "RenameTypes",
            "RenameRootFields",
            "RenameObjectFields",
            "WrapQuery",
            "HoistField",
            "PruneSchema"
          ],
          "description": "The type of transformation to apply."
        },
        "config": {
          "type": "object",
          "description": "Configuration specific to the transform type.",
          "additionalProperties": true
        }
      }
    },
    "StitchingDirectivesConfig": {
      "type": "object",
      "description": "Configuration for stitching directives SDL approach.",
      "properties": {
        "keyDirective": {
          "type": "string",
          "default": "key",
          "description": "Name of the directive used to specify merge keys."
        },
        "mergeDirective": {
          "type": "string",
          "default": "merge",
          "description": "Name of the directive used to configure type merging."
        },
        "computedDirective": {
          "type": "string",
          "default": "computed",
          "description": "Name of the directive used to specify computed fields."
        }
      }
    }
  }
}