Files
progcode/web/public/assets/editorial/2026/frontend-backend-boundary-2026-contract-responsibility-matrix.svg
T
2026-07-31 22:26:56 +03:00

40 lines
3.1 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 420" role="img" aria-labelledby="title desc">
<title id="title">HTTP результат и следующий шаг UI</title>
<desc id="desc">Таблица-схема связывает 2xx, 409 и 422, 429 и 5xx с разрешённым действием интерфейса и показывает, что отправка команды сама по себе не меняет модель экрана.</desc>
<rect width="720" height="420" rx="24" fill="#f7f3ea"/>
<g font-family="Arial, sans-serif" fill="#202124">
<text x="42" y="48" font-size="24" font-weight="700">Статус задаёт ветку, не весь смысл</text>
<text x="42" y="75" font-size="16" fill="#5f6368">каждому результату — свой следующий шаг</text>
<g font-size="16" font-weight="700">
<rect x="42" y="112" width="118" height="48" rx="8" fill="#d7e8ff" stroke="#2b5f9e" stroke-width="2"/>
<rect x="178" y="112" width="206" height="48" rx="8" fill="#d7e8ff" stroke="#2b5f9e" stroke-width="2"/>
<rect x="402" y="112" width="250" height="48" rx="8" fill="#d7e8ff" stroke="#2b5f9e" stroke-width="2"/>
<text x="101" y="143" text-anchor="middle">результат</text>
<text x="281" y="143" text-anchor="middle">что известно</text>
<text x="527" y="143" text-anchor="middle">следующий шаг UI</text>
</g>
<g font-size="16">
<rect x="42" y="174" width="118" height="42" rx="8" fill="#d9f1e1" stroke="#2e7d51" stroke-width="2"/>
<rect x="178" y="174" width="206" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<rect x="402" y="174" width="250" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<text x="101" y="201" text-anchor="middle" font-weight="700">200 + JSON</text>
<text x="192" y="201">valid representation</text>
<text x="416" y="201">render from model</text>
<rect x="42" y="224" width="118" height="42" rx="8" fill="#fff1cf" stroke="#a87400" stroke-width="2"/>
<rect x="178" y="224" width="206" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<rect x="402" y="224" width="250" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<text x="101" y="251" text-anchor="middle" font-weight="700">409 / 422</text>
<text x="192" y="251">domain rejection</text>
<text x="416" y="251">show reason or refetch</text>
<rect x="42" y="274" width="118" height="42" rx="8" fill="#fff1cf" stroke="#a87400" stroke-width="2"/>
<rect x="178" y="274" width="206" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<rect x="402" y="274" width="250" height="42" rx="8" fill="#fff" stroke="#b7b7b7"/>
<text x="101" y="301" text-anchor="middle" font-weight="700">429 / 5xx</text>
<text x="192" y="301">temporary failure</text>
<text x="416" y="301">bounded retry policy</text>
</g>
<rect x="42" y="344" width="610" height="42" rx="10" fill="#ffe2dc" stroke="#b84b3b" stroke-width="2"/>
<text x="347" y="371" text-anchor="middle" font-size="17" font-weight="700">command sent ≠ screen state changed: read the next model</text>
</g>
</svg>