Software Architectural Pattern

JSON Schema for documenting a software architectural pattern, its use cases, components, and tradeoffs

Best PracticesDesign PatternsSoftware ArchitectureSystem DesignMicroservicesMVCCQRSEvent-Driven

Properties

Name Type Description
id string Unique identifier for the pattern
name string Name of the architectural pattern
category string High-level category of the architectural pattern
description string Detailed description of what the pattern is and how it works
aliases array Alternative names for this pattern
components array Key architectural components of this pattern
useCases array Common use cases and scenarios where this pattern applies
benefits array Advantages of using this pattern
tradeoffs array Disadvantages or challenges of this pattern
relatedPatterns array Names of related or complementary patterns
references array Authoritative references and documentation
View JSON Schema on GitHub

JSON Schema

architectural-pattern-schema.json Raw ↑
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://api-evangelist.github.io/software-design-architectural-patterns/json-schema/architectural-pattern-schema.json",
  "title": "Software Architectural Pattern",
  "description": "JSON Schema for documenting a software architectural pattern, its use cases, components, and tradeoffs",
  "type": "object",
  "required": ["name", "category", "description"],
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique identifier for the pattern"
    },
    "name": {
      "type": "string",
      "description": "Name of the architectural pattern"
    },
    "category": {
      "type": "string",
      "enum": [
        "Layered",
        "Microservices",
        "Event-Driven",
        "Service-Oriented",
        "CQRS",
        "Hexagonal",
        "Serverless",
        "MVC",
        "Pipe-and-Filter",
        "Space-Based",
        "Peer-to-Peer"
      ],
      "description": "High-level category of the architectural pattern"
    },
    "description": {
      "type": "string",
      "description": "Detailed description of what the pattern is and how it works"
    },
    "aliases": {
      "type": "array",
      "items": {"type": "string"},
      "description": "Alternative names for this pattern"
    },
    "components": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Component"
      },
      "description": "Key architectural components of this pattern"
    },
    "useCases": {
      "type": "array",
      "items": {"type": "string"},
      "description": "Common use cases and scenarios where this pattern applies"
    },
    "benefits": {
      "type": "array",
      "items": {"type": "string"},
      "description": "Advantages of using this pattern"
    },
    "tradeoffs": {
      "type": "array",
      "items": {"type": "string"},
      "description": "Disadvantages or challenges of this pattern"
    },
    "relatedPatterns": {
      "type": "array",
      "items": {"type": "string"},
      "description": "Names of related or complementary patterns"
    },
    "references": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Reference"
      },
      "description": "Authoritative references and documentation"
    }
  },
  "definitions": {
    "Component": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Component name"
        },
        "description": {
          "type": "string",
          "description": "Role of this component in the pattern"
        },
        "responsibilities": {
          "type": "array",
          "items": {"type": "string"},
          "description": "Key responsibilities of this component"
        }
      }
    },
    "Reference": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "Title of the reference"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL to the reference"
        },
        "author": {
          "type": "string",
          "description": "Author of the reference"
        }
      }
    }
  }
}