JSONからYAML Schemaの文字列型制約を定義する
JSON文字列値がYAML Schemaの文字列型定義にどのようにマッピングされるかを学びます。minLength、maxLength、パターン正規表現、formatキーワード、enum制約、コンテンツエンコーディングを解説します。
Type Mapping
詳細な説明
YAML Schemaでの文字列型マッピング
JSON文字列値はYAML Schemaでtype: stringにマッピングされます。基本的な型アサーション以外にも、YAML Schemaは文字列コンテンツを正確に検証できる豊富な制約を提供します。
基本的な文字列プロパティ
{
"name": "my-service",
"email": "admin@example.com",
"version": "2.1.0"
}
type: object
properties:
name:
type: string
email:
type: string
format: email
version:
type: string
pattern: "^\\d+\\.\\d+\\.\\d+$"
文字列制約
| 制約 | 目的 | 例 |
|---|---|---|
minLength |
最小文字数 | minLength: 1(空でない) |
maxLength |
最大文字数 | maxLength: 255 |
pattern |
値がマッチすべき正規表現 | pattern: "^[a-z0-9-]+$" |
format |
セマンティックフォーマットヒント | format: email |
enum |
許可される値の固定セット | enum: ["info", "warn", "error"] |
default |
不在時のデフォルト値 | default: "info" |
formatキーワード
formatキーワードは正規表現を超えたセマンティック検証を提供します:
properties:
email:
type: string
format: email
homepage:
type: string
format: uri
createdAt:
type: string
format: date-time
ip:
type: string
format: ipv4
一般的なフォーマット:date-time、date、time、email、uri、hostname、ipv4、ipv6、uuid。
パターン検証
カスタム検証ルールにpatternを使用します:
properties:
slug:
type: string
pattern: "^[a-z0-9]+(-[a-z0-9]+)*$"
description: URL安全なスラッグ(小文字、ハイフンのみ)
semver:
type: string
pattern: "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.]+)?$"
description: セマンティックバージョン文字列
コンテンツエンコーディング
文字列として保存されるバイナリデータの場合:
certificate:
type: string
contentEncoding: base64
contentMediaType: application/x-pem-file
スマート推論
インテリジェントなコンバーターは一般的な文字列パターンを検出し、適切な制約を自動的に適用します -- メールアドレスにはformat: email、ISO日付にはformat: date-time、URL文字列にはformat: uriが付与されます。
ユースケース
APIリクエストの検証では、メールフィールドが有効なメールでなければならない、スラッグがURL安全なパターンに一致しなければならない、バージョン文字列がsemverに従わなければならないなど、正確な文字列制約が必要になります。文字列制約付きのYAMLスキーマをサンプルJSONから生成することで、無効なデータがアプリケーションコードに到達する前に設定レイヤーで拒否されます。