design-serialization-schema
정보
이 스킬은 개발자가 JSON Schema, Protocol Buffers 또는 Apache Avro를 사용하여 직렬화 스키마를 설계하는 데 도움을 줍니다. 이 스킬은 견고한 진화 전략과 하위 호환성을 갖춘 버전 관리된 장기 데이터 형식 생성에 중점을 둡니다. 새로운 API 계약을 정의하거나 검증 규칙을 유지하면서 필드를 추가하기 위해 기존 스키마를 수정할 때 사용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/design-serialization-schemaClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
name: design-serialization-schema description: > Serialisierungsschemata mit JSON Schema, Protocol-Buffer-Definitionen oder Apache Avro entwerfen. Umfasst Schema-Versionierung, Rueckwaertskompatibilitaet, Validierungsregeln und Evolutionsstrategien fuer langlebige Datenformate. license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: data-serialization complexity: intermediate language: multi tags: json-schema, protobuf, avro, schema-evolution, versioning, compatibility locale: de source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
Serialisierungsschema entwerfen
Gut versionierte Serialisierungsschemata erstellen, die sich elegant weiterentwickeln, ohne Konsumenten zu brechen.
Wann verwenden
- Einen neuen API-Vertrag oder ein Datenaustauschformat definieren
- Felder zu einem bestehenden Schema hinzufuegen, ohne Konsumenten zu brechen
- Zwischen Schema-Versionen migrieren
- Zwischen Schema-Systemen waehlen (JSON Schema, Protobuf, Avro)
- Datenvalidierungsregeln fuer automatisierte Durchsetzung dokumentieren
Eingaben
- Erforderlich: Datenmodell (Entitaetsbeziehungen, Feldtypen, Beschraenkungen)
- Erforderlich: Kompatibilitaetsanforderungen (wer konsumiert diese Daten, wie lange muessen alte Formate lesbar sein)
- Optional: Bestehendes Schema zur Weiterentwicklung
- Optional: Performance-Anforderungen (Validierungsgeschwindigkeit, Schema-Registry-Integration)
- Optional: Zielserialisierungsformat (JSON, binaer, spaltenbasiert)
Vorgehensweise
Schritt 1: Ein Schema-System waehlen
| System | Format | Staerken | Am besten fuer |
|---|---|---|---|
| JSON Schema | JSON | Breit unterstuetzt, flexible Validierung | REST-APIs, Konfigvalidierung |
| Protocol Buffers | Binaer | Kompakt, schnell, starke Typisierung, eingebaute Evolution | gRPC, Microservices |
| Apache Avro | Binaer/JSON | Schema in Daten, hervorragende Evolutionsunterstuetzung | Kafka, Datenpipelines |
| XML Schema (XSD) | XML | Umfassende Typisierung, Namespace-Unterstuetzung | Enterprise/Legacy SOAP |
| TypeBox/Zod | TypeScript | Typinferenz, Laufzeitvalidierung | TypeScript-APIs |
Erwartet: Schema-System basierend auf Oekosystem, Performance-Beduerfnissen und Evolutionsanforderungen ausgewaehlt. Bei Fehler: Im Zweifelsfall mit JSON Schema beginnen -- es hat die breiteste Werkzeugunterstuetzung und kann auf bestehende JSON-APIs aufgesetzt werden.
Schritt 2: Das Kernschema entwerfen
JSON-Schema-Beispiel:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/measurement/v1",
"title": "Measurement",
"description": "Eine Sensormessung",
"type": "object",
"required": ["sensor_id", "value", "unit", "timestamp"],
"properties": {
"sensor_id": {
"type": "string",
"pattern": "^[a-z]+-[0-9]+$",
"description": "Eindeutige Sensorkennung (Kleinbuchstaben-Ziffern-Format)"
},
"value": {
"type": "number",
"description": "Messwert"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit", "kelvin", "percent", "ppm"],
"description": "Masseinheit"
},
"timestamp": {
"type": "string",
"format": "date-time",
"description": "ISO 8601 Zeitstempel mit Zeitzone"
},
"metadata": {
"type": "object",
"additionalProperties": true,
"description": "Optionale Schluessel-Wert-Metadaten"
}
},
"additionalProperties": false
}
Protocol-Buffers-Beispiel:
syntax = "proto3";
package sensors.v1;
import "google/protobuf/timestamp.proto";
message Measurement {
string sensor_id = 1;
double value = 2;
Unit unit = 3;
google.protobuf.Timestamp timestamp = 4;
map<string, string> metadata = 5;
}
enum Unit {
UNIT_UNSPECIFIED = 0;
UNIT_CELSIUS = 1;
UNIT_FAHRENHEIT = 2;
UNIT_KELVIN = 3;
UNIT_PERCENT = 4;
UNIT_PPM = 5;
}
Erwartet: Schema ist selbstdokumentierend mit Beschreibungen, Beschraenkungen und klaren Typdefinitionen.
Bei Fehler: Falls das Datenmodell noch nicht stabil ist, das Schema als draft markieren und die Veroeffentlichung in einer Registry vermeiden.
Schritt 3: Schema-Evolution planen
Kompatibilitaetsregeln:
| Aenderung | Rueckwaerts-kompatibel? | Vorwaerts-kompatibel? | Sicher? |
|---|---|---|---|
| Optionales Feld hinzufuegen | Ja | Ja | Ja |
| Pflichtfeld hinzufuegen | Nein | Ja | Nein (bricht bestehende Konsumenten) |
| Optionales Feld entfernen | Ja | Nein | Vorsicht (Produzenten senden moeglicherweise noch) |
| Pflichtfeld entfernen | Ja | Nein | Vorsicht |
| Feld umbenennen | Nein | Nein | Nein (Alias + Deprecation verwenden) |
| Feldtyp aendern | Nein | Nein | Nein (neues Feld hinzufuegen, altes deprecaten) |
| Enum-Wert hinzufuegen | Ja (wenn Konsumenten unbekannte ignorieren) | Nein | Implementierungsabhaengig |
| Enum-Wert entfernen | Nein | Ja | Nein |
Sichere Evolutionsstrategie:
- Nur optionale Felder hinzufuegen mit sinnvollen Standardwerten
- Niemals entfernen oder umbenennen -- stattdessen deprecaten
- Schema versionieren im Bezeichner (
v1,v2) - Schema-Registry verwenden fuer Binaerformate (Confluent Schema Registry fuer Avro/Protobuf)
Erwartet: Evolutionsplan dokumentiert: welche Aenderungen sicher sind, welche neue Versionen erfordern. Bei Fehler: Falls eine brechende Aenderung unvermeidlich ist, das Schema versionieren (v1 -> v2) und parallele Unterstuetzung waehrend der Migration aufrechterhalten.
Schritt 4: Schema-Validierung implementieren
# JSON-Schema-Validierung (Python)
from jsonschema import validate, ValidationError
import json
schema = json.load(open("measurement_v1.json"))
def validate_measurement(data: dict) -> list[str]:
"""Messung gegen das Schema validieren. Gibt Liste von Fehlern zurueck."""
errors = []
try:
validate(instance=data, schema=schema)
except ValidationError as e:
errors.append(f"{e.json_path}: {e.message}")
return errors
# Verwendung
errors = validate_measurement({"sensor_id": "s-01", "value": "not_a_number"})
# -> ["$.value: 'not_a_number' is not of type 'number'"]
// TypeScript mit Zod (Laufzeit + Kompilierzeit)
import { z } from 'zod';
const MeasurementSchema = z.object({
sensor_id: z.string().regex(/^[a-z]+-[0-9]+$/),
value: z.number(),
unit: z.enum(['celsius', 'fahrenheit', 'kelvin', 'percent', 'ppm']),
timestamp: z.string().datetime(),
metadata: z.record(z.string()).optional(),
});
type Measurement = z.infer<typeof MeasurementSchema>;
// Validierung
const result = MeasurementSchema.safeParse(inputData);
if (!result.success) {
console.error(result.error.issues);
}
Erwartet: Validierung laeuft auf allen eingehenden Daten an Systemgrenzen (API-Endpunkte, Dateieinlesung). Bei Fehler: Validierungsfehler mit vollstaendiger Nutzlast (sensible Felder schwaeraen) fuer Debugging protokollieren.
Schritt 5: Schema dokumentieren
Eine Schema-Dokumentationsseite erstellen mit Uebersicht, Feldbeschreibungen, Aenderungsprotokoll und Kompatibilitaetsrichtlinie.
Erwartet: Dokumentation ist automatisch generiert oder bleibt mit der Schema-Definition synchron. Bei Fehler: Falls Dokumentation vom Schema abweicht, einen CI-Check hinzufuegen, der die Dokumentation gegen die Schema-Quelle validiert.
Validierung
- Schema verwendet ein dem Anwendungsfall angemessenes System (JSON Schema, Protobuf, Avro)
- Alle Felder haben Typen, Beschreibungen und Beschraenkungen
- Pflicht- vs. optionale Felder sind explizit definiert
- Evolutionsstrategie dokumentiert (sichere Aenderungen, Versionierungsrichtlinie)
- Validierung an Systemgrenzen implementiert
- Schema ist mit einem Aenderungsprotokoll versioniert
- Roundtrip-Test: serialisieren -> deserialisieren -> vergleichen bestaetigt keinen Datenverlust
Haeufige Fehler
- Zu fruehes Ueberbeschraenken: Strikte Validierung auf einem neuen Schema blockiert Iteration. Permissiv starten (
additionalProperties: true), spaeter verschaerfen. - Keine Standardwerte: Hinzufuegen eines Pflichtfelds ohne Standard bricht alle bestehenden Daten. Immer Standards fuer neue Felder bereitstellen.
- Null ignorieren: Viele Schemata behandeln null/fehlende Felder nicht klar. Explizit sein ueber nullable vs. optional.
- Version in der Nutzlast, nicht der URL: Fuer langlebige Daten (Speicherung, Events) die Schema-Version in die Daten selbst einbetten, nicht nur in die Endpunkt-URL.
- Enum-Vollstaendigkeit: Hinzufuegen eines neuen Enum-Werts kann Konsumenten zum Absturz bringen, die erschoepfende Switch-Anweisungen verwenden. Dokumentieren, dass unbekannte Werte graceful behandelt werden sollten.
Verwandte Skills
serialize-data-formats-- Formatauswahl und Kodierungs-/Dekodierungsimplementierungimplement-pharma-serialisation-- Pharmazeutische Serialisierung (regulatorische Schemata)write-validation-documentation-- Validierungsdokumentation fuer regulierte Schemata
GitHub 저장소
연관 스킬
executing-plans
디자인executing-plans 스킬은 검토 체크포인트가 포함된 통제된 배치로 실행할 완전한 구현 계획이 있을 때 사용합니다. 이 스킬은 계획을 불러와 비판적으로 검토한 후, 소규모 배치(기본값 3개 작업)로 작업을 실행하면서 각 배치 사이에 진행 상황을 아키텍트 검토를 위해 보고합니다. 이를 통해 내재된 품질 관리 체크포인트를 갖춘 체계적인 구현이 보장됩니다.
requesting-code-review
디자인이 스킬은 코드 변경 사항을 요구 사항에 따라 분석하기 위해 코드 리뷰어 하위 에이전트를 호출합니다. 작업 완료 후, 주요 기능 구현 후, 또는 메인 브랜치에 병합하기 전에 사용해야 합니다. 이 리뷰는 현재 구현체와 원래 계획을 비교하여 문제를 조기에 발견하는 데 도움이 됩니다.
connect-mcp-server
디자인이 스킬은 개발자들이 HTTP, stdio 또는 SSE 전송 방식을 통해 MCP 서버를 Claude Code에 연결하는 포괄적인 가이드를 제공합니다. GitHub, Notion 및 사용자 정의 API와 같은 외부 서비스를 통합하기 위한 설치, 구성, 인증 및 보안을 다룹니다. MCP 통합 설정, 외부 도구 구성 또는 Claude의 모델 컨텍스트 프로토콜 작업 시 활용하세요.
web-cli-teleport
디자인이 스킬은 작업 분석을 기반으로 개발자가 Claude Code 웹 인터페이스와 CLI 인터페이스 중 선택할 수 있도록 돕고, 두 환경 간 원활한 세션 텔레포트를 가능하게 합니다. 웹, CLI 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.
