MCP HubMCP Hub
스킬 목록으로 돌아가기

design-serialization-schema

pjt222
업데이트됨 2 days ago
2 조회
17
2
17
GitHub에서 보기
디자인wordapiautomationdesign

정보

이 스킬은 개발자가 JSON 스키마, Protocol Buffers 또는 Apache Avro를 사용하여 직렬화 스키마를 설계하는 데 도움을 줍니다. 스키마 버전 관리, 하위 호환성, 검증 규칙, 장기간 유지되는 데이터 형식의 진화 전략을 다룹니다. 새로운 API 계약을 정의하거나, 기존 스키마를 소비자에게 영향을 주지 않고 확장하거나, 스키마 버전 간 마이그레이션을 수행할 때 활용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/design-serialization-schema

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서


name: design-serialization-schema description: > Disenar esquemas de serializacion usando JSON Schema, definiciones de Protocol Buffer o Apache Avro. Cubre versionado de esquemas, compatibilidad hacia atras, reglas de validacion y estrategias de evolucion para formatos de datos de larga duracion. Usar al definir un nuevo contrato de API o formato de intercambio de datos, agregar campos a un esquema existente sin romper consumidores, migrar entre versiones de esquema, elegir entre sistemas de esquema, o documentar reglas de validacion de datos para aplicacion automatizada. 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: es source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16

Disenar Esquema de Serializacion

Crear esquemas de serializacion bien versionados que evolucionan elegantemente sin romper consumidores.

Cuando Usar

  • Definir un nuevo contrato de API o formato de intercambio de datos
  • Agregar campos a un esquema existente sin romper consumidores
  • Migrar entre versiones de esquema
  • Elegir entre sistemas de esquema (JSON Schema, Protobuf, Avro)
  • Documentar reglas de validacion de datos para aplicacion automatizada

Entradas

  • Requerido: Modelo de datos (relaciones entre entidades, tipos de campos, restricciones)
  • Requerido: Requisitos de compatibilidad (quien consume estos datos, cuanto tiempo deben ser legibles los formatos antiguos)
  • Opcional: Esquema existente a evolucionar
  • Opcional: Requisitos de rendimiento (velocidad de validacion, integracion con registro de esquemas)
  • Opcional: Formato de serializacion objetivo (JSON, binario, columnar)

Procedimiento

Paso 1: Elegir un Sistema de Esquema

SistemaFormatoFortalezasMejor para
JSON SchemaJSONAmpliamente soportado, validacion flexibleAPIs REST, validacion de config
Protocol BuffersBinarioCompacto, rapido, tipado fuerte, evolucion integradagRPC, microservicios
Apache AvroBinario/JSONEsquema en datos, excelente soporte de evolucionKafka, pipelines de datos
XML Schema (XSD)XMLTipado completo, soporte de namespacesEmpresarial/legado SOAP
TypeBox/ZodTypeScriptInferencia de tipos, validacion en runtimeAPIs TypeScript

Esperado: Sistema de esquema seleccionado basado en ecosistema, necesidades de rendimiento y requisitos de evolucion. En caso de fallo: Si hay incertidumbre, comenzar con JSON Schema -- tiene el soporte de herramientas mas amplio y puede agregarse sobre APIs JSON existentes.

Paso 2: Disenar el Esquema Central

Ejemplo de JSON Schema:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/schemas/measurement/v1",
  "title": "Measurement",
  "description": "A sensor measurement reading",
  "type": "object",
  "required": ["sensor_id", "value", "unit", "timestamp"],
  "properties": {
    "sensor_id": {
      "type": "string",
      "pattern": "^[a-z]+-[0-9]+$",
      "description": "Unique sensor identifier (lowercase-digits format)"
    },
    "value": {
      "type": "number",
      "description": "Measured value"
    },
    "unit": {
      "type": "string",
      "enum": ["celsius", "fahrenheit", "kelvin", "percent", "ppm"],
      "description": "Unit of measurement"
    },
    "timestamp": {
      "type": "string",
      "format": "date-time",
      "description": "ISO 8601 timestamp with timezone"
    },
    "metadata": {
      "type": "object",
      "additionalProperties": true,
      "description": "Optional key-value metadata"
    }
  },
  "additionalProperties": false
}

Ejemplo de Protocol Buffers:

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;
}

Esperado: Esquema auto-documentado con descripciones, restricciones y definiciones claras de tipos. En caso de fallo: Si el modelo de datos aun no es estable, marcar el esquema como draft y evitar publicarlo en un registro.

Paso 3: Planificar la Evolucion del Esquema

Reglas de compatibilidad:

CambioCompatible hacia atras?Compatible hacia adelante?Seguro?
Agregar campo opcionalSiSiSi
Agregar campo requeridoNoSiNo (rompe consumidores existentes)
Eliminar campo opcionalSiNoCon cuidado (productores aun pueden enviar)
Eliminar campo requeridoSiNoCon cuidado
Renombrar campoNoNoNo (usar alias + deprecacion)
Cambiar tipo de campoNoNoNo (agregar nuevo campo, deprecar antiguo)
Agregar valor enumSi (si consumidores ignoran desconocidos)NoDepende de la implementacion
Eliminar valor enumNoSiNo

Estrategia de evolucion segura:

  1. Solo agregar campos opcionales con valores predeterminados razonables
  2. Nunca eliminar ni renombrar -- deprecar en su lugar
  3. Versionar el esquema en el identificador (v1, v2)
  4. Usar un registro de esquemas para formatos binarios (Confluent Schema Registry para Avro/Protobuf)

Esperado: Plan de evolucion documentado: que cambios son seguros, cuales requieren nuevas versiones. En caso de fallo: Si un cambio incompatible es inevitable, versionar el esquema (v1 -> v2) y mantener soporte paralelo durante la migracion.

Paso 4: Implementar Validacion de Esquema

# JSON Schema validation (Python)
from jsonschema import validate, ValidationError
import json

schema = json.load(open("measurement_v1.json"))

def validate_measurement(data: dict) -> list[str]:
    """Validate a measurement against the schema. Returns list of errors."""
    errors = []
    try:
        validate(instance=data, schema=schema)
    except ValidationError as e:
        errors.append(f"{e.json_path}: {e.message}")
    return errors

# Usage
errors = validate_measurement({"sensor_id": "s-01", "value": "not_a_number"})
# -> ["$.value: 'not_a_number' is not of type 'number'"]

Esperado: La validacion se ejecuta en todos los datos entrantes en los limites del sistema (endpoints API, ingestion de archivos). En caso de fallo: Registrar errores de validacion con la carga completa (redactando campos sensibles) para depuracion.

Paso 5: Documentar el Esquema

Crear una pagina de documentacion del esquema con: resumen, tabla de campos (campo, tipo, requerido, descripcion, restricciones), registro de cambios (version, fecha, cambios) y politica de compatibilidad.

Esperado: La documentacion se genera automaticamente o se mantiene sincronizada con la definicion del esquema. En caso de fallo: Si la documentacion se desvia del esquema, agregar una verificacion CI que valide la documentacion contra la fuente del esquema.

Validacion

  • El esquema usa el sistema apropiado para el caso de uso (JSON Schema, Protobuf, Avro)
  • Todos los campos tienen tipos, descripciones y restricciones
  • Campos requeridos vs opcionales estan definidos explicitamente
  • Estrategia de evolucion documentada (cambios seguros, politica de versionado)
  • Validacion implementada en los limites del sistema
  • El esquema esta versionado con un registro de cambios
  • Prueba de ida y vuelta: serializar -> deserializar -> comparar confirma sin perdida de datos

Errores Comunes

  • Restringir demasiado temprano: Validacion estricta en un esquema nuevo bloquea la iteracion. Comenzar permisivo (additionalProperties: true), restringir despues.
  • Sin valores predeterminados: Agregar un campo requerido sin predeterminado rompe todos los datos existentes. Siempre proporcionar predeterminados para nuevos campos.
  • Ignorar null: Muchos esquemas no manejan campos null/faltantes claramente. Ser explicito sobre nullable vs opcional.
  • Version en la carga, no en la URL: Para datos de larga duracion (almacenamiento, eventos), incrustar la version del esquema en los datos mismos, no solo en la URL del endpoint.
  • Exhaustividad de enum: Agregar un nuevo valor enum puede causar crashes en consumidores que usan sentencias switch exhaustivas. Documentar que los valores desconocidos deben manejarse elegantemente.

Habilidades Relacionadas

  • serialize-data-formats -- seleccion de formato e implementacion de codificacion/decodificacion
  • implement-pharma-serialisation -- serializacion farmaceutica (esquemas regulados)
  • write-validation-documentation -- documentacion de validacion para esquemas regulados

GitHub 저장소

pjt222/agent-almanac
경로: i18n/es/skills/design-serialization-schema
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

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 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.

스킬 보기