Files
progcode/web/public/assets/editorial/2021/api-versioning-diagnosis-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

55 lines
4.9 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 375 710" role="img" aria-labelledby="title desc">
<title id="title">Диагностика несовместимого изменения API</title>
<desc id="desc">Последовательность расследования: собрать доказательства, определить тип нарушения, запустить узкий contract test, затем остановить retirement или исправить request contract.</desc>
<rect width="375" height="710" fill="#172033" rx="20"/>
<text x="25" y="42" fill="#f8fafc" font-family="Arial, sans-serif" font-size="18" font-weight="700">Клиент перестал читать response</text>
<text x="25" y="64" fill="#a5b4fc" font-family="Arial, sans-serif" font-size="11">Сначала evidence, затем обратимое действие.</text>
<rect x="33" y="94" width="309" height="66" rx="10" fill="#312e81" stroke="#818cf8"/>
<text x="51" y="120" fill="#e0e7ff" font-family="Arial, sans-serif" font-size="13" font-weight="700">1 · Собрать contract evidence</text>
<text x="51" y="142" fill="#c7d2fe" font-family="Arial, sans-serif" font-size="11">endpoint · reader · sanitized request/response</text>
<path d="M188 162 L188 187" stroke="#818cf8" stroke-width="3"/>
<path d="M181 178 L188 187 L195 178" fill="none" stroke="#818cf8" stroke-width="3"/>
<rect x="33" y="192" width="309" height="58" rx="10" fill="#1e293b" stroke="#64748b"/>
<text x="51" y="217" fill="#e2e8f0" font-family="Arial, sans-serif" font-size="13" font-weight="700">2 · Назвать first failing rule</text>
<text x="51" y="238" fill="#cbd5e1" font-family="Arial, sans-serif" font-size="11">missing field · semantic change · unknown request key</text>
<path d="M188 252 L120 291" stroke="#64748b" stroke-width="3"/>
<path d="M188 252 L255 291" stroke="#64748b" stroke-width="3"/>
<rect x="31" y="300" width="151" height="92" rx="10" fill="#451a03" stroke="#fb923c"/>
<text x="47" y="326" fill="#ffedd5" font-family="Arial, sans-serif" font-size="12" font-weight="700">response break?</text>
<text x="47" y="348" fill="#fed7aa" font-family="Arial, sans-serif" font-size="10">totalMinor missing</text>
<text x="47" y="366" fill="#fed7aa" font-family="Arial, sans-serif" font-size="10">или status сменил смысл</text>
<rect x="193" y="300" width="151" height="92" rx="10" fill="#164e63" stroke="#22d3ee"/>
<text x="209" y="326" fill="#cffafe" font-family="Arial, sans-serif" font-size="12" font-weight="700">request break?</text>
<text x="209" y="348" fill="#a5f3fc" font-family="Arial, sans-serif" font-size="10">unknown key / typo</text>
<text x="209" y="366" fill="#a5f3fc" font-family="Arial, sans-serif" font-size="10">absence и null спутаны</text>
<path d="M106 394 L106 429" stroke="#fb923c" stroke-width="3"/>
<path d="M269 394 L269 429" stroke="#22d3ee" stroke-width="3"/>
<path d="M99 420 L106 429 L113 420" fill="none" stroke="#fb923c" stroke-width="3"/>
<path d="M262 420 L269 429 L276 420" fill="none" stroke="#22d3ee" stroke-width="3"/>
<rect x="31" y="435" width="151" height="88" rx="10" fill="#7f1d1d" stroke="#f87171"/>
<text x="47" y="461" fill="#fee2e2" font-family="Arial, sans-serif" font-size="12" font-weight="700">v1 test FAIL</text>
<text x="47" y="483" fill="#fecaca" font-family="Arial, sans-serif" font-size="10">остановить retirement</text>
<text x="47" y="501" fill="#fecaca" font-family="Arial, sans-serif" font-size="10">сохранить legacy response</text>
<rect x="193" y="435" width="151" height="88" rx="10" fill="#0f766e" stroke="#2dd4bf"/>
<text x="209" y="461" fill="#ccfbf1" font-family="Arial, sans-serif" font-size="12" font-weight="700">validator FAIL</text>
<text x="209" y="483" fill="#99f6e4" font-family="Arial, sans-serif" font-size="10">вернуть явный reject</text>
<text x="209" y="501" fill="#99f6e4" font-family="Arial, sans-serif" font-size="10">исправить contract sample</text>
<path d="M106 525 L188 566 L269 525" fill="none" stroke="#94a3b8" stroke-width="3"/>
<path d="M181 556 L188 566 L195 556" fill="none" stroke="#94a3b8" stroke-width="3"/>
<rect x="33" y="572" width="309" height="75" rx="10" fill="#0f172a" stroke="#94a3b8"/>
<text x="51" y="598" fill="#e2e8f0" font-family="Arial, sans-serif" font-size="13" font-weight="700">3 · Записать условие повторной попытки</text>
<text x="51" y="620" fill="#cbd5e1" font-family="Arial, sans-serif" font-size="11">new sample + reader test + owner решения</text>
<text x="51" y="638" fill="#cbd5e1" font-family="Arial, sans-serif" font-size="11">не повторять state-changing request вслепую</text>
<text x="25" y="684" fill="#94a3b8" font-family="Arial, sans-serif" font-size="10">Fixture даёт факт о contract, не доказательство реального deployment.</text>
</svg>