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-timedatetimeemailurihostnameipv4ipv6uuid

パターン検証

カスタム検証ルールに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から生成することで、無効なデータがアプリケーションコードに到達する前に設定レイヤーで拒否されます。

試してみる — JSON to YAML Schema

フルツールを開く