Files
KArtSell.Aegis/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/api-field-contract-v13.md
T
kjh2064 3f293d8aa8
deploy / deploy (push) Successful in 1m52s
deploy / notify (push) Successful in 1s
V13-FE-006: consolidate approved UI and contract hardening
2026-08-13 02:41:00 +09:00

1.1 KiB

KBX v13 — API Field Contract

목표

Frontend의 field="orderQty", Server Validation의 field="orderQty", OpenAPI 문서의 Field 식별자를 동일하게 유지한다.

C# Attribute

[property: KbxFieldKey(KbxFieldKeys.OrderQty)] decimal? OrderQty

KbxFieldOpenApiSchemaFilter는 Swashbuckle Schema에 다음 vendor extension을 추가한다.

x-kbx-field-key
x-kbx-field-label
x-kbx-sensitive
x-kbx-masking

등록 예:

builder.Services.AddSwaggerGen(options =>
{
    options.AddKbxFieldContract();
});

중요한 경계

OpenAPI extension은 구조/표시 계약을 제공한다. 다음은 OpenAPI Field Metadata로 생성하지 않는다.

  • 업무 상태 전이
  • 재고 가능 여부
  • 권한 최종 판정
  • 동시성 판정
  • Domain invariant

Validation Problem

Row 오류는 canonical key를 사용한다.

{
  "field": "orderQty",
  "rowKey": "line-7",
  "code": "QUANTITY_POSITIVE",
  "message": "수량은 0보다 커야 합니다."
}

DB column이 quantity여도 사용자/API 오류 계약의 FieldKey는 orderQty를 사용한다.