JSON Schema ist ein offener Standard zur Beschreibung der Struktur von JSON-Daten. Er wird von Unternehmen wie Google, Microsoft und AWS verwendet, um Konfigurationsdateien, APIs und Datenmodelle zu validieren. FireSchema nutzt JSON Schema, um deine Firestore-Sammlungen zu beschreiben — und bietet dir eine leistungsstarke, standardisierte Möglichkeit, deine Datenbank zu dokumentieren. Erfahre, warum es die richtige Wahl ist.
Was ist JSON Schema?
JSON Schema definiert die Struktur von JSON-Dokumenten: welche Felder existieren, ihre Typen, welche erforderlich sind und welche Werte gültig sind. Es ist ein Standard (Draft 2020-12), der von Validatoren in jeder wichtigen Programmiersprache unterstützt wird.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name"]
}Dieses Schema besagt: Die Daten sind ein Objekt mit einem erforderlichen name (String) und einem optionalen age (nicht-negative Ganzzahl).
Grundstruktur für FireSchema
FireSchema umschließt JSON Schema in einem Sammlungs-Metadaten-Umschlag. Jede .schema.json-Datei hat diese Struktur:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"collection": "users",
"description": "Registered app users",
"schema": {
"type": "object",
"properties": {
"displayName": {
"type": "string",
"description": "User's full name"
}
}
}
}Felder auf oberster Ebene:
- -
$schema— Die JSON Schema-Version (immer 2020-12 verwenden) - -
collection— Der Name der Firestore-Sammlung - -
description— Eine für Menschen lesbare Beschreibung dieser Sammlung - -
documentCount— Optionale geschätzte Dokumentenanzahl - -
schema— Das JSON Schema, das jedes Dokument in dieser Sammlung beschreibt
Häufige Feldtypen
JSON Schema unterstützt alle Typen, die du für Firestore-Dokumente brauchst:
{
"schema": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Product title"
},
"price": {
"type": "number",
"description": "Price in USD",
"minimum": 0
},
"inStock": {
"type": "boolean",
"description": "Whether the product is available"
},
"tags": {
"type": "array",
"items": { "type": "string" },
"description": "Product tags for search"
},
"metadata": {
"type": "object",
"description": "Additional product metadata",
"properties": {
"createdBy": { "type": "string" },
"version": { "type": "integer" }
}
}
}
}
}Verfügbare Typen:
- -
string— Textwerte (Namen, E-Mails, IDs) - -
number— Dezimalzahlen (Preise, Punktzahlen) - -
integer— Ganzzahlen (Anzahlen, Versionen) - -
boolean— Wahr/Falsch-Werte (Flags, Schalter) - -
array— Listen von Werten (Tags, Einträge) - -
object— Verschachtelte Objekte (Adressen, Metadaten)
Firestore-spezifische Muster
Firestore hat spezifische Datentypen, die sich gut auf JSON Schema-Formate abbilden lassen:
{
"schema": {
"type": "object",
"properties": {
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Firestore Timestamp"
},
"location": {
"type": "object",
"description": "Firestore GeoPoint",
"properties": {
"latitude": { "type": "number", "minimum": -90, "maximum": 90 },
"longitude": { "type": "number", "minimum": -180, "maximum": 180 }
},
"required": ["latitude", "longitude"]
},
"authorRef": {
"type": "string",
"description": "Firestore DocumentReference to users collection",
"pattern": "^users/.+$"
}
}
}
}- -
format: "date-time"— Repräsentiert Firestore Timestamps - - Verschachteltes Objekt mit
latitude/longitude— Repräsentiert GeoPoints - -
patternmit Pfadformat — Repräsentiert DocumentReferences
Validierungsregeln
Füge Einschränkungen hinzu, um deine Schemas aussagekräftiger und nützlicher zu machen:
{
"schema": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Must be a valid email"
},
"age": {
"type": "integer",
"minimum": 13,
"maximum": 120,
"description": "User age (13+ required)"
},
"role": {
"type": "string",
"enum": ["admin", "editor", "viewer"],
"description": "One of the allowed roles"
},
"username": {
"type": "string",
"minLength": 3,
"maxLength": 20,
"pattern": "^[a-z0-9_]+$",
"description": "Lowercase alphanumeric, 3-20 chars"
}
}
}
}Häufige Einschränkungen:
- -
format— email, date-time, uri, uuid - -
enum— Liste erlaubter Werte - -
minimum/maximum— Zahlenbereiche - -
minLength/maxLength— Begrenzung der Stringlänge - -
pattern— Validierung mit regulärem Ausdruck
Vollständiges Beispiel: Orders-Sammlung
Hier ist ein vollständiges Schema für eine orders-Untersammlung innerhalb von users. Speichere es als schemas/users/orders.schema.json:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"collection": "orders",
"description": "User purchase orders",
"documentCount": 15000,
"schema": {
"type": "object",
"properties": {
"orderNumber": {
"type": "string",
"pattern": "^ORD-[0-9]{6}$",
"description": "Order ID in format ORD-000000"
},
"status": {
"type": "string",
"enum": ["pending", "confirmed", "shipped", "delivered", "cancelled"],
"description": "Current order status"
},
"items": {
"type": "array",
"description": "Ordered items",
"items": {
"type": "object",
"properties": {
"productId": { "type": "string" },
"name": { "type": "string" },
"quantity": { "type": "integer", "minimum": 1 },
"price": { "type": "number", "minimum": 0 }
},
"required": ["productId", "name", "quantity", "price"]
}
},
"total": {
"type": "number",
"minimum": 0,
"description": "Order total in USD"
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "When the order was placed"
}
},
"required": ["orderNumber", "status", "items", "total", "createdAt"]
}
}Dieses Schema dokumentiert den Sammlungsnamen, die geschätzte Dokumentenanzahl, jedes Feld mit seinem Typ und seiner Beschreibung sowie Validierungsregeln wie Enums, Patterns und Minimumwerte. Wenn es von FireSchema gerendert wird, entsteht interaktive, durchsuchbare Dokumentation.
Tools & Ressourcen
Diese Tools helfen dir beim Schreiben und Validieren von JSON Schema-Dateien:
- -JSON Schema Validator — Validiere deine Schemas online auf jsonschemavalidator.net
- -VS Code Extension — Installiere die JSON Schema-Erweiterung für Autovervollständigung und Inline-Validierung
- -KI-Generierung — Nutze die enthaltene LLM-Prompt-Vorlage, um Schemas aus natürlichsprachigen Beschreibungen zu generieren