Files
progcode/web/public/assets/editorial/2021/api-versioning-rollout-2021.svg
T
huncode 8e078b92ea
Build and deploy / deploy (push) Successful in 14s
revise September 2021 API versioning articles
2026-07-31 13:06:48 +03:00

43 lines
3.8 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 375 720" role="img" aria-labelledby="title desc">
<title id="title">Последовательность безопасной эволюции API</title>
<desc id="desc">Пять вертикальных этапов: зафиксировать контракт, проверить additive response, проверить v2 request, отклонить removal обязательного поля и поставить retirement на паузу.</desc>
<rect width="375" height="720" fill="#0f172a" rx="20"/>
<text x="28" y="42" fill="#f8fafc" font-family="Arial, sans-serif" font-size="18" font-weight="700">Эволюция contract без прыжка</text>
<text x="28" y="65" fill="#94a3b8" font-family="Arial, sans-serif" font-size="11">Один endpoint · v1 и v2 проверяются отдельно</text>
<line x1="52" y1="117" x2="52" y2="620" stroke="#475569" stroke-width="3" stroke-dasharray="6 7"/>
<circle cx="52" cy="117" r="15" fill="#0ea5e9"/>
<text x="47" y="122" fill="#fff" font-family="Arial, sans-serif" font-size="13" font-weight="700">1</text>
<rect x="83" y="88" width="260" height="63" rx="10" fill="#172554" stroke="#38bdf8"/>
<text x="99" y="114" fill="#e0f2fe" font-family="Arial, sans-serif" font-size="13" font-weight="700">Записать базовый contract</text>
<text x="99" y="135" fill="#bae6fd" font-family="Arial, sans-serif" font-size="11">v1 request + обязательный response</text>
<circle cx="52" cy="228" r="15" fill="#10b981"/>
<text x="47" y="233" fill="#fff" font-family="Arial, sans-serif" font-size="13" font-weight="700">2</text>
<rect x="83" y="199" width="260" height="72" rx="10" fill="#052e2b" stroke="#34d399"/>
<text x="99" y="225" fill="#d1fae5" font-family="Arial, sans-serif" font-size="13" font-weight="700">Добавить deliveryWindow</text>
<text x="99" y="245" fill="#a7f3d0" font-family="Arial, sans-serif" font-size="11">v1 игнорирует key; v2 читает форму</text>
<circle cx="52" cy="350" r="15" fill="#10b981"/>
<text x="47" y="355" fill="#fff" font-family="Arial, sans-serif" font-size="13" font-weight="700">3</text>
<rect x="83" y="321" width="260" height="72" rx="10" fill="#052e2b" stroke="#34d399"/>
<text x="99" y="347" fill="#d1fae5" font-family="Arial, sans-serif" font-size="13" font-weight="700">Разрешить v2 request</text>
<text x="99" y="367" fill="#a7f3d0" font-family="Arial, sans-serif" font-size="11">absence / null / value и unknown key</text>
<circle cx="52" cy="472" r="15" fill="#f97316"/>
<text x="47" y="477" fill="#fff" font-family="Arial, sans-serif" font-size="13" font-weight="700">4</text>
<rect x="83" y="443" width="260" height="72" rx="10" fill="#431407" stroke="#fb923c"/>
<text x="99" y="469" fill="#ffedd5" font-family="Arial, sans-serif" font-size="13" font-weight="700">Candidate retirement</text>
<text x="99" y="489" fill="#fed7aa" font-family="Arial, sans-serif" font-size="11">удалён totalMinor → v1 test отклоняет</text>
<circle cx="52" cy="594" r="15" fill="#eab308"/>
<text x="47" y="599" fill="#1e293b" font-family="Arial, sans-serif" font-size="13" font-weight="700">5</text>
<rect x="83" y="565" width="260" height="72" rx="10" fill="#422006" stroke="#facc15"/>
<text x="99" y="591" fill="#fef9c3" font-family="Arial, sans-serif" font-size="13" font-weight="700">Пауза до изменения</text>
<text x="99" y="611" fill="#fde68a" font-family="Arial, sans-serif" font-size="11">legacy response сохранён; условие записано</text>
<rect x="28" y="666" width="319" height="31" rx="8" fill="#1e293b"/>
<text x="43" y="686" fill="#cbd5e1" font-family="Arial, sans-serif" font-size="11">Ворота — contract tests, не номер URL и не календарь.</text>
</svg>