Skip to content

JSON Schema ile Sıkı Sözleşmeler

JSON Schema standardı ile detaylı validation kuralları: pattern (regex), enum, minimum/maximum, format. Modeli sıkı tutmak.

Şükrü Yusuf KAYA
8 min read
Intermediate

JSON Schema: Sıkı Sözleşmeler

JSON parse edilebilir olması yetmez. İçeriğin şekli doğru olmalı.
json
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
},
"phone": {
"type": "string",
"pattern": "^\\+90[0-9]{10}$"
},
"age": {
"type": "integer",
"minimum": 0,
"maximum": 120
},
"level": {
"type": "string",
"enum": ["junior", "mid", "senior", "lead"]
},
"skills": {
"type": "array",
"items": { "type": "string" },
"minItems": 1,
"maxItems": 20,
"uniqueItems": true
}
},
"required": ["email", "level"],
"additionalProperties": false
}
Tam featurelı JSON Schema

Validation: 2 Aşamalı#

python
# Pydantic ile sıkı validation
from pydantic import BaseModel, EmailStr, Field, validator
from typing import List, Literal
import re
 
class Lead(BaseModel):
email: EmailStr
phone: str = Field(pattern=r"^\+90[0-9]{10}$")
age: int = Field(ge=18, le=120)
interests: List[str] = Field(min_length=1, max_length=10)
priority: Literal["low", "medium", "high"]
 
# Valid
ok = Lead(
email="ali@x.com",
phone="+905321234567",
age=30,
interests=["python"],
priority="high",
)
print("Valid:", ok)
 
# Invalid (yakalandığı an Exception)
try:
bad = Lead(
email="not-an-email",
phone="0532", # +90 yok
age=200, # > 120
interests=[], # boş
priority="urgent" # enum değil
)
except Exception as e:
print("\nValidation hataları:")
print(e)
 
Pydantic ile çoklu kural validation.
Pratik: Vendor "Structured Outputs" (OpenAI) schema'ya garanti uyar (yeni!). Anthropic'te tool-use ile aynı garantiyi alırsın. İkisi de manuel retry ihtiyacını dramatik azaltır.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content