Schema
Schema bileşeni, transition, flow ve master-data için JSON şema tanımıdır. Hem ön uçta hem arka uçta istekler doğrulanır ve instance data tutarlılığı korunur.
Schema kaynağı:
vnext-schema/schema-definition.schema.json
Tanım JSON Örneği
Schema:
schema-definition.schema.json
{
"key": "account-type-selection",
"version": "1.0.0",
"domain": "banking",
"flow": "sys-schemas",
"flowVersion": "1.0.0",
"tags": ["banking", "account", "selection"],
"_comment": "Hesap türü seçimi için transition schema",
"attributes": {
"type": "workflow",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schemas.vnext.com/banking/account-type-selection.json",
"title": "Account Type Selection",
"description": "Schema for account type selection input",
"type": "object",
"required": ["accountType"],
"properties": {
"accountType": {
"type": "string",
"title": "Account Type",
"description": "Type of account to be opened",
"oneOf": [
{ "const": "demand-deposit", "description": "Vadesiz Hesap" },
{ "const": "time-deposit", "description": "Vadeli Hesap" },
{ "const": "savings-account", "description": "Tasarruf Hesabı" }
]
}
},
"additionalProperties": false
},
"labels": [
{ "label": "Account Type Selection", "language": "en-US" },
{ "label": "Hesap Türü Seçimi", "language": "tr-TR" }
]
}
}
Kullanım Türleri
| Tür | Atandığı Yer | Amacı |
|---|---|---|
| Master Schema | Workflow root (attributes.schema) | Instance data ana yapısı; her değişimde tutarlılık kontrolü |
| Transition Schema | Transition tanımı | Transition request body validation |
Properties
Top-Level Alanlar
| Alan | Tip | Zorunlu | Pattern / Kısıt | Açıklama |
|---|---|---|---|---|
$schema | string | Hayır | — | JSON Schema referansı |
key | string | Evet | ^[a-z0-9-]+$ | Schema'nın benzersiz tanımlayıcısı |
version | string | Evet | ^\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?$ | Semantic versioning (Major.Minor.Patch) |
domain | string | Evet | ^[a-z0-9-]+$ | Schema'nın ait olduğu domain |
flow | string | Evet | Sabit: sys-schemas | Flow tanımlayıcısı |
flowVersion | string | Evet | ^\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?$ | Flow versiyonu |
tags | string[] | Evet | minItems: 1 | Kategorilendirme ve arama etiketleri |
_comment | string | Hayır | — | Açıklama / yorum |
attributes | object | Evet | — | Schema davranış tanımı (aşağıda) |
attributes Alanları
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
type | string | Evet | Schema tipi — aşağıdaki enum tablosuna bakın |
schema | object | Evet | JSON Schema tanımı (Draft 2020-12). Aşağıdaki iç yapı tablosuna bakın |
labels | array | Hayır | Çoklu dil etiketleri. Her öğe: label (string) + language (pattern: ^[a-z]{2}-[A-Z]{2}$) |
attributes.type Enum Değerleri
| Değer | Açıklama |
|---|---|
workflow | Workflow bileşeni tanımı |
task | Task bileşeni tanımı |
function | Function bileşeni tanımı |
view | View bileşeni tanımı |
schema | Schema bileşeni tanımı |
extension | Extension bileşeni tanımı |
headers | Headers schema tanımı |
attributes.schema İç Yapısı (JSON Schema)
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
$schema | string | Evet | JSON Schema spesifikasyon versiyonu. Sabit: https://json-schema.org/draft/2020-12/schema |
$id | string | Evet | Schema tanımlayıcı URI'si |
title | string | Evet | Schema başlığı (minLength: 1) |
type | string | Evet | JSON tipi: object, array, string, number, integer, boolean, null |
description | string | Hayır | Schema açıklaması |
properties | object | Hayır | Obje property tanımları |
required | string[] | Hayır | Zorunlu property listesi |
additionalProperties | boolean | Hayır | Ek property'lere izin verilip verilmeyeceği |
items | object | Hayır | Array elemanları schema tanımı |
enum | array | Hayır | İzin verilen sabit değerler listesi |
oneOf | array | Hayır | Alternatif schema seçenekleri (tam bir eşleşme) |
anyOf | array | Hayır | Alternatif schema seçenekleri (en az bir eşleşme) |
allOf | array | Hayır | Tüm schema gereksinimleri (tümü eşleşmeli) |
if / then / else | object | Hayır | Koşullu schema tanımları |
format | string | Hayır | String format doğrulaması (örn. email, date-time, uri) |
pattern | string | Hayır | String regex doğrulaması |
minimum / maximum | number | Hayır | Sayısal değer aralığı |
minLength / maxLength | integer | Hayır | String uzunluk aralığı |
minItems / maxItems | integer | Hayır | Array eleman sayısı aralığı |
const | any | Hayır | Sabit değer |
default | any | Hayır | Varsayılan değer |
Validation
Schema'lar Ajv2019 ile doğrulanır. Front-end'de form validation için annotation'lar kullanılabilir; back-end'de transition/start request'lerinde otomatik valide edilir.
- Frontend: form annotation, real-time validation
- Backend: request body validation, instance data merge validation
- CI/CD: schema kendisi
vnext-schemarepo'da merkezi olarak doğrulanır
Tipik Kullanım Senaryoları
- Master schema ile instance data'nın immutable ve versionable kalmasını garanti et
- Transition schema ile her transition için farklı request body validation
İlgili
- Instance Data — instance veri yapısı
- Workflow component —
attributes.schemamaster schema referansı - Mappings — transition ve mapping kullanımı
- Schema kaynağı: vnext-schema (GitHub)