[{"data":1,"prerenderedAt":12670},["ShallowReactive",2],{"navigation_docs":3,"-web-development-http-and-https-http-status-codes":3728,"-web-development-http-and-https-http-status-codes-surround":12667},[4,1707,1912,2366,2547,2673,2880,3002,3052,3109,3143,3269,3346,3360,3495,3512,3525,3671,3724],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900,1904,1908],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"Об'єднання (union): один блок пам'яті, кілька інтерпретацій","\u002Fcpp\u002Funion","02.cpp\u002F45.union",{"title":1897,"path":1898,"stem":1899},"Організація коду: файли, препроцесор, простори імен","\u002Fcpp\u002Fmultifile-programs","02.cpp\u002F46.multifile-programs",{"title":1901,"path":1902,"stem":1903},"Робота з файлами: C-стиль (stdio.h)","\u002Fcpp\u002Fc-style-files","02.cpp\u002F47.c-style-files",{"title":1905,"path":1906,"stem":1907},"Робота з файлами: C++-стиль (fstream)","\u002Fcpp\u002Fcpp-style-files","02.cpp\u002F48.cpp-style-files",{"title":1909,"path":1910,"stem":1911},"План навчання: Курс C++ — Продовження (Статті 29–60+)","\u002Fcpp\u002Fcurriculum-plan","02.cpp\u002Fcurriculum-plan",{"title":1913,"icon":1914,"path":1915,"stem":1916,"children":1917,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[1918,1944,1998,2020,2324,2362],{"title":1919,"icon":1920,"path":1921,"stem":1922,"children":1923,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[1924,1928,1932,1936,1940],{"title":1925,"path":1926,"stem":1927},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":1929,"path":1930,"stem":1931},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":1933,"path":1934,"stem":1935},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":1937,"path":1938,"stem":1939},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":1941,"path":1942,"stem":1943},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":1945,"icon":1946,"path":1947,"stem":1948,"children":1949,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[1950,1954,1958,1962,1966,1970,1974,1978,1982,1986,1990,1994],{"title":1951,"path":1952,"stem":1953},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":1955,"path":1956,"stem":1957},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":1959,"path":1960,"stem":1961},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":1963,"path":1964,"stem":1965},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":1967,"path":1968,"stem":1969},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":1971,"path":1972,"stem":1973},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":1975,"path":1976,"stem":1977},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":1979,"path":1980,"stem":1981},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":1983,"path":1984,"stem":1985},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":1987,"path":1988,"stem":1989},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":1991,"path":1992,"stem":1993},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":1995,"path":1996,"stem":1997},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":1999,"icon":2000,"path":2001,"stem":2002,"children":2003,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[2004,2008,2012,2016],{"title":2005,"path":2006,"stem":2007},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":2009,"path":2010,"stem":2011},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":2013,"path":2014,"stem":2015},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2017,"path":2018,"stem":2019},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2021,"icon":2022,"path":2023,"stem":2024,"children":2025},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2026,2027,2031,2035,2039,2043,2106,2141,2293],{"title":2021,"path":2023,"stem":2024},{"title":2028,"path":2029,"stem":2030},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2032,"path":2033,"stem":2034},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2036,"path":2037,"stem":2038},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2040,"path":2041,"stem":2042},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2044,"icon":132,"path":2045,"stem":2046,"children":2047},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2048,2050,2054,2058,2062,2066,2070,2074,2078,2082,2086,2090,2094,2098,2102],{"title":2049,"path":2045,"stem":2046},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2051,"path":2052,"stem":2053},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2055,"path":2056,"stem":2057},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2059,"path":2060,"stem":2061},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2063,"path":2064,"stem":2065},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2067,"path":2068,"stem":2069},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2071,"path":2072,"stem":2073},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2075,"path":2076,"stem":2077},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2079,"path":2080,"stem":2081},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2083,"path":2084,"stem":2085},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2087,"path":2088,"stem":2089},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2091,"path":2092,"stem":2093},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2095,"path":2096,"stem":2097},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2099,"path":2100,"stem":2101},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2103,"path":2104,"stem":2105},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2107,"icon":2022,"path":2108,"stem":2109,"children":2110},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2111,2113,2117,2121,2125,2129,2133,2137],{"title":2112,"path":2108,"stem":2109},"React Router: Навігаційна система сучасного вебу",{"title":2114,"path":2115,"stem":2116},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2118,"path":2119,"stem":2120},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2122,"path":2123,"stem":2124},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2126,"path":2127,"stem":2128},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2130,"path":2131,"stem":2132},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2134,"path":2135,"stem":2136},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2138,"path":2139,"stem":2140},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2142,"icon":132,"path":2143,"stem":2144,"children":2145},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2146,2148,2164,2193,2202,2223,2239,2268],{"title":2147,"path":2143,"stem":2144},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2149,"stem":2150,"children":2151,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2152,2156,2160],{"title":2153,"path":2154,"stem":2155},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2157,"path":2158,"stem":2159},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2161,"path":2162,"stem":2163},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2165,"icon":132,"path":2166,"stem":2167,"children":2168,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2169,2173,2177,2181,2185,2189],{"title":2170,"path":2171,"stem":2172},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2174,"path":2175,"stem":2176},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2178,"path":2179,"stem":2180},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2182,"path":2183,"stem":2184},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2186,"path":2187,"stem":2188},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2190,"path":2191,"stem":2192},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2194,"icon":132,"path":2195,"stem":2196,"children":2197,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2198],{"title":2199,"path":2200,"stem":2201},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2203,"icon":132,"path":2204,"stem":2205,"children":2206,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2207,2211,2215,2219],{"title":2208,"path":2209,"stem":2210},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2212,"path":2213,"stem":2214},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2216,"path":2217,"stem":2218},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2220,"path":2221,"stem":2222},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2224,"icon":92,"path":2225,"stem":2226,"children":2227,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2228,2232,2236],{"title":2229,"path":2230,"stem":2231},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2233,"path":2234,"stem":2235},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2083,"path":2237,"stem":2238},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2240,"icon":132,"path":2241,"stem":2242,"children":2243,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2244,2248,2252,2256,2260,2264],{"title":2245,"path":2246,"stem":2247},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2249,"path":2250,"stem":2251},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2253,"path":2254,"stem":2255},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2257,"path":2258,"stem":2259},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2261,"path":2262,"stem":2263},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2265,"path":2266,"stem":2267},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2269,"icon":132,"path":2270,"stem":2271,"children":2272,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2273,2277,2281,2285,2289],{"title":2274,"path":2275,"stem":2276},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2278,"path":2279,"stem":2280},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2282,"path":2283,"stem":2284},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2286,"path":2287,"stem":2288},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2290,"path":2291,"stem":2292},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2294,"icon":132,"path":2295,"stem":2296,"children":2297},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2298,2300,2304,2308,2312,2316,2320],{"title":2299,"path":2295,"stem":2296},"UI Бібліотеки в React",{"title":2301,"path":2302,"stem":2303},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2305,"path":2306,"stem":2307},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2309,"path":2310,"stem":2311},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2313,"path":2314,"stem":2315},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2317,"path":2318,"stem":2319},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2321,"path":2322,"stem":2323},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2325,"icon":2326,"path":2327,"stem":2328,"children":2329,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2330,2334,2338,2342,2346,2350,2354,2358],{"title":2331,"path":2332,"stem":2333},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2335,"path":2336,"stem":2337},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2339,"path":2340,"stem":2341},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2343,"path":2344,"stem":2345},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2347,"path":2348,"stem":2349},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2351,"path":2352,"stem":2353},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2355,"path":2356,"stem":2357},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2359,"path":2360,"stem":2361},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2363,"path":2364,"stem":2365},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2367,"icon":2368,"path":2369,"stem":2370,"children":2371,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2372,2375,2378,2382,2386,2390,2394],{"title":162,"path":2373,"stem":2374},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2376,"stem":2377},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2379,"path":2380,"stem":2381},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2383,"path":2384,"stem":2385},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2387,"path":2388,"stem":2389},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2391,"path":2392,"stem":2393},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2395,"path":2396,"stem":2397,"children":2398,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2399,2403,2407,2411,2415,2419,2423,2427,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467,2471,2475,2479,2483,2487,2491,2495,2499,2503,2507,2511,2515,2519,2523,2527,2531,2535,2539,2543],{"title":2400,"path":2401,"stem":2402},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2404,"path":2405,"stem":2406},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2408,"path":2409,"stem":2410},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2412,"path":2413,"stem":2414},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2416,"path":2417,"stem":2418},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2420,"path":2421,"stem":2422},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2424,"path":2425,"stem":2426},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2428,"path":2429,"stem":2430},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2432,"path":2433,"stem":2434},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2436,"path":2437,"stem":2438},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2440,"path":2441,"stem":2442},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2444,"path":2445,"stem":2446},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2448,"path":2449,"stem":2450},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2452,"path":2453,"stem":2454},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2456,"path":2457,"stem":2458},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2460,"path":2461,"stem":2462},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2464,"path":2465,"stem":2466},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2468,"path":2469,"stem":2470},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2472,"path":2473,"stem":2474},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2476,"path":2477,"stem":2478},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2480,"path":2481,"stem":2482},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2484,"path":2485,"stem":2486},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2488,"path":2489,"stem":2490},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2492,"path":2493,"stem":2494},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2496,"path":2497,"stem":2498},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2500,"path":2501,"stem":2502},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2504,"path":2505,"stem":2506},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2508,"path":2509,"stem":2510},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2512,"path":2513,"stem":2514},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2516,"path":2517,"stem":2518},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2520,"path":2521,"stem":2522},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2524,"path":2525,"stem":2526},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2528,"path":2529,"stem":2530},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2532,"path":2533,"stem":2534},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2536,"path":2537,"stem":2538},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2540,"path":2541,"stem":2542},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2544,"path":2545,"stem":2546},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2548,"icon":2549,"path":2550,"stem":2551,"children":2552,"page":59},"Python","i-devicon-python","\u002Fpython","05.python",[2553,2557,2560,2564,2568,2572,2576,2580,2584,2588,2592,2596,2600,2604,2608,2669],{"title":2554,"path":2555,"stem":2556},"Модулі, Пакети та Віртуальні Середовища","\u002Fpython\u002Fmodules-packages-venv","05.python\u002F00.modules-packages-venv",{"title":71,"path":2558,"stem":2559},"\u002Fpython\u002Fclasses-objects","05.python\u002F01.classes-objects",{"title":2561,"path":2562,"stem":2563},"Інкапсуляція, Керування Доступом та Властивості","\u002Fpython\u002Fencapsulation","05.python\u002F02.encapsulation",{"title":2565,"path":2566,"stem":2567},"Наслідування, MRO та суперсила super()","\u002Fpython\u002Finheritance-mro","05.python\u002F03.inheritance-mro",{"title":2569,"path":2570,"stem":2571},"Абстракція — ABC проти Статичних Протоколів (PEP 544)","\u002Fpython\u002Fabstraction-protocols","05.python\u002F04.abstraction-protocols",{"title":2573,"path":2574,"stem":2575},"Магічні методи (Dunder) та Емуляція протоколів","\u002Fpython\u002Fdunder-methods","05.python\u002F05.dunder-methods",{"title":2577,"path":2578,"stem":2579},"Декоратори та Керування життєвим циклом методів","\u002Fpython\u002Fdecorators-static-class","05.python\u002F06.decorators-static-class",{"title":2581,"path":2582,"stem":2583},"Дескриптори — Магія доступу до атрибутів","\u002Fpython\u002Fdescriptors","05.python\u002F07.descriptors",{"title":2585,"path":2586,"stem":2587},"Метакласи — Динамічне створення класів під капотом CPython","\u002Fpython\u002Fmetaclasses","05.python\u002F08.metaclasses",{"title":2589,"path":2590,"stem":2591},"Dataclasses, NamedTuple та сучасні контейнери Python","\u002Fpython\u002Fmodern-containers","05.python\u002F09.modern-containers",{"title":2593,"path":2594,"stem":2595},"GIL та модель конкурентності CPython — фундамент перед потоками і процесами","\u002Fpython\u002Fgil-concurrency-intro","05.python\u002F11.gil-concurrency-intro",{"title":2597,"path":2598,"stem":2599},"Threading — конкурентність для I\u002FO-bound задач","\u002Fpython\u002Fthreading","05.python\u002F12.threading",{"title":2601,"path":2602,"stem":2603},"Multiprocessing — справжній паралелізм для CPU-bound задач","\u002Fpython\u002Fmultiprocessing","05.python\u002F13.multiprocessing",{"title":2605,"path":2606,"stem":2607},"asyncio — кооперативна конкурентність та event loop","\u002Fpython\u002Fasyncio","05.python\u002F14.asyncio",{"title":2609,"icon":92,"path":2610,"stem":2611,"children":2612,"page":59},"FastAPI","\u002Fpython\u002Ffastapi","05.python\u002Ffastapi",[2613,2617,2621,2625,2629,2633,2637,2641,2645,2649,2653,2657,2661,2665],{"title":2614,"path":2615,"stem":2616},"Глибокий Typing та Pydantic v2 — від анотацій до валідації","\u002Fpython\u002Ffastapi\u002Ftyping-pydantic","05.python\u002Ffastapi\u002F15.typing-pydantic",{"title":2618,"path":2619,"stem":2620},"WSGI, ASGI та Python Web-екосистема","\u002Fpython\u002Ffastapi\u002Fwsgi-asgi-ecosystem","05.python\u002Ffastapi\u002F16.wsgi-asgi-ecosystem",{"title":2622,"path":2623,"stem":2624},"FastAPI: Перший додаток, Uvicorn та OpenAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-intro","05.python\u002Ffastapi\u002F17.fastapi-intro",{"title":2626,"path":2627,"stem":2628},"Маршрутизація, параметри запитів та APIRouter","\u002Fpython\u002Ffastapi\u002Ffastapi-routing-params","05.python\u002Ffastapi\u002F18.fastapi-routing-params",{"title":2630,"path":2631,"stem":2632},"Pydantic v2 у FastAPI — схеми, валідація та серіалізація","\u002Fpython\u002Ffastapi\u002Ffastapi-pydantic-schemas","05.python\u002Ffastapi\u002F19.fastapi-pydantic-schemas",{"title":2634,"path":2635,"stem":2636},"Dependency Injection — серце архітектури FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-dependency-injection","05.python\u002Ffastapi\u002F20.fastapi-dependency-injection",{"title":2638,"path":2639,"stem":2640},"Обробка помилок, Middleware та CORS у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-errors-middleware","05.python\u002Ffastapi\u002F21.fastapi-errors-middleware",{"title":2642,"path":2643,"stem":2644},"SQLAlchemy 2.0 — ORM, Core та Async Engine","\u002Fpython\u002Ffastapi\u002Fsqlalchemy-orm","05.python\u002Ffastapi\u002F22.sqlalchemy-orm",{"title":2646,"path":2647,"stem":2648},"Alembic — міграції бази даних","\u002Fpython\u002Ffastapi\u002Falembic-migrations","05.python\u002Ffastapi\u002F23.alembic-migrations",{"title":2650,"path":2651,"stem":2652},"Repository Pattern та Clean Architecture у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-repository-clean-arch","05.python\u002Ffastapi\u002F24.fastapi-repository-clean-arch",{"title":2654,"path":2655,"stem":2656},"Автентифікація та авторизація — JWT, OAuth2, RBAC","\u002Fpython\u002Ffastapi\u002Ffastapi-auth-security","05.python\u002Ffastapi\u002F25.fastapi-auth-security",{"title":2658,"path":2659,"stem":2660},"Тестування FastAPI — pytest, httpx, fixtures","\u002Fpython\u002Ffastapi\u002Ffastapi-testing","05.python\u002Ffastapi\u002F26.fastapi-testing",{"title":2662,"path":2663,"stem":2664},"Async на повну — Background Tasks, WebSockets, SSE та Celery","\u002Fpython\u002Ffastapi\u002Ffastapi-async-advanced","05.python\u002Ffastapi\u002F27.fastapi-async-advanced",{"title":2666,"path":2667,"stem":2668},"Deployment — Docker, CI\u002FCD, Monitoring","\u002Fpython\u002Ffastapi\u002Ffastapi-deployment","05.python\u002Ffastapi\u002F28.fastapi-deployment",{"title":2670,"path":2671,"stem":2672},"[object Object]","\u002Fpython\u002Foop-plan","05.python\u002Foop-plan",{"title":2674,"icon":2675,"path":2676,"stem":2677,"children":2678,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2679,2709,2732,2769,2798,2816,2850,2862,2871],{"title":2680,"icon":2681,"path":2682,"stem":2683,"children":2684,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2685,2689,2693,2697,2701,2705],{"title":2686,"path":2687,"stem":2688},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2690,"path":2691,"stem":2692},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2694,"path":2695,"stem":2696},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2698,"path":2699,"stem":2700},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2702,"path":2703,"stem":2704},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2706,"path":2707,"stem":2708},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2710,"icon":2675,"path":2711,"stem":2712,"children":2713,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2714,2718,2724,2728],{"title":2715,"path":2716,"stem":2717},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2719,"path":2720,"stem":2721,"children":2722},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2723],{"title":2719,"path":2720,"stem":2721},{"title":2725,"path":2726,"stem":2727},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2729,"path":2730,"stem":2731},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2733,"icon":2675,"path":2734,"stem":2735,"children":2736,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2737,2741,2745,2749,2753,2757,2761,2765],{"title":2738,"path":2739,"stem":2740},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2742,"path":2743,"stem":2744},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2746,"path":2747,"stem":2748},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2750,"path":2751,"stem":2752},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2754,"path":2755,"stem":2756},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2758,"path":2759,"stem":2760},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2762,"path":2763,"stem":2764},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2766,"path":2767,"stem":2768},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2770,"icon":2675,"path":2771,"stem":2772,"children":2773,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2774,2778,2782,2786,2790,2794],{"title":2775,"path":2776,"stem":2777},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2779,"path":2780,"stem":2781},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2783,"path":2784,"stem":2785},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2787,"path":2788,"stem":2789},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2791,"path":2792,"stem":2793},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2795,"path":2796,"stem":2797},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2799,"icon":2800,"path":2801,"stem":2802,"children":2803,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2804,2808,2812],{"title":2805,"path":2806,"stem":2807},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2809,"path":2810,"stem":2811},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":2813,"path":2814,"stem":2815},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":2817,"icon":2818,"path":2819,"stem":2820,"children":2821,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[2822,2826,2830,2834,2838,2842,2846],{"title":2823,"path":2824,"stem":2825},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":2827,"path":2828,"stem":2829},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":2831,"path":2832,"stem":2833},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":2835,"path":2836,"stem":2837},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":2839,"path":2840,"stem":2841},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":2843,"path":2844,"stem":2845},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":2847,"path":2848,"stem":2849},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":2847,"icon":793,"path":2851,"stem":2852,"children":2853,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[2854,2858],{"title":2855,"path":2856,"stem":2857},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":2859,"path":2860,"stem":2861},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":2863,"icon":2864,"path":2865,"stem":2866,"children":2867,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[2868],{"title":2863,"path":2869,"stem":2870},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":2872,"icon":2873,"path":2874,"stem":2875,"children":2876,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[2877],{"title":2872,"path":2878,"stem":2879},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":2881,"icon":2882,"path":2883,"stem":2884,"children":2885,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[2886,2962],{"title":2887,"icon":2888,"path":2889,"stem":2890,"children":2891},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[2892,2894,2898,2902,2906,2910,2914,2918,2922,2926,2930,2934,2938,2942,2946,2950,2954,2958],{"title":2893,"path":2889,"stem":2890},"Docker: від нуля до production",{"title":2895,"path":2896,"stem":2897},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":2899,"path":2900,"stem":2901},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":2903,"path":2904,"stem":2905},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":2907,"path":2908,"stem":2909},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":2911,"path":2912,"stem":2913},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":2915,"path":2916,"stem":2917},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":2919,"path":2920,"stem":2921},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":2923,"path":2924,"stem":2925},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":2927,"path":2928,"stem":2929},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":2931,"path":2932,"stem":2933},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":2935,"path":2936,"stem":2937},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":2939,"path":2940,"stem":2941},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":2943,"path":2944,"stem":2945},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":2947,"path":2948,"stem":2949},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":2951,"path":2952,"stem":2953},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":2955,"path":2956,"stem":2957},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":2959,"path":2960,"stem":2961},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":2963,"icon":2964,"path":2965,"stem":2966,"children":2967},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[2968,2970,2974,2978,2982,2986,2990,2994,2998],{"title":2969,"path":2965,"stem":2966},"Kubernetes: від розробки до production",{"title":2971,"path":2972,"stem":2973},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":2975,"path":2976,"stem":2977},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":2979,"path":2980,"stem":2981},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":2983,"path":2984,"stem":2985},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":2987,"path":2988,"stem":2989},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":2991,"path":2992,"stem":2993},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":2995,"path":2996,"stem":2997},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":2999,"path":3000,"stem":3001},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":3003,"icon":3004,"path":3005,"stem":3006,"children":3007,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[3008,3012,3016,3020,3024,3028,3032,3036,3040,3044,3048],{"title":3009,"path":3010,"stem":3011},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":3013,"path":3014,"stem":3015},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":3017,"path":3018,"stem":3019},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":3021,"path":3022,"stem":3023},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":3025,"path":3026,"stem":3027},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":3029,"path":3030,"stem":3031},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":3033,"path":3034,"stem":3035},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":3037,"path":3038,"stem":3039},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":3041,"path":3042,"stem":3043},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":3045,"path":3046,"stem":3047},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":3049,"path":3050,"stem":3051},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":3053,"icon":943,"path":3054,"stem":3055,"children":3056,"page":59},"DDD","\u002Fddd","10.ddd",[3057,3061,3065,3069,3073,3077,3081,3085,3089,3093,3097,3101,3105],{"title":3058,"path":3059,"stem":3060},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":3062,"path":3063,"stem":3064},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":3066,"path":3067,"stem":3068},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":3070,"path":3071,"stem":3072},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":3074,"path":3075,"stem":3076},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":3078,"path":3079,"stem":3080},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":3082,"path":3083,"stem":3084},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":3086,"path":3087,"stem":3088},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":3090,"path":3091,"stem":3092},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":3094,"path":3095,"stem":3096},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":3098,"path":3099,"stem":3100},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":3102,"path":3103,"stem":3104},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":3106,"path":3107,"stem":3108},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":3110,"icon":3111,"path":3112,"stem":3113,"children":3114,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[3115,3119,3123,3127,3131,3135,3139],{"title":3116,"path":3117,"stem":3118},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":3120,"path":3121,"stem":3122},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":3124,"path":3125,"stem":3126},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":3128,"path":3129,"stem":3130},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":3132,"path":3133,"stem":3134},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":3136,"path":3137,"stem":3138},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":3140,"path":3141,"stem":3142},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3144,"icon":3145,"path":3146,"stem":3147,"children":3148,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3149,3153,3157,3161,3165,3169,3173,3177,3181,3185,3189,3193,3197,3201,3205,3209,3213,3217,3221,3225,3229,3233,3237,3241,3245,3249,3253,3257,3261,3265],{"title":3150,"path":3151,"stem":3152},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3154,"path":3155,"stem":3156},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3158,"path":3159,"stem":3160},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3162,"path":3163,"stem":3164},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3166,"path":3167,"stem":3168},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3170,"path":3171,"stem":3172},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3174,"path":3175,"stem":3176},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3178,"path":3179,"stem":3180},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3182,"path":3183,"stem":3184},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3186,"path":3187,"stem":3188},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3190,"path":3191,"stem":3192},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3194,"path":3195,"stem":3196},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3198,"path":3199,"stem":3200},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3202,"path":3203,"stem":3204},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3206,"path":3207,"stem":3208},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3210,"path":3211,"stem":3212},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3214,"path":3215,"stem":3216},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3218,"path":3219,"stem":3220},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3222,"path":3223,"stem":3224},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3226,"path":3227,"stem":3228},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3230,"path":3231,"stem":3232},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3234,"path":3235,"stem":3236},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3238,"path":3239,"stem":3240},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3242,"path":3243,"stem":3244},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3246,"path":3247,"stem":3248},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3250,"path":3251,"stem":3252},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3254,"path":3255,"stem":3256},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3258,"path":3259,"stem":3260},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3262,"path":3263,"stem":3264},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3266,"path":3267,"stem":3268},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3270,"path":3271,"stem":3272,"children":3273,"page":59},"AWS","\u002Faws","13.aws",[3274,3278,3282,3286,3290,3294,3298,3302,3306,3310,3314,3318,3322,3326,3330,3334,3338,3342],{"title":3275,"path":3276,"stem":3277},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3279,"path":3280,"stem":3281},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3283,"path":3284,"stem":3285},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3287,"path":3288,"stem":3289},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3291,"path":3292,"stem":3293},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3295,"path":3296,"stem":3297},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3299,"path":3300,"stem":3301},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3303,"path":3304,"stem":3305},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3307,"path":3308,"stem":3309},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3311,"path":3312,"stem":3313},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3315,"path":3316,"stem":3317},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3319,"path":3320,"stem":3321},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3323,"path":3324,"stem":3325},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3327,"path":3328,"stem":3329},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3331,"path":3332,"stem":3333},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3335,"path":3336,"stem":3337},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3339,"path":3340,"stem":3341},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3343,"path":3344,"stem":3345},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3347,"path":3348,"stem":3349,"children":3350,"page":59},"Ai Development","\u002Fai-development","14.ai-development",[3351],{"title":3352,"path":3353,"stem":3354,"children":3355,"page":59},"Foundations","\u002Fai-development\u002Ffoundations","14.ai-development\u002F00.foundations",[3356],{"title":3357,"path":3358,"stem":3359},"Модуль 0.1. Що таке Large Language Model (LLM)","\u002Fai-development\u002Ffoundations\u002Fwhat-is-llm","14.ai-development\u002F00.foundations\u002F01.what-is-llm",{"title":3361,"path":3362,"stem":3363,"children":3364,"page":59},"React Native","\u002Freact-native","15.react-native",[3365,3386],{"title":3366,"path":3367,"stem":3368,"children":3369,"page":59},"Version1","\u002Freact-native\u002Fversion1","15.react-native\u002Fversion1",[3370,3374,3378,3382],{"title":3371,"path":3372,"stem":3373},"Що таке React Native","\u002Freact-native\u002Fversion1\u002Fwhat-is-react-native","15.react-native\u002Fversion1\u002F01.what-is-react-native",{"title":3375,"path":3376,"stem":3377},"Як влаштований React Native «під капотом»","\u002Freact-native\u002Fversion1\u002Freact-native-architecture","15.react-native\u002Fversion1\u002F02.react-native-architecture",{"title":3379,"path":3380,"stem":3381},"Від React до React Native: ключові відмінності","\u002Freact-native\u002Fversion1\u002Freact-native-vs-react","15.react-native\u002Fversion1\u002F03.react-native-vs-react",{"title":3383,"path":3384,"stem":3385},"View та Text — фундаментальні будівельні блоки","\u002Freact-native\u002Fversion1\u002Fview-and-text","15.react-native\u002Fversion1\u002F04.view-and-text",{"title":3387,"path":3388,"stem":3389,"children":3390,"page":59},"Version2","\u002Freact-native\u002Fversion2","15.react-native\u002Fversion2",[3391,3395,3399,3403,3407,3411,3415,3419,3423,3427,3431,3435,3439,3443,3447,3451,3455,3459,3463,3467,3471,3475,3479,3483,3487,3491],{"title":3392,"path":3393,"stem":3394},"React Native — навіщо він потрібен","\u002Freact-native\u002Fversion2\u002Fwhy-react-native","15.react-native\u002Fversion2\u002F01.why-react-native",{"title":3396,"path":3397,"stem":3398},"Налаштування середовища розробки","\u002Freact-native\u002Fversion2\u002Fenvironment-setup","15.react-native\u002Fversion2\u002F02.environment-setup",{"title":3400,"path":3401,"stem":3402},"Expo і класичний React Native — два шляхи одного фреймворку","\u002Freact-native\u002Fversion2\u002Fexpo-vs-cli-landscape","15.react-native\u002Fversion2\u002F03.expo-vs-cli-landscape",{"title":3404,"path":3405,"stem":3406},"Середовище Expo — перший запуск","\u002Freact-native\u002Fversion2\u002Fexpo-setup-and-tooling","15.react-native\u002Fversion2\u002F04.expo-setup-and-tooling",{"title":3408,"path":3409,"stem":3410},"Структура проєкту та перші UI-примітиви","\u002Freact-native\u002Fversion2\u002Fproject-structure-and-conventions","15.react-native\u002Fversion2\u002F05.project-structure-and-conventions",{"title":3412,"path":3413,"stem":3414},"Базові компоненти React Native","\u002Freact-native\u002Fversion2\u002Fcore-components","15.react-native\u002Fversion2\u002F06.core-components",{"title":3416,"path":3417,"stem":3418},"Flexbox і layout у React Native","\u002Freact-native\u002Fversion2\u002Fflexbox-and-layout","15.react-native\u002Fversion2\u002F07.flexbox-and-layout",{"title":3420,"path":3421,"stem":3422},"StyleSheet і теми (light \u002F dark)","\u002Freact-native\u002Fversion2\u002Fstylesheet-and-theming","15.react-native\u002Fversion2\u002F08.stylesheet-and-theming",{"title":3424,"path":3425,"stem":3426},"Списки та віртуалізація","\u002Freact-native\u002Fversion2\u002Flists-and-virtualization","15.react-native\u002Fversion2\u002F09.lists-and-virtualization",{"title":3428,"path":3429,"stem":3430},"Форми, ввід і валідація","\u002Freact-native\u002Fversion2\u002Fforms-input-validation","15.react-native\u002Fversion2\u002F10.forms-input-validation",{"title":3432,"path":3433,"stem":3434},"Основи Expo Router","\u002Freact-native\u002Fversion2\u002Fexpo-router-basics","15.react-native\u002Fversion2\u002F11.expo-router-basics",{"title":3436,"path":3437,"stem":3438},"Вкладені навігатори та модалки","\u002Freact-native\u002Fversion2\u002Fnested-navigators-and-modals","15.react-native\u002Fversion2\u002F12.nested-navigators-and-modals",{"title":3440,"path":3441,"stem":3442},"Deep linking і параметри маршрутів","\u002Freact-native\u002Fversion2\u002Fdeep-linking-and-params","15.react-native\u002Fversion2\u002F13.deep-linking-and-params",{"title":3444,"path":3445,"stem":3446},"Робота з мережею та життєвий цикл застосунку","\u002Freact-native\u002Fversion2\u002Fnetworking-and-app-lifecycle","15.react-native\u002Fversion2\u002F14.networking-and-app-lifecycle",{"title":3448,"path":3449,"stem":3450},"Redux Toolkit на мобільних платформах","\u002Freact-native\u002Fversion2\u002Fredux-toolkit-on-mobile","15.react-native\u002Fversion2\u002F15.redux-toolkit-on-mobile",{"title":3452,"path":3453,"stem":3454},"RTK Query на мобільних платформах","\u002Freact-native\u002Fversion2\u002Frtk-query-mobile","15.react-native\u002Fversion2\u002F16.rtk-query-mobile",{"title":3456,"path":3457,"stem":3458},"Автентифікація та Безпечне Зберігання","\u002Freact-native\u002Fversion2\u002Fauth-secure-storage","15.react-native\u002Fversion2\u002F18.auth-secure-storage",{"title":3460,"path":3461,"stem":3462},"Локальне сховище — AsyncStorage, MMKV, SQLite","\u002Freact-native\u002Fversion2\u002Flocal-storage-mmkv-sqlite","15.react-native\u002Fversion2\u002F19.local-storage-mmkv-sqlite",{"title":3464,"path":3465,"stem":3466},"Офлайн-First і синхронізація","\u002Freact-native\u002Fversion2\u002Foffline-first-sync","15.react-native\u002Fversion2\u002F20.offline-first-sync",{"title":3468,"path":3469,"stem":3470},"Камера, медіа та файлова система","\u002Freact-native\u002Fversion2\u002Fcamera-media-filesystem","15.react-native\u002Fversion2\u002F21.camera-media-filesystem",{"title":3472,"path":3473,"stem":3474},"Карти та геолокація","\u002Freact-native\u002Fversion2\u002Fmaps-and-location","15.react-native\u002Fversion2\u002F22.maps-and-location",{"title":3476,"path":3477,"stem":3478},"Жести та дотики","\u002Freact-native\u002Fversion2\u002Fgestures-and-touch","15.react-native\u002Fversion2\u002F23.gestures-and-touch",{"title":3480,"path":3481,"stem":3482},"Анімації з Reanimated","\u002Freact-native\u002Fversion2\u002Freanimated-animations","15.react-native\u002Fversion2\u002F24.reanimated-animations",{"title":3484,"path":3485,"stem":3486},"Push і локальні сповіщення","\u002Freact-native\u002Fversion2\u002Fpush-and-local-notifications","15.react-native\u002Fversion2\u002F25.push-and-local-notifications",{"title":3488,"path":3489,"stem":3490},"Доступність та інтернаціоналізація","\u002Freact-native\u002Fversion2\u002Faccessibility-and-i18n","15.react-native\u002Fversion2\u002F26.accessibility-and-i18n",{"title":3492,"path":3493,"stem":3494},"EAS Build та профілі збірки","\u002Freact-native\u002Fversion2\u002Feas-build-and-profiles","15.react-native\u002Fversion2\u002F29.eas-build-and-profiles",{"title":3496,"path":3497,"stem":3498,"children":3499,"page":59},"Ai Python","\u002Fai-python","16.ai-python",[3500,3504,3508],{"title":3501,"path":3502,"stem":3503},"Вступ до штучного інтелекту та машинного навчання","\u002Fai-python\u002Fintro-to-ai","16.ai-python\u002F01.intro-to-ai",{"title":3505,"path":3506,"stem":3507},"Знайомство з Jupyter Notebook та JupyterLab","\u002Fai-python\u002Fjupyter-notebook","16.ai-python\u002F02.jupyter-notebook",{"title":3509,"path":3510,"stem":3511},"Робота з даними з використанням NumPy і pandas","\u002Fai-python\u002Fnumpy-pandas","16.ai-python\u002F03.numpy-pandas",{"title":3513,"icon":658,"path":3514,"stem":3515,"children":3516,"page":59},"Клієнт-серверна архітектура","\u002Fclient-server-architecture","17.client-server-architecture",[3517,3521],{"title":3518,"path":3519,"stem":3520},"Архітектура клієнт-серверних систем та основи Go","\u002Fclient-server-architecture\u002Fclient-server-architecture-and-go","17.client-server-architecture\u002F01.client-server-architecture-and-go",{"title":3522,"path":3523,"stem":3524},"Система типів та модель пам’яті мови Go","\u002Fclient-server-architecture\u002Ftype-system-and-memory-model","17.client-server-architecture\u002F02.type-system-and-memory-model",{"title":3526,"icon":1946,"path":3527,"stem":3528,"children":3529,"page":59},"Розробка WEB-застосувань","\u002Fweb-development","18.web-development",[3530,3575,3613,3642],{"title":3531,"icon":658,"path":3532,"stem":3533,"children":3534,"page":59},"Архітектура комп'ютерних мереж та мережеві протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols","18.web-development\u002F01.network-architecture-and-protocols",[3535,3539,3543,3547,3551,3555,3559,3563,3567,3571],{"title":3536,"path":3537,"stem":3538},"Еволюція веброзробки та модель клієнт-сервер","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fweb-evolution-client-server","18.web-development\u002F01.network-architecture-and-protocols\u002F01.web-evolution-client-server",{"title":3540,"path":3541,"stem":3542},"Еталонна модель OSI","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fosi-model","18.web-development\u002F01.network-architecture-and-protocols\u002F02.osi-model",{"title":3544,"path":3545,"stem":3546},"Стек протоколів TCP\u002FIP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-ip-stack","18.web-development\u002F01.network-architecture-and-protocols\u002F03.tcp-ip-stack",{"title":3548,"path":3549,"stem":3550},"IP-адресація, порти та сокети","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fip-addressing-ports-sockets","18.web-development\u002F01.network-architecture-and-protocols\u002F04.ip-addressing-ports-sockets",{"title":3552,"path":3553,"stem":3554},"Протоколи TCP та UDP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-udp-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F05.tcp-udp-protocols",{"title":3556,"path":3557,"stem":3558},"Система доменних імен DNS","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fdns-system","18.web-development\u002F01.network-architecture-and-protocols\u002F06.dns-system",{"title":3560,"path":3561,"stem":3562},"Протокол SMTP та поштові протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fsmtp-email-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F07.smtp-email-protocols",{"title":3564,"path":3565,"stem":3566},"Протокол WebSocket","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fwebsocket-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F08.websocket-protocol",{"title":3568,"path":3569,"stem":3570},"Протокол SSH","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fssh-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F09.ssh-protocol",{"title":3572,"path":3573,"stem":3574},"Огляд сучасних серверних технологій","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fmodern-backend-technologies","18.web-development\u002F01.network-architecture-and-protocols\u002F10.modern-backend-technologies",{"title":3576,"icon":3577,"path":3578,"stem":3579,"children":3580,"page":59},"Протокол HTTP та захищена передача даних HTTPS","i-lucide-lock","\u002Fweb-development\u002Fhttp-and-https","18.web-development\u002F02.http-and-https",[3581,3585,3589,3593,3597,3601,3605,3609],{"title":3582,"path":3583,"stem":3584},"Вступ до протоколу HTTP та еволюція веб-технологій","\u002Fweb-development\u002Fhttp-and-https\u002Fintroduction-and-evolution","18.web-development\u002F02.http-and-https\u002F01.introduction-and-evolution",{"title":3586,"path":3587,"stem":3588},"Анатомія HTTP-запиту","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-request-structure","18.web-development\u002F02.http-and-https\u002F02.http-request-structure",{"title":3590,"path":3591,"stem":3592},"Анатомія HTTP-відповіді","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-response-structure","18.web-development\u002F02.http-and-https\u002F03.http-response-structure",{"title":3594,"path":3595,"stem":3596},"Методи HTTP та їхня семантика","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-methods","18.web-development\u002F02.http-and-https\u002F04.http-methods",{"title":3598,"path":3599,"stem":3600},"Коди статусу HTTP та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-status-codes","18.web-development\u002F02.http-and-https\u002F05.http-status-codes",{"title":3602,"path":3603,"stem":3604},"HTTP-заголовки та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-headers","18.web-development\u002F02.http-and-https\u002F06.http-headers",{"title":3606,"path":3607,"stem":3608},"CORS та механізми безпеки HTTP","\u002Fweb-development\u002Fhttp-and-https\u002Fcors-and-security","18.web-development\u002F02.http-and-https\u002F07.cors-and-security",{"title":3610,"path":3611,"stem":3612},"HTTPS та криптографічні основи TLS","\u002Fweb-development\u002Fhttp-and-https\u002Fhttps-and-tls","18.web-development\u002F02.http-and-https\u002F08.https-and-tls",{"title":3614,"icon":2326,"path":3615,"stem":3616,"children":3617,"page":59},"Система типів мови TypeScript","\u002Fweb-development\u002Ftypescript-type-system","18.web-development\u002F03.typescript-type-system",[3618,3622,3626,3630,3634,3638],{"title":3619,"path":3620,"stem":3621},"Знайомство з TypeScript Compiler","\u002Fweb-development\u002Ftypescript-type-system\u002Fintroduction-compiler-config","18.web-development\u002F03.typescript-type-system\u002F01.introduction-compiler-config",{"title":3623,"path":3624,"stem":3625},"Примітивні типи даних: string, number, boolean","\u002Fweb-development\u002Ftypescript-type-system\u002Fprimitive-special-types","18.web-development\u002F03.typescript-type-system\u002F02.primitive-special-types",{"title":3627,"path":3628,"stem":3629},"Масиви, кортежі та об","\u002Fweb-development\u002Ftypescript-type-system\u002Farrays-tuples-objects","18.web-development\u002F03.typescript-type-system\u002F03.arrays-tuples-objects",{"title":3631,"path":3632,"stem":3633},"Union типи, Intersection типи та літеральні типи","\u002Fweb-development\u002Ftypescript-type-system\u002Funion-intersection-literals","18.web-development\u002F03.typescript-type-system\u002F04.union-intersection-literals",{"title":3635,"path":3636,"stem":3637},"Type Narrowing (звуження типів)","\u002Fweb-development\u002Ftypescript-type-system\u002Ftype-narrowing","18.web-development\u002F03.typescript-type-system\u002F05.type-narrowing",{"title":3639,"path":3640,"stem":3641},"Типізація функцій","\u002Fweb-development\u002Ftypescript-type-system\u002Ffunctions-typing","18.web-development\u002F03.typescript-type-system\u002F06.functions-typing",{"title":3643,"icon":2326,"path":3644,"stem":3645,"children":3646,"page":59},"Розширені засоби мови TypeScript","\u002Fweb-development\u002Ftypescript-advanced","18.web-development\u002F04.typescript-advanced",[3647,3651,3655,3659,3663,3667],{"title":3648,"path":3649,"stem":3650},"Interfaces та Classes","\u002Fweb-development\u002Ftypescript-advanced\u002Finterfaces-classes","18.web-development\u002F04.typescript-advanced\u002F01.interfaces-classes",{"title":3652,"path":3653,"stem":3654},"Основи Generic типів","\u002Fweb-development\u002Ftypescript-advanced\u002Fgenerics-fundamentals","18.web-development\u002F04.typescript-advanced\u002F02.generics-fundamentals",{"title":3656,"path":3657,"stem":3658},"Enums та Decorators","\u002Fweb-development\u002Ftypescript-advanced\u002Fenums-decorators","18.web-development\u002F04.typescript-advanced\u002F03.enums-decorators",{"title":3660,"path":3661,"stem":3662},"Utility Types","\u002Fweb-development\u002Ftypescript-advanced\u002Futility-types","18.web-development\u002F04.typescript-advanced\u002F04.utility-types",{"title":3664,"path":3665,"stem":3666},"Mapped та Conditional Types","\u002Fweb-development\u002Ftypescript-advanced\u002Fmapped-conditional-types","18.web-development\u002F04.typescript-advanced\u002F05.mapped-conditional-types",{"title":3668,"path":3669,"stem":3670},"Модулі та Strict Mode","\u002Fweb-development\u002Ftypescript-advanced\u002Fmodules-strict-mode","18.web-development\u002F04.typescript-advanced\u002F06.modules-strict-mode",{"title":3672,"path":3673,"stem":3674,"children":3675,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[3676,3680,3684,3688,3692,3696,3700,3704,3708,3712,3716,3720],{"title":3677,"path":3678,"stem":3679},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":3681,"path":3682,"stem":3683},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":3685,"path":3686,"stem":3687},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":3689,"path":3690,"stem":3691},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":3693,"path":3694,"stem":3695},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":3697,"path":3698,"stem":3699},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":3701,"path":3702,"stem":3703},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":3705,"path":3706,"stem":3707},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":3709,"path":3710,"stem":3711},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":3713,"path":3714,"stem":3715},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":3717,"path":3718,"stem":3719},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":3721,"path":3722,"stem":3723},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":3725,"path":3726,"stem":3727},"Тестування компонентів діаграм","\u002Ftest-components","98.test-components",{"id":3729,"title":3598,"body":3730,"description":4052,"extension":12662,"links":12663,"meta":12664,"navigation":4130,"path":3599,"seo":12665,"stem":3600,"__hash__":12666},"docs\u002F18.web-development\u002F02.http-and-https\u002F05.http-status-codes.md",{"type":3731,"value":3732,"toc":12595},"minimark",[3733,3737,3804,3807,3812,3824,3829,3952,3969,3971,3975,3993,4001,4005,4015,4036,4041,4046,4166,4171,4191,4196,4204,4209,4298,4302,4311,4326,4331,4336,4403,4408,4481,4485,4490,4496,4501,4520,4523,4527,4540,4544,4549,4596,4599,4604,4757,4760,4762,4766,4776,4780,4785,4790,4795,4822,4827,4919,4924,4967,4971,5046,5050,5062,5067,5072,5142,5146,5242,5262,5266,5279,5284,5289,5353,5357,5439,5445,5463,5468,5527,5532,5592,5596,5605,5610,5614,5623,5628,5633,5661,5665,5694,5697,5702,5756,5760,5777,5781,5790,5795,5799,5818,5823,5828,5864,5868,5949,5952,5966,5982,5984,5988,5997,6001,6010,6015,6019,6035,6040,6044,6049,6076,6080,6117,6128,6148,6152,6164,6169,6174,6179,6215,6219,6265,6275,6279,6288,6293,6298,6303,6357,6362,6398,6403,6421,6426,6484,6487,6491,6510,6515,6520,6525,6560,6565,6611,6614,6619,6703,6707,6716,6724,6728,6733,6787,6791,6827,6833,6837,6845,6849,6877,6880,6882,6886,6899,6903,6916,6921,6926,6930,6980,6985,6989,7044,7049,7053,7104,7108,7193,7197,7206,7216,7221,7226,7230,7256,7260,7323,7333,7338,7342,7368,7372,7431,7435,7444,7449,7453,7469,7474,7498,7503,7508,7535,7539,7592,7596,7604,7609,7613,7617,7643,7647,7700,7723,7727,7740,7745,7749,7754,7772,7776,7838,7842,7853,7857,7862,7888,7893,7946,7950,7959,7964,7968,7977,7982,7986,8037,8041,8102,8107,8111,8164,8169,8228,8232,8244,8249,8266,8270,8274,8292,8296,8349,8353,8360,8364,8369,8418,8422,8475,8479,8488,8492,8497,8551,8556,8629,8634,8638,8649,8653,8658,8716,8721,8782,8786,8799,8804,8818,8822,8826,8889,8894,8968,8972,8984,8989,8993,8998,9016,9021,9112,9117,9143,9147,9156,9160,9164,9191,9195,9372,9384,9386,9390,9403,9407,9416,9421,9425,9429,9447,9452,9515,9531,9535,9543,9547,9552,9589,9594,9647,9651,9664,9669,9674,9678,9703,9708,9840,9844,9855,9860,9864,9868,9885,9889,9961,9967,9971,9980,9985,9999,10003,10008,10026,10031,10092,10096,10109,10114,10118,10145,10150,10380,10382,10386,11030,11032,11036,11043,11047,11124,11128,11211,11215,11274,11278,11333,11337,11391,11395,11461,11463,11467,11609,11611,11615,11700,11703,11779,11868,12113,12348,12548,12550,12552,12556,12582,12591],[3734,3735,3598],"h1",{"id":3736},"коди-статусу-http-та-їхнє-призначення",[3738,3739,3740,3761],"card-group",{},[3741,3742,3745],"card",{"icon":3743,"title":3744},"i-lucide-target","🎯 Мета розділу",[3746,3747,3748,3752,3755,3758],"ul",{},[3749,3750,3751],"li",{},"Опанувати класифікацію кодів статусу HTTP за групами (1xx, 2xx, 3xx, 4xx, 5xx).",[3749,3753,3754],{},"Зрозуміти семантику найпоширеніших кодів статусу та контекст їхнього використання.",[3749,3756,3757],{},"Навчитися правильно обирати код статусу для різних сценаріїв у REST API.",[3749,3759,3760],{},"Засвоїти різницю між схожими кодами (200 vs 201, 401 vs 403, 301 vs 302).",[3741,3762,3765],{"icon":3763,"title":3764},"i-lucide-key","🔑 Ключові терміни",[3746,3766,3767,3774,3780,3786,3792,3798],{},[3749,3768,3769,3773],{},[3770,3771,3772],"strong",{},"Status Code"," — тризначне число у HTTP-відповіді, що вказує на результат обробки запиту.",[3749,3775,3776,3779],{},[3770,3777,3778],{},"Informational (1xx)"," — інформаційні відповіді, обробка запиту продовжується.",[3749,3781,3782,3785],{},[3770,3783,3784],{},"Successful (2xx)"," — успішна обробка запиту.",[3749,3787,3788,3791],{},[3770,3789,3790],{},"Redirection (3xx)"," — клієнт повинен виконати додаткові дії для завершення запиту.",[3749,3793,3794,3797],{},[3770,3795,3796],{},"Client Error (4xx)"," — помилка у запиті клієнта.",[3749,3799,3800,3803],{},[3770,3801,3802],{},"Server Error (5xx)"," — помилка на сервері при обробці валідного запиту.",[3805,3806],"hr",{},[3808,3809,3811],"h2",{"id":3810},"класифікація-кодів-статусу","Класифікація кодів статусу",[3813,3814,3815,3816,3819,3820,3823],"p",{},"Коди статусу HTTP є ",[3770,3817,3818],{},"тризначними числами",", де ",[3770,3821,3822],{},"перша цифра"," визначає категорію відповіді. Усього існує п'ять категорій, кожна з яких має чітко визначену семантику:",[3825,3826,3828],"h3",{"id":3827},"загальна-класифікація","Загальна класифікація",[3830,3831,3832,3851],"table",{},[3833,3834,3835],"thead",{},[3836,3837,3838,3842,3845,3848],"tr",{},[3839,3840,3841],"th",{},"Діапазон",[3839,3843,3844],{},"Категорія",[3839,3846,3847],{},"Семантика",[3839,3849,3850],{},"Дія клієнта",[3852,3853,3854,3876,3895,3914,3933],"tbody",{},[3836,3855,3856,3862,3870,3873],{},[3857,3858,3859],"td",{},[3770,3860,3861],{},"1xx",[3857,3863,3864,3865,3869],{},"Інформаційні (",[3866,3867,3868],"em",{},"Informational",")",[3857,3871,3872],{},"Проміжна відповідь, запит отримано та обробляється",[3857,3874,3875],{},"Очікувати фінальну відповідь",[3836,3877,3878,3883,3889,3892],{},[3857,3879,3880],{},[3770,3881,3882],{},"2xx",[3857,3884,3885,3886,3869],{},"Успішні (",[3866,3887,3888],{},"Successful",[3857,3890,3891],{},"Запит успішно оброблено",[3857,3893,3894],{},"Використовувати отримані дані",[3836,3896,3897,3902,3908,3911],{},[3857,3898,3899],{},[3770,3900,3901],{},"3xx",[3857,3903,3904,3905,3869],{},"Перенаправлення (",[3866,3906,3907],{},"Redirection",[3857,3909,3910],{},"Потрібні додаткові дії для завершення запиту",[3857,3912,3913],{},"Перейти за новою адресою",[3836,3915,3916,3921,3927,3930],{},[3857,3917,3918],{},[3770,3919,3920],{},"4xx",[3857,3922,3923,3924,3869],{},"Помилки клієнта (",[3866,3925,3926],{},"Client Error",[3857,3928,3929],{},"Запит містить помилку або не може бути оброблений",[3857,3931,3932],{},"Виправити запит та повторити",[3836,3934,3935,3940,3946,3949],{},[3857,3936,3937],{},[3770,3938,3939],{},"5xx",[3857,3941,3942,3943,3869],{},"Помилки сервера (",[3866,3944,3945],{},"Server Error",[3857,3947,3948],{},"Сервер не зміг обробити валідний запит",[3857,3950,3951],{},"Повторити пізніше або звернутися до адміністратора",[3953,3954,3955,3956,3959,3960,3963,3964,3968],"note",{},"Клієнтські додатки ",[3770,3957,3958],{},"повинні"," базувати логіку на ",[3770,3961,3962],{},"першій цифрі"," коду статусу, навіть якщо конкретний код невідомий. Наприклад, якщо клієнт отримує код ",[3965,3966,3967],"code",{},"299"," (нестандартний), він повинен інтерпретувати його як успішну відповідь (2xx), а не як помилку.",[3805,3970],{},[3808,3972,3974],{"id":3973},"група-1xx-інформаційні-відповіді","Група 1xx: Інформаційні відповіді",[3813,3976,3977,3978,3980,3981,3984,3985,3988,3989,3992],{},"Коди статусу діапазону ",[3770,3979,3861],{}," є ",[3770,3982,3983],{},"проміжними відповідями"," (",[3866,3986,3987],{},"interim responses","), які інформують клієнта про те, що запит отримано та обробка продовжується. Ці коди ",[3770,3990,3991],{},"не є фінальними"," — після них завжди слідує фінальна відповідь (2xx, 3xx, 4xx або 5xx).",[3994,3995,3996,3997,4000],"warning",{},"Інформаційні відповіді ",[3770,3998,3999],{},"рідко використовуються"," у сучасних REST API та веб-застосунках. Більшість клієнтських бібліотек автоматично обробляють їх прозоро для розробника. Проте розуміння їхньої семантики є важливим для низькорівневої мережевої розробки.",[3825,4002,4004],{"id":4003},"_100-continue-продовження-надсилання-тіла","100 Continue — Продовження надсилання тіла",[3813,4006,4007,4010,4011,4014],{},[3770,4008,4009],{},"Призначення:"," Клієнт надіслав частину запиту (стартовий рядок та заголовки) з заголовком ",[3965,4012,4013],{},"Expect: 100-continue"," та очікує підтвердження від сервера перед надсиланням (потенційно великого) тіла запиту.",[3813,4016,4017,4020,4023,4024,4027,4028,4031,4032,4035],{},[3770,4018,4019],{},"Використання:",[4021,4022],"br",{},"\nПеред відправкою великого файлу (наприклад, 2 ГБ відео) клієнт може спочатку надіслати заголовки, щоб перевірити, чи сервер готовий прийняти такий запит (чи достатньо місця, чи коректний ",[3965,4025,4026],{},"Content-Type",", чи є права доступу). Якщо сервер відповідає ",[3965,4029,4030],{},"100 Continue",", клієнт продовжує надсилати тіло. Якщо сервер повертає ",[3965,4033,4034],{},"417 Expectation Failed"," або іншу помилку, клієнт економить пропускну здатність, не відправляючи великий файл.",[3813,4037,4038],{},[3770,4039,4040],{},"Приклад взаємодії:",[3813,4042,4043],{},[3770,4044,4045],{},"Крок 1: Клієнт надсилає запит з Expect: 100-continue",[4047,4048,4053],"pre",{"className":4049,"code":4050,"language":4051,"meta":4052,"style":4052},"language-http shiki shiki-themes light-plus dark-plus dark-plus","POST \u002Fapi\u002Fv1\u002Fvideos\u002Fupload HTTP\u002F1.1\nHost: media.example.com\nContent-Type: video\u002Fmp4\nContent-Length: 2147483648\nExpect: 100-continue\n\n[Клієнт очікує відповідь перед надсиланням 2 ГБ тіла]\n","http","",[3965,4054,4055,4079,4093,4103,4114,4125,4132],{"__ignoreMap":4052},[4056,4057,4060,4064,4068,4072,4075],"span",{"class":4058,"line":4059},"line",1,[4056,4061,4063],{"class":4062},"s8xlr","POST",[4056,4065,4067],{"class":4066},"sHH4Y"," \u002Fapi\u002Fv1\u002Fvideos\u002Fupload ",[4056,4069,4071],{"class":4070},"su1O8","HTTP",[4056,4073,4074],{"class":4066},"\u002F",[4056,4076,4078],{"class":4077},"sJj4R","1.1\n",[4056,4080,4082,4086,4089],{"class":4058,"line":4081},2,[4056,4083,4085],{"class":4084},"sKtos","Host",[4056,4087,4088],{"class":4070},":",[4056,4090,4092],{"class":4091},"sbdoH"," media.example.com\n",[4056,4094,4096,4098,4100],{"class":4058,"line":4095},3,[4056,4097,4026],{"class":4084},[4056,4099,4088],{"class":4070},[4056,4101,4102],{"class":4091}," video\u002Fmp4\n",[4056,4104,4106,4109,4111],{"class":4058,"line":4105},4,[4056,4107,4108],{"class":4084},"Content-Length",[4056,4110,4088],{"class":4070},[4056,4112,4113],{"class":4091}," 2147483648\n",[4056,4115,4117,4120,4122],{"class":4058,"line":4116},5,[4056,4118,4119],{"class":4084},"Expect",[4056,4121,4088],{"class":4070},[4056,4123,4124],{"class":4091}," 100-continue\n",[4056,4126,4128],{"class":4058,"line":4127},6,[4056,4129,4131],{"emptyLinePlaceholder":4130},true,"\n",[4056,4133,4135,4138,4142,4145,4148,4151,4154,4157,4160,4163],{"class":4058,"line":4134},7,[4056,4136,4137],{"class":4066},"[",[4056,4139,4141],{"class":4140},"se1LK","Клієнт",[4056,4143,4144],{"class":4140}," очікує",[4056,4146,4147],{"class":4140}," відповідь",[4056,4149,4150],{"class":4140}," перед",[4056,4152,4153],{"class":4140}," надсиланням",[4056,4155,4156],{"class":4077}," 2",[4056,4158,4159],{"class":4140}," ГБ",[4056,4161,4162],{"class":4140}," тіла",[4056,4164,4165],{"class":4066},"]\n",[3813,4167,4168],{},[3770,4169,4170],{},"Крок 2: Сервер підтверджує готовність",[4047,4172,4174],{"className":4049,"code":4173,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 100 Continue\n\n",[3965,4175,4176],{"__ignoreMap":4052},[4056,4177,4178,4180,4182,4185,4188],{"class":4058,"line":4059},[4056,4179,4071],{"class":4070},[4056,4181,4074],{"class":4066},[4056,4183,4184],{"class":4077},"1.1",[4056,4186,4187],{"class":4077}," 100",[4056,4189,4190],{"class":4091}," Continue\n",[3813,4192,4193],{},[3770,4194,4195],{},"Крок 3: Клієнт надсилає тіло",[4047,4197,4202],{"className":4198,"code":4200,"language":4201},[4199],"language-text","[2 ГБ бінарних даних відео]\n","text",[3965,4203,4200],{"__ignoreMap":4052},[3813,4205,4206],{},[3770,4207,4208],{},"Крок 4: Фінальна відповідь",[4047,4210,4212],{"className":4049,"code":4211,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 201 Created\nLocation: https:\u002F\u002Fmedia.example.com\u002Fapi\u002Fv1\u002Fvideos\u002Fxyz789\nContent-Type: application\u002Fjson\nContent-Length: 123\n\n{\"id\":\"xyz789\",\"status\":\"processing\",\"uploadedAt\":\"2026-08-29T13:00:00Z\"}\n",[3965,4213,4214,4228,4238,4247,4256,4260],{"__ignoreMap":4052},[4056,4215,4216,4218,4220,4222,4225],{"class":4058,"line":4059},[4056,4217,4071],{"class":4070},[4056,4219,4074],{"class":4066},[4056,4221,4184],{"class":4077},[4056,4223,4224],{"class":4077}," 201",[4056,4226,4227],{"class":4091}," Created\n",[4056,4229,4230,4233,4235],{"class":4058,"line":4081},[4056,4231,4232],{"class":4084},"Location",[4056,4234,4088],{"class":4070},[4056,4236,4237],{"class":4091}," https:\u002F\u002Fmedia.example.com\u002Fapi\u002Fv1\u002Fvideos\u002Fxyz789\n",[4056,4239,4240,4242,4244],{"class":4058,"line":4095},[4056,4241,4026],{"class":4084},[4056,4243,4088],{"class":4070},[4056,4245,4246],{"class":4091}," application\u002Fjson\n",[4056,4248,4249,4251,4253],{"class":4058,"line":4105},[4056,4250,4108],{"class":4084},[4056,4252,4088],{"class":4070},[4056,4254,4255],{"class":4091}," 123\n",[4056,4257,4258],{"class":4058,"line":4116},[4056,4259,4131],{"emptyLinePlaceholder":4130},[4056,4261,4262,4265,4269,4271,4274,4277,4280,4282,4285,4287,4290,4292,4295],{"class":4058,"line":4127},[4056,4263,4264],{"class":4066},"{",[4056,4266,4268],{"class":4267},"sLwNe","\"id\"",[4056,4270,4088],{"class":4066},[4056,4272,4273],{"class":4091},"\"xyz789\"",[4056,4275,4276],{"class":4066},",",[4056,4278,4279],{"class":4267},"\"status\"",[4056,4281,4088],{"class":4066},[4056,4283,4284],{"class":4091},"\"processing\"",[4056,4286,4276],{"class":4066},[4056,4288,4289],{"class":4267},"\"uploadedAt\"",[4056,4291,4088],{"class":4066},[4056,4293,4294],{"class":4091},"\"2026-08-29T13:00:00Z\"",[4056,4296,4297],{"class":4066},"}\n",[3825,4299,4301],{"id":4300},"_101-switching-protocols-перемикання-протоколів","101 Switching Protocols — Перемикання протоколів",[3813,4303,4304,4306,4307,4310],{},[3770,4305,4009],{}," Сервер погоджується змінити протокол на той, який запитав клієнт через заголовок ",[3965,4308,4309],{},"Upgrade",".",[3813,4312,4313,4315,4317,4318,4321,4322,4325],{},[3770,4314,4019],{},[4021,4316],{},"\nНайчастіше використовується для ",[3770,4319,4320],{},"апгрейду HTTP-з'єднання до WebSocket",". Після відповіді ",[3965,4323,4324],{},"101"," з'єднання більше не є HTTP — воно стає WebSocket, і обидві сторони обмінюються бінарними фреймами.",[3813,4327,4328],{},[3770,4329,4330],{},"Приклад апгрейду до WebSocket:",[3813,4332,4333],{},[3770,4334,4335],{},"Запит клієнта:",[4047,4337,4339],{"className":4049,"code":4338,"language":4051,"meta":4052,"style":4052},"GET \u002Fchat HTTP\u002F1.1\nHost: realtime.example.com\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\nSec-WebSocket-Version: 13\n",[3965,4340,4341,4355,4364,4373,4383,4393],{"__ignoreMap":4052},[4056,4342,4343,4346,4349,4351,4353],{"class":4058,"line":4059},[4056,4344,4345],{"class":4062},"GET",[4056,4347,4348],{"class":4066}," \u002Fchat ",[4056,4350,4071],{"class":4070},[4056,4352,4074],{"class":4066},[4056,4354,4078],{"class":4077},[4056,4356,4357,4359,4361],{"class":4058,"line":4081},[4056,4358,4085],{"class":4084},[4056,4360,4088],{"class":4070},[4056,4362,4363],{"class":4091}," realtime.example.com\n",[4056,4365,4366,4368,4370],{"class":4058,"line":4095},[4056,4367,4309],{"class":4084},[4056,4369,4088],{"class":4070},[4056,4371,4372],{"class":4091}," websocket\n",[4056,4374,4375,4378,4380],{"class":4058,"line":4105},[4056,4376,4377],{"class":4084},"Connection",[4056,4379,4088],{"class":4070},[4056,4381,4382],{"class":4091}," Upgrade\n",[4056,4384,4385,4388,4390],{"class":4058,"line":4116},[4056,4386,4387],{"class":4084},"Sec-WebSocket-Key",[4056,4389,4088],{"class":4070},[4056,4391,4392],{"class":4091}," dGhlIHNhbXBsZSBub25jZQ==\n",[4056,4394,4395,4398,4400],{"class":4058,"line":4127},[4056,4396,4397],{"class":4084},"Sec-WebSocket-Version",[4056,4399,4088],{"class":4070},[4056,4401,4402],{"class":4091}," 13\n",[3813,4404,4405],{},[3770,4406,4407],{},"Відповідь сервера:",[4047,4409,4411],{"className":4049,"code":4410,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 101 Switching Protocols\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\n\n[Після цього рядка з'єднання стає WebSocket]\n",[3965,4412,4413,4427,4435,4443,4453,4457],{"__ignoreMap":4052},[4056,4414,4415,4417,4419,4421,4424],{"class":4058,"line":4059},[4056,4416,4071],{"class":4070},[4056,4418,4074],{"class":4066},[4056,4420,4184],{"class":4077},[4056,4422,4423],{"class":4077}," 101",[4056,4425,4426],{"class":4091}," Switching Protocols\n",[4056,4428,4429,4431,4433],{"class":4058,"line":4081},[4056,4430,4309],{"class":4084},[4056,4432,4088],{"class":4070},[4056,4434,4372],{"class":4091},[4056,4436,4437,4439,4441],{"class":4058,"line":4095},[4056,4438,4377],{"class":4084},[4056,4440,4088],{"class":4070},[4056,4442,4382],{"class":4091},[4056,4444,4445,4448,4450],{"class":4058,"line":4105},[4056,4446,4447],{"class":4084},"Sec-WebSocket-Accept",[4056,4449,4088],{"class":4070},[4056,4451,4452],{"class":4091}," s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\n",[4056,4454,4455],{"class":4058,"line":4116},[4056,4456,4131],{"emptyLinePlaceholder":4130},[4056,4458,4459,4461,4464,4467,4470,4473,4476,4479],{"class":4058,"line":4127},[4056,4460,4137],{"class":4066},[4056,4462,4463],{"class":4140},"Після",[4056,4465,4466],{"class":4140}," цього",[4056,4468,4469],{"class":4140}," рядка",[4056,4471,4472],{"class":4140}," з'єднання",[4056,4474,4475],{"class":4140}," стає",[4056,4477,4478],{"class":4140}," WebSocket",[4056,4480,4165],{"class":4066},[3825,4482,4484],{"id":4483},"_102-processing-обробка-webdav","102 Processing — Обробка (WebDAV)",[3813,4486,4487,4489],{},[3770,4488,4009],{}," Сервер отримав запит та обробляє його, але фінальної відповіді ще немає. Використовується для запобігання таймауту клієнта при довготривалих операціях.",[3813,4491,4492,4495],{},[3770,4493,4494],{},"Контекст:"," Розширення WebDAV (RFC 2518) для роботи з файловими системами через HTTP.",[3813,4497,4498],{},[3770,4499,4500],{},"Приклад:",[4047,4502,4504],{"className":4049,"code":4503,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 102 Processing\n\n",[3965,4505,4506],{"__ignoreMap":4052},[4056,4507,4508,4510,4512,4514,4517],{"class":4058,"line":4059},[4056,4509,4071],{"class":4070},[4056,4511,4074],{"class":4066},[4056,4513,4184],{"class":4077},[4056,4515,4516],{"class":4077}," 102",[4056,4518,4519],{"class":4091}," Processing\n",[3813,4521,4522],{},"Сервер продовжує обробку, клієнт очікує фінальну відповідь.",[3825,4524,4526],{"id":4525},"_103-early-hints-ранні-підказки-експериментальний","103 Early Hints — Ранні підказки (експериментальний)",[3813,4528,4529,4531,4532,4535,4536,4539],{},[3770,4530,4009],{}," Сервер надсилає клієнту ",[3770,4533,4534],{},"підказки про ресурси",", які будуть потрібні для рендерингу сторінки, ",[3770,4537,4538],{},"перед формуванням фінальної відповіді",". Це дозволяє браузеру почати завантаження CSS, JavaScript, шрифтів паралельно з обробкою запиту на сервері.",[3813,4541,4542],{},[3770,4543,4500],{},[3813,4545,4546],{},[3770,4547,4548],{},"Крок 1: Ранні підказки",[4047,4550,4552],{"className":4049,"code":4551,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 103 Early Hints\nLink: \u003C\u002Fstyles\u002Fmain.css>; rel=preload; as=style\nLink: \u003C\u002Fscripts\u002Fapp.js>; rel=preload; as=script\nLink: \u003C\u002Ffonts\u002Froboto.woff2>; rel=preload; as=font; crossorigin\n\n",[3965,4553,4554,4568,4578,4587],{"__ignoreMap":4052},[4056,4555,4556,4558,4560,4562,4565],{"class":4058,"line":4059},[4056,4557,4071],{"class":4070},[4056,4559,4074],{"class":4066},[4056,4561,4184],{"class":4077},[4056,4563,4564],{"class":4077}," 103",[4056,4566,4567],{"class":4091}," Early Hints\n",[4056,4569,4570,4573,4575],{"class":4058,"line":4081},[4056,4571,4572],{"class":4084},"Link",[4056,4574,4088],{"class":4070},[4056,4576,4577],{"class":4091}," \u003C\u002Fstyles\u002Fmain.css>; rel=preload; as=style\n",[4056,4579,4580,4582,4584],{"class":4058,"line":4095},[4056,4581,4572],{"class":4084},[4056,4583,4088],{"class":4070},[4056,4585,4586],{"class":4091}," \u003C\u002Fscripts\u002Fapp.js>; rel=preload; as=script\n",[4056,4588,4589,4591,4593],{"class":4058,"line":4105},[4056,4590,4572],{"class":4084},[4056,4592,4088],{"class":4070},[4056,4594,4595],{"class":4091}," \u003C\u002Ffonts\u002Froboto.woff2>; rel=preload; as=font; crossorigin\n",[3813,4597,4598],{},"Браузер починає завантажувати ці ресурси.",[3813,4600,4601],{},[3770,4602,4603],{},"Крок 2: Фінальна відповідь (через 300 мс після обробки на сервері)",[4047,4605,4607],{"className":4049,"code":4606,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 200 OK\nContent-Type: text\u002Fhtml; charset=utf-8\nContent-Length: 5678\n\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003Clink rel=\"stylesheet\" href=\"\u002Fstyles\u002Fmain.css\">\n    \u003Cscript src=\"\u002Fscripts\u002Fapp.js\">\u003C\u002Fscript>\n\u003C\u002Fhead>\n...\n\u003C\u002Fhtml>\n",[3965,4608,4609,4623,4632,4641,4645,4660,4670,4679,4709,4732,4742,4748],{"__ignoreMap":4052},[4056,4610,4611,4613,4615,4617,4620],{"class":4058,"line":4059},[4056,4612,4071],{"class":4070},[4056,4614,4074],{"class":4066},[4056,4616,4184],{"class":4077},[4056,4618,4619],{"class":4077}," 200",[4056,4621,4622],{"class":4091}," OK\n",[4056,4624,4625,4627,4629],{"class":4058,"line":4081},[4056,4626,4026],{"class":4084},[4056,4628,4088],{"class":4070},[4056,4630,4631],{"class":4091}," text\u002Fhtml; charset=utf-8\n",[4056,4633,4634,4636,4638],{"class":4058,"line":4095},[4056,4635,4108],{"class":4084},[4056,4637,4088],{"class":4070},[4056,4639,4640],{"class":4091}," 5678\n",[4056,4642,4643],{"class":4058,"line":4105},[4056,4644,4131],{"emptyLinePlaceholder":4130},[4056,4646,4647,4651,4654,4657],{"class":4058,"line":4116},[4056,4648,4650],{"class":4649},"s0P7L","\u003C!",[4056,4652,4653],{"class":4070},"DOCTYPE",[4056,4655,4656],{"class":4070}," html",[4056,4658,4659],{"class":4649},">\n",[4056,4661,4662,4665,4668],{"class":4058,"line":4127},[4056,4663,4664],{"class":4649},"\u003C",[4056,4666,4667],{"class":4084},"html",[4056,4669,4659],{"class":4649},[4056,4671,4672,4674,4677],{"class":4058,"line":4134},[4056,4673,4664],{"class":4649},[4056,4675,4676],{"class":4084},"head",[4056,4678,4659],{"class":4649},[4056,4680,4682,4685,4688,4692,4695,4699,4702,4704,4707],{"class":4058,"line":4681},8,[4056,4683,4684],{"class":4649},"    \u003C",[4056,4686,4687],{"class":4084},"link",[4056,4689,4691],{"class":4690},"sa4r_"," rel",[4056,4693,4694],{"class":4066},"=",[4056,4696,4698],{"class":4697},"su9tN","\"stylesheet\"",[4056,4700,4701],{"class":4690}," href",[4056,4703,4694],{"class":4066},[4056,4705,4706],{"class":4697},"\"\u002Fstyles\u002Fmain.css\"",[4056,4708,4659],{"class":4649},[4056,4710,4712,4714,4717,4720,4722,4725,4728,4730],{"class":4058,"line":4711},9,[4056,4713,4684],{"class":4649},[4056,4715,4716],{"class":4084},"script",[4056,4718,4719],{"class":4690}," src",[4056,4721,4694],{"class":4066},[4056,4723,4724],{"class":4697},"\"\u002Fscripts\u002Fapp.js\"",[4056,4726,4727],{"class":4649},">\u003C\u002F",[4056,4729,4716],{"class":4084},[4056,4731,4659],{"class":4649},[4056,4733,4735,4738,4740],{"class":4058,"line":4734},10,[4056,4736,4737],{"class":4649},"\u003C\u002F",[4056,4739,4676],{"class":4084},[4056,4741,4659],{"class":4649},[4056,4743,4745],{"class":4058,"line":4744},11,[4056,4746,4747],{"class":4066},"...\n",[4056,4749,4751,4753,4755],{"class":4058,"line":4750},12,[4056,4752,4737],{"class":4649},[4056,4754,4667],{"class":4084},[4056,4756,4659],{"class":4649},[3813,4758,4759],{},"До моменту отримання HTML браузер вже завантажив частину ресурсів, що прискорює рендеринг.",[3805,4761],{},[3808,4763,4765],{"id":4764},"група-2xx-успішні-відповіді","Група 2xx: Успішні відповіді",[3813,4767,4768,4769,4771,4772,4775],{},"Коди діапазону ",[3770,4770,3882],{}," вказують, що запит клієнта був ",[3770,4773,4774],{},"успішно отриманий, зрозумілий та оброблений"," сервером. Це єдина категорія кодів, яка свідчить про успішне завершення операції.",[3825,4777,4779],{"id":4778},"_200-ok-успішна-обробка-запиту","200 OK — Успішна обробка запиту",[3813,4781,4782,4784],{},[3770,4783,4009],{}," Універсальний код успіху. Запит оброблено успішно, тіло відповіді містить запитувані дані або результат операції.",[3813,4786,4787,4789],{},[3770,4788,4019],{}," GET (отримання даних), POST (якщо не створюється новий ресурс), PUT\u002FPATCH (оновлення з поверненням даних), DELETE (з підтвердженням).",[3813,4791,4792],{},[3770,4793,4794],{},"Приклад 1: GET — отримання ресурсу",[4047,4796,4798],{"className":4049,"code":4797,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fusers\u002F42 HTTP\u002F1.1\nHost: api.example.com\n",[3965,4799,4800,4813],{"__ignoreMap":4052},[4056,4801,4802,4804,4807,4809,4811],{"class":4058,"line":4059},[4056,4803,4345],{"class":4062},[4056,4805,4806],{"class":4066}," \u002Fapi\u002Fv1\u002Fusers\u002F42 ",[4056,4808,4071],{"class":4070},[4056,4810,4074],{"class":4066},[4056,4812,4078],{"class":4077},[4056,4814,4815,4817,4819],{"class":4058,"line":4081},[4056,4816,4085],{"class":4084},[4056,4818,4088],{"class":4070},[4056,4820,4821],{"class":4091}," api.example.com\n",[3813,4823,4824],{},[3770,4825,4826],{},"Відповідь:",[4047,4828,4830],{"className":4049,"code":4829,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson; charset=utf-8\nContent-Length: 187\n\n{\"id\":42,\"email\":\"john@example.com\",\"firstName\":\"John\",\"lastName\":\"Doe\",\"role\":\"user\"}\n",[3965,4831,4832,4844,4853,4862,4866],{"__ignoreMap":4052},[4056,4833,4834,4836,4838,4840,4842],{"class":4058,"line":4059},[4056,4835,4071],{"class":4070},[4056,4837,4074],{"class":4066},[4056,4839,4184],{"class":4077},[4056,4841,4619],{"class":4077},[4056,4843,4622],{"class":4091},[4056,4845,4846,4848,4850],{"class":4058,"line":4081},[4056,4847,4026],{"class":4084},[4056,4849,4088],{"class":4070},[4056,4851,4852],{"class":4091}," application\u002Fjson; charset=utf-8\n",[4056,4854,4855,4857,4859],{"class":4058,"line":4095},[4056,4856,4108],{"class":4084},[4056,4858,4088],{"class":4070},[4056,4860,4861],{"class":4091}," 187\n",[4056,4863,4864],{"class":4058,"line":4105},[4056,4865,4131],{"emptyLinePlaceholder":4130},[4056,4867,4868,4870,4872,4874,4877,4879,4882,4884,4887,4889,4892,4894,4897,4899,4902,4904,4907,4909,4912,4914,4917],{"class":4058,"line":4116},[4056,4869,4264],{"class":4066},[4056,4871,4268],{"class":4267},[4056,4873,4088],{"class":4066},[4056,4875,4876],{"class":4077},"42",[4056,4878,4276],{"class":4066},[4056,4880,4881],{"class":4267},"\"email\"",[4056,4883,4088],{"class":4066},[4056,4885,4886],{"class":4091},"\"john@example.com\"",[4056,4888,4276],{"class":4066},[4056,4890,4891],{"class":4267},"\"firstName\"",[4056,4893,4088],{"class":4066},[4056,4895,4896],{"class":4091},"\"John\"",[4056,4898,4276],{"class":4066},[4056,4900,4901],{"class":4267},"\"lastName\"",[4056,4903,4088],{"class":4066},[4056,4905,4906],{"class":4091},"\"Doe\"",[4056,4908,4276],{"class":4066},[4056,4910,4911],{"class":4267},"\"role\"",[4056,4913,4088],{"class":4066},[4056,4915,4916],{"class":4091},"\"user\"",[4056,4918,4297],{"class":4066},[3813,4920,4921],{},[3770,4922,4923],{},"Приклад 2: PATCH — оновлення з поверненням оновлених даних",[4047,4925,4927],{"className":4049,"code":4926,"language":4051,"meta":4052,"style":4052},"PATCH \u002Fapi\u002Fv1\u002Fusers\u002F42 HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"email\":\"john.new@example.com\"}\n",[3965,4928,4929,4942,4950,4954],{"__ignoreMap":4052},[4056,4930,4931,4934,4936,4938,4940],{"class":4058,"line":4059},[4056,4932,4933],{"class":4062},"PATCH",[4056,4935,4806],{"class":4066},[4056,4937,4071],{"class":4070},[4056,4939,4074],{"class":4066},[4056,4941,4078],{"class":4077},[4056,4943,4944,4946,4948],{"class":4058,"line":4081},[4056,4945,4026],{"class":4084},[4056,4947,4088],{"class":4070},[4056,4949,4246],{"class":4091},[4056,4951,4952],{"class":4058,"line":4095},[4056,4953,4131],{"emptyLinePlaceholder":4130},[4056,4955,4956,4958,4960,4962,4965],{"class":4058,"line":4105},[4056,4957,4264],{"class":4066},[4056,4959,4881],{"class":4267},[4056,4961,4088],{"class":4066},[4056,4963,4964],{"class":4091},"\"john.new@example.com\"",[4056,4966,4297],{"class":4066},[3813,4968,4969],{},[3770,4970,4826],{},[4047,4972,4974],{"className":4049,"code":4973,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"id\":42,\"email\":\"john.new@example.com\",\"firstName\":\"John\",\"lastName\":\"Doe\",\"updatedAt\":\"2026-08-29T13:10:00Z\"}\n",[3965,4975,4976,4988,4996,5000],{"__ignoreMap":4052},[4056,4977,4978,4980,4982,4984,4986],{"class":4058,"line":4059},[4056,4979,4071],{"class":4070},[4056,4981,4074],{"class":4066},[4056,4983,4184],{"class":4077},[4056,4985,4619],{"class":4077},[4056,4987,4622],{"class":4091},[4056,4989,4990,4992,4994],{"class":4058,"line":4081},[4056,4991,4026],{"class":4084},[4056,4993,4088],{"class":4070},[4056,4995,4852],{"class":4091},[4056,4997,4998],{"class":4058,"line":4095},[4056,4999,4131],{"emptyLinePlaceholder":4130},[4056,5001,5002,5004,5006,5008,5010,5012,5014,5016,5018,5020,5022,5024,5026,5028,5030,5032,5034,5036,5039,5041,5044],{"class":4058,"line":4105},[4056,5003,4264],{"class":4066},[4056,5005,4268],{"class":4267},[4056,5007,4088],{"class":4066},[4056,5009,4876],{"class":4077},[4056,5011,4276],{"class":4066},[4056,5013,4881],{"class":4267},[4056,5015,4088],{"class":4066},[4056,5017,4964],{"class":4091},[4056,5019,4276],{"class":4066},[4056,5021,4891],{"class":4267},[4056,5023,4088],{"class":4066},[4056,5025,4896],{"class":4091},[4056,5027,4276],{"class":4066},[4056,5029,4901],{"class":4267},[4056,5031,4088],{"class":4066},[4056,5033,4906],{"class":4091},[4056,5035,4276],{"class":4066},[4056,5037,5038],{"class":4267},"\"updatedAt\"",[4056,5040,4088],{"class":4066},[4056,5042,5043],{"class":4091},"\"2026-08-29T13:10:00Z\"",[4056,5045,4297],{"class":4066},[3825,5047,5049],{"id":5048},"_201-created-ресурс-успішно-створено","201 Created — Ресурс успішно створено",[3813,5051,5052,5054,5055,5058,5059,5061],{},[3770,5053,4009],{}," Запит успішно оброблено, і в результаті був ",[3770,5056,5057],{},"створений новий ресурс",". Відповідь повинна містити заголовок ",[3965,5060,4232],{}," з URI новоствореного ресурсу.",[3813,5063,5064,5066],{},[3770,5065,4019],{}," POST (створення), PUT (створення ресурсу за вказаною адресою).",[3813,5068,5069],{},[3770,5070,5071],{},"Приклад: POST — створення користувача",[4047,5073,5075],{"className":4049,"code":5074,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Fusers HTTP\u002F1.1\nHost: api.example.com\nContent-Type: application\u002Fjson\n\n{\"email\":\"jane@example.com\",\"firstName\":\"Jane\",\"password\":\"SecurePass123!\"}\n",[3965,5076,5077,5090,5098,5106,5110],{"__ignoreMap":4052},[4056,5078,5079,5081,5084,5086,5088],{"class":4058,"line":4059},[4056,5080,4063],{"class":4062},[4056,5082,5083],{"class":4066}," \u002Fapi\u002Fv1\u002Fusers ",[4056,5085,4071],{"class":4070},[4056,5087,4074],{"class":4066},[4056,5089,4078],{"class":4077},[4056,5091,5092,5094,5096],{"class":4058,"line":4081},[4056,5093,4085],{"class":4084},[4056,5095,4088],{"class":4070},[4056,5097,4821],{"class":4091},[4056,5099,5100,5102,5104],{"class":4058,"line":4095},[4056,5101,4026],{"class":4084},[4056,5103,4088],{"class":4070},[4056,5105,4246],{"class":4091},[4056,5107,5108],{"class":4058,"line":4105},[4056,5109,4131],{"emptyLinePlaceholder":4130},[4056,5111,5112,5114,5116,5118,5121,5123,5125,5127,5130,5132,5135,5137,5140],{"class":4058,"line":4116},[4056,5113,4264],{"class":4066},[4056,5115,4881],{"class":4267},[4056,5117,4088],{"class":4066},[4056,5119,5120],{"class":4091},"\"jane@example.com\"",[4056,5122,4276],{"class":4066},[4056,5124,4891],{"class":4267},[4056,5126,4088],{"class":4066},[4056,5128,5129],{"class":4091},"\"Jane\"",[4056,5131,4276],{"class":4066},[4056,5133,5134],{"class":4267},"\"password\"",[4056,5136,4088],{"class":4066},[4056,5138,5139],{"class":4091},"\"SecurePass123!\"",[4056,5141,4297],{"class":4066},[3813,5143,5144],{},[3770,5145,4826],{},[4047,5147,5149],{"className":4049,"code":5148,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 201 Created\nLocation: https:\u002F\u002Fapi.example.com\u002Fapi\u002Fv1\u002Fusers\u002F125\nContent-Type: application\u002Fjson; charset=utf-8\nContent-Length: 156\n\n{\"id\":125,\"email\":\"jane@example.com\",\"firstName\":\"Jane\",\"createdAt\":\"2026-08-29T13:15:00Z\",\"isActive\":true}\n",[3965,5150,5151,5163,5172,5180,5189,5193],{"__ignoreMap":4052},[4056,5152,5153,5155,5157,5159,5161],{"class":4058,"line":4059},[4056,5154,4071],{"class":4070},[4056,5156,4074],{"class":4066},[4056,5158,4184],{"class":4077},[4056,5160,4224],{"class":4077},[4056,5162,4227],{"class":4091},[4056,5164,5165,5167,5169],{"class":4058,"line":4081},[4056,5166,4232],{"class":4084},[4056,5168,4088],{"class":4070},[4056,5170,5171],{"class":4091}," https:\u002F\u002Fapi.example.com\u002Fapi\u002Fv1\u002Fusers\u002F125\n",[4056,5173,5174,5176,5178],{"class":4058,"line":4095},[4056,5175,4026],{"class":4084},[4056,5177,4088],{"class":4070},[4056,5179,4852],{"class":4091},[4056,5181,5182,5184,5186],{"class":4058,"line":4105},[4056,5183,4108],{"class":4084},[4056,5185,4088],{"class":4070},[4056,5187,5188],{"class":4091}," 156\n",[4056,5190,5191],{"class":4058,"line":4116},[4056,5192,4131],{"emptyLinePlaceholder":4130},[4056,5194,5195,5197,5199,5201,5204,5206,5208,5210,5212,5214,5216,5218,5220,5222,5225,5227,5230,5232,5235,5237,5240],{"class":4058,"line":4127},[4056,5196,4264],{"class":4066},[4056,5198,4268],{"class":4267},[4056,5200,4088],{"class":4066},[4056,5202,5203],{"class":4077},"125",[4056,5205,4276],{"class":4066},[4056,5207,4881],{"class":4267},[4056,5209,4088],{"class":4066},[4056,5211,5120],{"class":4091},[4056,5213,4276],{"class":4066},[4056,5215,4891],{"class":4267},[4056,5217,4088],{"class":4066},[4056,5219,5129],{"class":4091},[4056,5221,4276],{"class":4066},[4056,5223,5224],{"class":4267},"\"createdAt\"",[4056,5226,4088],{"class":4066},[4056,5228,5229],{"class":4091},"\"2026-08-29T13:15:00Z\"",[4056,5231,4276],{"class":4066},[4056,5233,5234],{"class":4267},"\"isActive\"",[4056,5236,4088],{"class":4066},[4056,5238,5239],{"class":4070},"true",[4056,5241,4297],{"class":4066},[5243,5244,5245,5248,5250,5251,5254,5255,5258,5259,4310],"tip",{},[3770,5246,5247],{},"Коли використовувати 201 замість 200:",[4021,5249],{},"\nВикористовуйте ",[3965,5252,5253],{},"201 Created",", коли операція ",[3770,5256,5257],{},"створила новий ресурс",", який має власний URI. Якщо POST виконує іншу операцію (пошук, обчислення, надсилання email) без створення ресурсу, використовуйте ",[3965,5260,5261],{},"200 OK",[3825,5263,5265],{"id":5264},"_202-accepted-запит-прийнято-до-обробки","202 Accepted — Запит прийнято до обробки",[3813,5267,5268,5270,5271,5274,5275,5278],{},[3770,5269,4009],{}," Запит прийнято для обробки, але ",[3770,5272,5273],{},"обробка ще не завершена",". Використовується для ",[3770,5276,5277],{},"асинхронних операцій",", які виконуються у фоновому режимі (черги, batch-обробка, довготривалі операції).",[3813,5280,5281,5283],{},[3770,5282,4019],{}," POST\u002FPUT\u002FDELETE для операцій, що виконуються асинхронно (генерація звіту, масове оновлення, обробка платежу).",[3813,5285,5286],{},[3770,5287,5288],{},"Приклад: POST — генерація великого звіту",[4047,5290,5292],{"className":4049,"code":5291,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Freports\u002Fgenerate HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"type\":\"annual\",\"year\":2026,\"format\":\"pdf\"}\n",[3965,5293,5294,5307,5315,5319],{"__ignoreMap":4052},[4056,5295,5296,5298,5301,5303,5305],{"class":4058,"line":4059},[4056,5297,4063],{"class":4062},[4056,5299,5300],{"class":4066}," \u002Fapi\u002Fv1\u002Freports\u002Fgenerate ",[4056,5302,4071],{"class":4070},[4056,5304,4074],{"class":4066},[4056,5306,4078],{"class":4077},[4056,5308,5309,5311,5313],{"class":4058,"line":4081},[4056,5310,4026],{"class":4084},[4056,5312,4088],{"class":4070},[4056,5314,4246],{"class":4091},[4056,5316,5317],{"class":4058,"line":4095},[4056,5318,4131],{"emptyLinePlaceholder":4130},[4056,5320,5321,5323,5326,5328,5331,5333,5336,5338,5341,5343,5346,5348,5351],{"class":4058,"line":4105},[4056,5322,4264],{"class":4066},[4056,5324,5325],{"class":4267},"\"type\"",[4056,5327,4088],{"class":4066},[4056,5329,5330],{"class":4091},"\"annual\"",[4056,5332,4276],{"class":4066},[4056,5334,5335],{"class":4267},"\"year\"",[4056,5337,4088],{"class":4066},[4056,5339,5340],{"class":4077},"2026",[4056,5342,4276],{"class":4066},[4056,5344,5345],{"class":4267},"\"format\"",[4056,5347,4088],{"class":4066},[4056,5349,5350],{"class":4091},"\"pdf\"",[4056,5352,4297],{"class":4066},[3813,5354,5355],{},[3770,5356,4826],{},[4047,5358,5360],{"className":4049,"code":5359,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 202 Accepted\nLocation: https:\u002F\u002Fapi.example.com\u002Fapi\u002Fv1\u002Freports\u002Ftasks\u002Fabc-123\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"taskId\":\"abc-123\",\"status\":\"processing\",\"estimatedTime\":300,\"statusUrl\":\"\u002Fapi\u002Fv1\u002Freports\u002Ftasks\u002Fabc-123\u002Fstatus\"}\n",[3965,5361,5362,5376,5385,5393,5397],{"__ignoreMap":4052},[4056,5363,5364,5366,5368,5370,5373],{"class":4058,"line":4059},[4056,5365,4071],{"class":4070},[4056,5367,4074],{"class":4066},[4056,5369,4184],{"class":4077},[4056,5371,5372],{"class":4077}," 202",[4056,5374,5375],{"class":4091}," Accepted\n",[4056,5377,5378,5380,5382],{"class":4058,"line":4081},[4056,5379,4232],{"class":4084},[4056,5381,4088],{"class":4070},[4056,5383,5384],{"class":4091}," https:\u002F\u002Fapi.example.com\u002Fapi\u002Fv1\u002Freports\u002Ftasks\u002Fabc-123\n",[4056,5386,5387,5389,5391],{"class":4058,"line":4095},[4056,5388,4026],{"class":4084},[4056,5390,4088],{"class":4070},[4056,5392,4852],{"class":4091},[4056,5394,5395],{"class":4058,"line":4105},[4056,5396,4131],{"emptyLinePlaceholder":4130},[4056,5398,5399,5401,5404,5406,5409,5411,5413,5415,5417,5419,5422,5424,5427,5429,5432,5434,5437],{"class":4058,"line":4116},[4056,5400,4264],{"class":4066},[4056,5402,5403],{"class":4267},"\"taskId\"",[4056,5405,4088],{"class":4066},[4056,5407,5408],{"class":4091},"\"abc-123\"",[4056,5410,4276],{"class":4066},[4056,5412,4279],{"class":4267},[4056,5414,4088],{"class":4066},[4056,5416,4284],{"class":4091},[4056,5418,4276],{"class":4066},[4056,5420,5421],{"class":4267},"\"estimatedTime\"",[4056,5423,4088],{"class":4066},[4056,5425,5426],{"class":4077},"300",[4056,5428,4276],{"class":4066},[4056,5430,5431],{"class":4267},"\"statusUrl\"",[4056,5433,4088],{"class":4066},[4056,5435,5436],{"class":4091},"\"\u002Fapi\u002Fv1\u002Freports\u002Ftasks\u002Fabc-123\u002Fstatus\"",[4056,5438,4297],{"class":4066},[3813,5440,5441,5442,4088],{},"Клієнт може періодично перевіряти статус через ",[3965,5443,5444],{},"statusUrl",[4047,5446,5448],{"className":4049,"code":5447,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Freports\u002Ftasks\u002Fabc-123\u002Fstatus HTTP\u002F1.1\n",[3965,5449,5450],{"__ignoreMap":4052},[4056,5451,5452,5454,5457,5459,5461],{"class":4058,"line":4059},[4056,5453,4345],{"class":4062},[4056,5455,5456],{"class":4066}," \u002Fapi\u002Fv1\u002Freports\u002Ftasks\u002Fabc-123\u002Fstatus ",[4056,5458,4071],{"class":4070},[4056,5460,4074],{"class":4066},[4056,5462,4078],{"class":4077},[3813,5464,5465],{},[3770,5466,5467],{},"Відповідь (обробка продовжується):",[4047,5469,5471],{"className":4049,"code":5470,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson\n\n{\"taskId\":\"abc-123\",\"status\":\"processing\",\"progress\":45}\n",[3965,5472,5473,5485,5493,5497],{"__ignoreMap":4052},[4056,5474,5475,5477,5479,5481,5483],{"class":4058,"line":4059},[4056,5476,4071],{"class":4070},[4056,5478,4074],{"class":4066},[4056,5480,4184],{"class":4077},[4056,5482,4619],{"class":4077},[4056,5484,4622],{"class":4091},[4056,5486,5487,5489,5491],{"class":4058,"line":4081},[4056,5488,4026],{"class":4084},[4056,5490,4088],{"class":4070},[4056,5492,4246],{"class":4091},[4056,5494,5495],{"class":4058,"line":4095},[4056,5496,4131],{"emptyLinePlaceholder":4130},[4056,5498,5499,5501,5503,5505,5507,5509,5511,5513,5515,5517,5520,5522,5525],{"class":4058,"line":4105},[4056,5500,4264],{"class":4066},[4056,5502,5403],{"class":4267},[4056,5504,4088],{"class":4066},[4056,5506,5408],{"class":4091},[4056,5508,4276],{"class":4066},[4056,5510,4279],{"class":4267},[4056,5512,4088],{"class":4066},[4056,5514,4284],{"class":4091},[4056,5516,4276],{"class":4066},[4056,5518,5519],{"class":4267},"\"progress\"",[4056,5521,4088],{"class":4066},[4056,5523,5524],{"class":4077},"45",[4056,5526,4297],{"class":4066},[3813,5528,5529],{},[3770,5530,5531],{},"Відповідь (обробка завершена):",[4047,5533,5535],{"className":4049,"code":5534,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson\n\n{\"taskId\":\"abc-123\",\"status\":\"completed\",\"downloadUrl\":\"\u002Fapi\u002Fv1\u002Freports\u002Fabc-123\u002Fdownload\"}\n",[3965,5536,5537,5549,5557,5561],{"__ignoreMap":4052},[4056,5538,5539,5541,5543,5545,5547],{"class":4058,"line":4059},[4056,5540,4071],{"class":4070},[4056,5542,4074],{"class":4066},[4056,5544,4184],{"class":4077},[4056,5546,4619],{"class":4077},[4056,5548,4622],{"class":4091},[4056,5550,5551,5553,5555],{"class":4058,"line":4081},[4056,5552,4026],{"class":4084},[4056,5554,4088],{"class":4070},[4056,5556,4246],{"class":4091},[4056,5558,5559],{"class":4058,"line":4095},[4056,5560,4131],{"emptyLinePlaceholder":4130},[4056,5562,5563,5565,5567,5569,5571,5573,5575,5577,5580,5582,5585,5587,5590],{"class":4058,"line":4105},[4056,5564,4264],{"class":4066},[4056,5566,5403],{"class":4267},[4056,5568,4088],{"class":4066},[4056,5570,5408],{"class":4091},[4056,5572,4276],{"class":4066},[4056,5574,4279],{"class":4267},[4056,5576,4088],{"class":4066},[4056,5578,5579],{"class":4091},"\"completed\"",[4056,5581,4276],{"class":4066},[4056,5583,5584],{"class":4267},"\"downloadUrl\"",[4056,5586,4088],{"class":4066},[4056,5588,5589],{"class":4091},"\"\u002Fapi\u002Fv1\u002Freports\u002Fabc-123\u002Fdownload\"",[4056,5591,4297],{"class":4066},[3825,5593,5595],{"id":5594},"_203-non-authoritative-information-неавторитетна-інформація","203 Non-Authoritative Information — Неавторитетна інформація",[3813,5597,5598,5600,5601,5604],{},[3770,5599,4009],{}," Успішна відповідь, але ",[3770,5602,5603],{},"дані були модифіковані проміжним проксі"," (наприклад, додано або видалено заголовки, трансформовано контент).",[3813,5606,5607,5609],{},[3770,5608,4019],{}," Рідко використовується, в основному проксі-серверами або CDN.",[3825,5611,5613],{"id":5612},"_204-no-content-успіх-без-тіла-відповіді","204 No Content — Успіх без тіла відповіді",[3813,5615,5616,5618,5619,5622],{},[3770,5617,4009],{}," Запит успішно оброблено, але ",[3770,5620,5621],{},"тіло відповіді порожнє",". Клієнт не повинен оновлювати поточне представлення документа.",[3813,5624,5625,5627],{},[3770,5626,4019],{}," DELETE (видалення без підтвердження), PUT\u002FPATCH (оновлення без повернення даних).",[3813,5629,5630],{},[3770,5631,5632],{},"Приклад 1: DELETE — видалення користувача",[4047,5634,5636],{"className":4049,"code":5635,"language":4051,"meta":4052,"style":4052},"DELETE \u002Fapi\u002Fv1\u002Fusers\u002F42 HTTP\u002F1.1\nAuthorization: Bearer eyJhbGc...admin-token...\n",[3965,5637,5638,5651],{"__ignoreMap":4052},[4056,5639,5640,5643,5645,5647,5649],{"class":4058,"line":4059},[4056,5641,5642],{"class":4062},"DELETE",[4056,5644,4806],{"class":4066},[4056,5646,4071],{"class":4070},[4056,5648,4074],{"class":4066},[4056,5650,4078],{"class":4077},[4056,5652,5653,5656,5658],{"class":4058,"line":4081},[4056,5654,5655],{"class":4084},"Authorization",[4056,5657,4088],{"class":4070},[4056,5659,5660],{"class":4091}," Bearer eyJhbGc...admin-token...\n",[3813,5662,5663],{},[3770,5664,4826],{},[4047,5666,5668],{"className":4049,"code":5667,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 204 No Content\nDate: Sat, 29 Aug 2026 13:20:00 GMT\n\n",[3965,5669,5670,5684],{"__ignoreMap":4052},[4056,5671,5672,5674,5676,5678,5681],{"class":4058,"line":4059},[4056,5673,4071],{"class":4070},[4056,5675,4074],{"class":4066},[4056,5677,4184],{"class":4077},[4056,5679,5680],{"class":4077}," 204",[4056,5682,5683],{"class":4091}," No Content\n",[4056,5685,5686,5689,5691],{"class":4058,"line":4081},[4056,5687,5688],{"class":4084},"Date",[4056,5690,4088],{"class":4070},[4056,5692,5693],{"class":4091}," Sat, 29 Aug 2026 13:20:00 GMT\n",[3813,5695,5696],{},"Тіло порожнє, клієнт знає, що операція успішна.",[3813,5698,5699],{},[3770,5700,5701],{},"Приклад 2: PUT — оновлення налаштувань",[4047,5703,5705],{"className":4049,"code":5704,"language":4051,"meta":4052,"style":4052},"PUT \u002Fapi\u002Fv1\u002Fusers\u002F42\u002Fsettings HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"notifications\":true,\"theme\":\"dark\"}\n",[3965,5706,5707,5721,5729,5733],{"__ignoreMap":4052},[4056,5708,5709,5712,5715,5717,5719],{"class":4058,"line":4059},[4056,5710,5711],{"class":4062},"PUT",[4056,5713,5714],{"class":4066}," \u002Fapi\u002Fv1\u002Fusers\u002F42\u002Fsettings ",[4056,5716,4071],{"class":4070},[4056,5718,4074],{"class":4066},[4056,5720,4078],{"class":4077},[4056,5722,5723,5725,5727],{"class":4058,"line":4081},[4056,5724,4026],{"class":4084},[4056,5726,4088],{"class":4070},[4056,5728,4246],{"class":4091},[4056,5730,5731],{"class":4058,"line":4095},[4056,5732,4131],{"emptyLinePlaceholder":4130},[4056,5734,5735,5737,5740,5742,5744,5746,5749,5751,5754],{"class":4058,"line":4105},[4056,5736,4264],{"class":4066},[4056,5738,5739],{"class":4267},"\"notifications\"",[4056,5741,4088],{"class":4066},[4056,5743,5239],{"class":4070},[4056,5745,4276],{"class":4066},[4056,5747,5748],{"class":4267},"\"theme\"",[4056,5750,4088],{"class":4066},[4056,5752,5753],{"class":4091},"\"dark\"",[4056,5755,4297],{"class":4066},[3813,5757,5758],{},[3770,5759,4826],{},[4047,5761,5763],{"className":4049,"code":5762,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 204 No Content\n\n",[3965,5764,5765],{"__ignoreMap":4052},[4056,5766,5767,5769,5771,5773,5775],{"class":4058,"line":4059},[4056,5768,4071],{"class":4070},[4056,5770,4074],{"class":4066},[4056,5772,4184],{"class":4077},[4056,5774,5680],{"class":4077},[4056,5776,5683],{"class":4091},[3825,5778,5780],{"id":5779},"_205-reset-content-скинути-вміст","205 Reset Content — Скинути вміст",[3813,5782,5783,5785,5786,5789],{},[3770,5784,4009],{}," Запит успішно оброблено, клієнт повинен ",[3770,5787,5788],{},"скинути поточне представлення документа"," (очистити форму, оновити інтерфейс).",[3813,5791,5792,5794],{},[3770,5793,4019],{}," Рідко використовується, зазвичай після відправки форми для очищення полів.",[3825,5796,5798],{"id":5797},"_206-partial-content-часткове-вміст","206 Partial Content — Часткове вміст",[3813,5800,5801,5803,5804,5807,5808,5274,5811,5814,5815,4310],{},[3770,5802,4009],{}," Сервер повертає ",[3770,5805,5806],{},"частину ресурсу",", запитану клієнтом через заголовок ",[3965,5809,5810],{},"Range",[3770,5812,5813],{},"часткового завантаження"," великих файлів (відео, аудіо, великі документи) або ",[3770,5816,5817],{},"відновлення перерваного завантаження",[3813,5819,5820],{},[3770,5821,5822],{},"Приклад: Часткове завантаження відео",[3813,5824,5825],{},[3770,5826,5827],{},"Запит (перші 1 МБ файлу):",[4047,5829,5831],{"className":4049,"code":5830,"language":4051,"meta":4052,"style":4052},"GET \u002Fvideos\u002Fmovie.mp4 HTTP\u002F1.1\nHost: cdn.example.com\nRange: bytes=0-1048575\n",[3965,5832,5833,5846,5855],{"__ignoreMap":4052},[4056,5834,5835,5837,5840,5842,5844],{"class":4058,"line":4059},[4056,5836,4345],{"class":4062},[4056,5838,5839],{"class":4066}," \u002Fvideos\u002Fmovie.mp4 ",[4056,5841,4071],{"class":4070},[4056,5843,4074],{"class":4066},[4056,5845,4078],{"class":4077},[4056,5847,5848,5850,5852],{"class":4058,"line":4081},[4056,5849,4085],{"class":4084},[4056,5851,4088],{"class":4070},[4056,5853,5854],{"class":4091}," cdn.example.com\n",[4056,5856,5857,5859,5861],{"class":4058,"line":4095},[4056,5858,5810],{"class":4084},[4056,5860,4088],{"class":4070},[4056,5862,5863],{"class":4091}," bytes=0-1048575\n",[3813,5865,5866],{},[3770,5867,4826],{},[4047,5869,5871],{"className":4049,"code":5870,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 206 Partial Content\nContent-Type: video\u002Fmp4\nContent-Length: 1048576\nContent-Range: bytes 0-1048575\u002F524288000\nAccept-Ranges: bytes\n\n[1 МБ бінарних даних відео]\n",[3965,5872,5873,5887,5895,5904,5914,5924,5928],{"__ignoreMap":4052},[4056,5874,5875,5877,5879,5881,5884],{"class":4058,"line":4059},[4056,5876,4071],{"class":4070},[4056,5878,4074],{"class":4066},[4056,5880,4184],{"class":4077},[4056,5882,5883],{"class":4077}," 206",[4056,5885,5886],{"class":4091}," Partial Content\n",[4056,5888,5889,5891,5893],{"class":4058,"line":4081},[4056,5890,4026],{"class":4084},[4056,5892,4088],{"class":4070},[4056,5894,4102],{"class":4091},[4056,5896,5897,5899,5901],{"class":4058,"line":4095},[4056,5898,4108],{"class":4084},[4056,5900,4088],{"class":4070},[4056,5902,5903],{"class":4091}," 1048576\n",[4056,5905,5906,5909,5911],{"class":4058,"line":4105},[4056,5907,5908],{"class":4084},"Content-Range",[4056,5910,4088],{"class":4070},[4056,5912,5913],{"class":4091}," bytes 0-1048575\u002F524288000\n",[4056,5915,5916,5919,5921],{"class":4058,"line":4116},[4056,5917,5918],{"class":4084},"Accept-Ranges",[4056,5920,4088],{"class":4070},[4056,5922,5923],{"class":4091}," bytes\n",[4056,5925,5926],{"class":4058,"line":4127},[4056,5927,4131],{"emptyLinePlaceholder":4130},[4056,5929,5930,5932,5935,5938,5941,5944,5947],{"class":4058,"line":4134},[4056,5931,4137],{"class":4066},[4056,5933,5934],{"class":4077},"1",[4056,5936,5937],{"class":4140}," МБ",[4056,5939,5940],{"class":4140}," бінарних",[4056,5942,5943],{"class":4140}," даних",[4056,5945,5946],{"class":4140}," відео",[4056,5948,4165],{"class":4066},[3813,5950,5951],{},"Клієнт може запитувати наступні частини:",[4047,5953,5955],{"className":4049,"code":5954,"language":4051,"meta":4052,"style":4052},"Range: bytes=1048576-2097151\n",[3965,5956,5957],{"__ignoreMap":4052},[4056,5958,5959,5961,5963],{"class":4058,"line":4059},[4056,5960,5810],{"class":4084},[4056,5962,4088],{"class":4070},[4056,5964,5965],{"class":4091}," bytes=1048576-2097151\n",[3953,5967,5968,5971,5973,5974,5977,5978,5981],{},[3770,5969,5970],{},"Підтримка діапазонів:",[4021,5972],{},"\nСервер сигналізує про підтримку часткових запитів через заголовок ",[3965,5975,5976],{},"Accept-Ranges: bytes"," у відповіді на звичайний GET або HEAD запит. Якщо сервер не підтримує діапазони, він повертає ",[3965,5979,5980],{},"Accept-Ranges: none"," та завжди віддає файл цілком.",[3805,5983],{},[3808,5985,5987],{"id":5986},"група-3xx-перенаправлення","Група 3xx: Перенаправлення",[3813,5989,4768,5990,5992,5993,5996],{},[3770,5991,3901],{}," інформують клієнта, що для завершення запиту потрібні ",[3770,5994,5995],{},"додаткові дії"," — зазвичай перехід за іншою адресою. Браузери автоматично виконують перенаправлення, але програмні HTTP-клієнти повинні явно обробляти ці коди.",[3825,5998,6000],{"id":5999},"_300-multiple-choices-множинний-вибір","300 Multiple Choices — Множинний вибір",[3813,6002,6003,6005,6006,6009],{},[3770,6004,4009],{}," Запитуваний ресурс має ",[3770,6007,6008],{},"кілька можливих представлень",", і клієнт повинен обрати одне з них (наприклад, різні мови, формати файлів).",[3813,6011,6012,6014],{},[3770,6013,4019],{}," Рідко застосовується на практиці.",[3825,6016,6018],{"id":6017},"_301-moved-permanently-назавжди-переміщено","301 Moved Permanently — Назавжди переміщено",[3813,6020,6021,6023,6024,6027,6028,6030,6031,6034],{},[3770,6022,4009],{}," Ресурс ",[3770,6025,6026],{},"назавжди переміщено"," на нову адресу, вказану у заголовку ",[3965,6029,4232],{},". Клієнт (і пошукові системи) повинні ",[3770,6032,6033],{},"оновити збережені посилання"," та використовувати нову адресу у майбутньому.",[3813,6036,6037,6039],{},[3770,6038,4019],{}," Зміна структури URL, перейменування домену, об'єднання сторінок.",[3813,6041,6042],{},[3770,6043,4500],{},[3813,6045,6046],{},[3770,6047,6048],{},"Запит (стара адреса):",[4047,6050,6052],{"className":4049,"code":6051,"language":4051,"meta":4052,"style":4052},"GET \u002Fold-products HTTP\u002F1.1\nHost: www.example.com\n",[3965,6053,6054,6067],{"__ignoreMap":4052},[4056,6055,6056,6058,6061,6063,6065],{"class":4058,"line":4059},[4056,6057,4345],{"class":4062},[4056,6059,6060],{"class":4066}," \u002Fold-products ",[4056,6062,4071],{"class":4070},[4056,6064,4074],{"class":4066},[4056,6066,4078],{"class":4077},[4056,6068,6069,6071,6073],{"class":4058,"line":4081},[4056,6070,4085],{"class":4084},[4056,6072,4088],{"class":4070},[4056,6074,6075],{"class":4091}," www.example.com\n",[3813,6077,6078],{},[3770,6079,4826],{},[4047,6081,6083],{"className":4049,"code":6082,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 301 Moved Permanently\nLocation: https:\u002F\u002Fwww.example.com\u002Fproducts\nContent-Length: 0\n\n",[3965,6084,6085,6099,6108],{"__ignoreMap":4052},[4056,6086,6087,6089,6091,6093,6096],{"class":4058,"line":4059},[4056,6088,4071],{"class":4070},[4056,6090,4074],{"class":4066},[4056,6092,4184],{"class":4077},[4056,6094,6095],{"class":4077}," 301",[4056,6097,6098],{"class":4091}," Moved Permanently\n",[4056,6100,6101,6103,6105],{"class":4058,"line":4081},[4056,6102,4232],{"class":4084},[4056,6104,4088],{"class":4070},[4056,6106,6107],{"class":4091}," https:\u002F\u002Fwww.example.com\u002Fproducts\n",[4056,6109,6110,6112,6114],{"class":4058,"line":4095},[4056,6111,4108],{"class":4084},[4056,6113,4088],{"class":4070},[4056,6115,6116],{"class":4091}," 0\n",[3813,6118,6119,6120,6123,6124,6127],{},"Браузер автоматично переходить на ",[3965,6121,6122],{},"https:\u002F\u002Fwww.example.com\u002Fproducts"," та ",[3770,6125,6126],{},"зберігає нову адресу"," — наступні запити йдуть одразу на нову URL без перенаправлення.",[3994,6129,6130,6133,6135,6136,6139,6140,6143,6144,6147],{},[3770,6131,6132],{},"SEO наслідки 301:",[4021,6134],{},"\nПошукові системи (Google, Bing) інтерпретують ",[3965,6137,6138],{},"301"," як ",[3770,6141,6142],{},"постійне перенаправлення"," та передають ",[3770,6145,6146],{},"рейтинг старої сторінки на нову",". Використовуйте 301 обережно — повернення назад вимагає часу для переіндексації.",[3825,6149,6151],{"id":6150},"_302-found-тимчасово-знайдено-тимчасове-перенаправлення","302 Found — Тимчасово знайдено (тимчасове перенаправлення)",[3813,6153,6154,6023,6156,6159,6160,6163],{},[3770,6155,4009],{},[3770,6157,6158],{},"тимчасово"," доступний за іншою адресою. Клієнт повинен використовувати нову адресу ",[3770,6161,6162],{},"лише для цього запиту",", але продовжувати використовувати оригінальну URL у майбутньому.",[3813,6165,6166,6168],{},[3770,6167,4019],{}," Тимчасова недоступність, A\u002FB тестування, перенаправлення після логіну.",[3813,6170,6171],{},[3770,6172,6173],{},"Приклад: Перенаправлення після логіну",[3813,6175,6176],{},[3770,6177,6178],{},"Запит (POST логін):",[4047,6180,6182],{"className":4049,"code":6181,"language":4051,"meta":4052,"style":4052},"POST \u002Fauth\u002Flogin HTTP\u002F1.1\nContent-Type: application\u002Fx-www-form-urlencoded\n\nemail=user@example.com&password=pass123\n",[3965,6183,6184,6197,6206,6210],{"__ignoreMap":4052},[4056,6185,6186,6188,6191,6193,6195],{"class":4058,"line":4059},[4056,6187,4063],{"class":4062},[4056,6189,6190],{"class":4066}," \u002Fauth\u002Flogin ",[4056,6192,4071],{"class":4070},[4056,6194,4074],{"class":4066},[4056,6196,4078],{"class":4077},[4056,6198,6199,6201,6203],{"class":4058,"line":4081},[4056,6200,4026],{"class":4084},[4056,6202,4088],{"class":4070},[4056,6204,6205],{"class":4091}," application\u002Fx-www-form-urlencoded\n",[4056,6207,6208],{"class":4058,"line":4095},[4056,6209,4131],{"emptyLinePlaceholder":4130},[4056,6211,6212],{"class":4058,"line":4105},[4056,6213,6214],{"class":4066},"email=user@example.com&password=pass123\n",[3813,6216,6217],{},[3770,6218,4826],{},[4047,6220,6222],{"className":4049,"code":6221,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 302 Found\nLocation: https:\u002F\u002Fwww.example.com\u002Fdashboard\nSet-Cookie: sessionId=xyz789; HttpOnly; Secure\nContent-Length: 0\n\n",[3965,6223,6224,6238,6247,6257],{"__ignoreMap":4052},[4056,6225,6226,6228,6230,6232,6235],{"class":4058,"line":4059},[4056,6227,4071],{"class":4070},[4056,6229,4074],{"class":4066},[4056,6231,4184],{"class":4077},[4056,6233,6234],{"class":4077}," 302",[4056,6236,6237],{"class":4091}," Found\n",[4056,6239,6240,6242,6244],{"class":4058,"line":4081},[4056,6241,4232],{"class":4084},[4056,6243,4088],{"class":4070},[4056,6245,6246],{"class":4091}," https:\u002F\u002Fwww.example.com\u002Fdashboard\n",[4056,6248,6249,6252,6254],{"class":4058,"line":4095},[4056,6250,6251],{"class":4084},"Set-Cookie",[4056,6253,4088],{"class":4070},[4056,6255,6256],{"class":4091}," sessionId=xyz789; HttpOnly; Secure\n",[4056,6258,6259,6261,6263],{"class":4058,"line":4105},[4056,6260,4108],{"class":4084},[4056,6262,4088],{"class":4070},[4056,6264,6116],{"class":4091},[3813,6266,6267,6268,6271,6272,4310],{},"Браузер переходить на ",[3965,6269,6270],{},"\u002Fdashboard",", але при наступному логіні знову відправляє POST на ",[3965,6273,6274],{},"\u002Fauth\u002Flogin",[3825,6276,6278],{"id":6277},"_303-see-other-дивіться-інше","303 See Other — Дивіться інше",[3813,6280,6281,6283,6284,6287],{},[3770,6282,4009],{}," Відповідь на запит знаходиться за іншою адресою і повинна бути отримана через ",[3770,6285,6286],{},"GET-запит"," (навіть якщо оригінальний запит був POST\u002FPUT\u002FDELETE).",[3813,6289,6290,6292],{},[3770,6291,4019],{}," Перенаправлення після POST для уникнення повторного відправлення форми при оновленні сторінки (Pattern: POST-Redirect-GET).",[3813,6294,6295],{},[3770,6296,6297],{},"Приклад: POST-Redirect-GET pattern",[3813,6299,6300],{},[3770,6301,6302],{},"Крок 1: Клієнт створює ресурс",[4047,6304,6306],{"className":4049,"code":6305,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Farticles HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"title\":\"My Article\",\"content\":\"...\"}\n",[3965,6307,6308,6321,6329,6333],{"__ignoreMap":4052},[4056,6309,6310,6312,6315,6317,6319],{"class":4058,"line":4059},[4056,6311,4063],{"class":4062},[4056,6313,6314],{"class":4066}," \u002Fapi\u002Fv1\u002Farticles ",[4056,6316,4071],{"class":4070},[4056,6318,4074],{"class":4066},[4056,6320,4078],{"class":4077},[4056,6322,6323,6325,6327],{"class":4058,"line":4081},[4056,6324,4026],{"class":4084},[4056,6326,4088],{"class":4070},[4056,6328,4246],{"class":4091},[4056,6330,6331],{"class":4058,"line":4095},[4056,6332,4131],{"emptyLinePlaceholder":4130},[4056,6334,6335,6337,6340,6342,6345,6347,6350,6352,6355],{"class":4058,"line":4105},[4056,6336,4264],{"class":4066},[4056,6338,6339],{"class":4267},"\"title\"",[4056,6341,4088],{"class":4066},[4056,6343,6344],{"class":4091},"\"My Article\"",[4056,6346,4276],{"class":4066},[4056,6348,6349],{"class":4267},"\"content\"",[4056,6351,4088],{"class":4066},[4056,6353,6354],{"class":4091},"\"...\"",[4056,6356,4297],{"class":4066},[3813,6358,6359],{},[3770,6360,6361],{},"Крок 2: Сервер створює ресурс та перенаправляє на його GET",[4047,6363,6365],{"className":4049,"code":6364,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 303 See Other\nLocation: https:\u002F\u002Fblog.example.com\u002Fapi\u002Fv1\u002Farticles\u002Fnew-article-123\nContent-Length: 0\n\n",[3965,6366,6367,6381,6390],{"__ignoreMap":4052},[4056,6368,6369,6371,6373,6375,6378],{"class":4058,"line":4059},[4056,6370,4071],{"class":4070},[4056,6372,4074],{"class":4066},[4056,6374,4184],{"class":4077},[4056,6376,6377],{"class":4077}," 303",[4056,6379,6380],{"class":4091}," See Other\n",[4056,6382,6383,6385,6387],{"class":4058,"line":4081},[4056,6384,4232],{"class":4084},[4056,6386,4088],{"class":4070},[4056,6388,6389],{"class":4091}," https:\u002F\u002Fblog.example.com\u002Fapi\u002Fv1\u002Farticles\u002Fnew-article-123\n",[4056,6391,6392,6394,6396],{"class":4058,"line":4095},[4056,6393,4108],{"class":4084},[4056,6395,4088],{"class":4070},[4056,6397,6116],{"class":4091},[3813,6399,6400],{},[3770,6401,6402],{},"Крок 3: Браузер автоматично відправляє GET",[4047,6404,6406],{"className":4049,"code":6405,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Farticles\u002Fnew-article-123 HTTP\u002F1.1\n",[3965,6407,6408],{"__ignoreMap":4052},[4056,6409,6410,6412,6415,6417,6419],{"class":4058,"line":4059},[4056,6411,4345],{"class":4062},[4056,6413,6414],{"class":4066}," \u002Fapi\u002Fv1\u002Farticles\u002Fnew-article-123 ",[4056,6416,4071],{"class":4070},[4056,6418,4074],{"class":4066},[4056,6420,4078],{"class":4077},[3813,6422,6423],{},[3770,6424,6425],{},"Крок 4: Відповідь з даними статті",[4047,6427,6429],{"className":4049,"code":6428,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson\n\n{\"id\":\"new-article-123\",\"title\":\"My Article\",\"createdAt\":\"...\"}\n",[3965,6430,6431,6443,6451,6455],{"__ignoreMap":4052},[4056,6432,6433,6435,6437,6439,6441],{"class":4058,"line":4059},[4056,6434,4071],{"class":4070},[4056,6436,4074],{"class":4066},[4056,6438,4184],{"class":4077},[4056,6440,4619],{"class":4077},[4056,6442,4622],{"class":4091},[4056,6444,6445,6447,6449],{"class":4058,"line":4081},[4056,6446,4026],{"class":4084},[4056,6448,4088],{"class":4070},[4056,6450,4246],{"class":4091},[4056,6452,6453],{"class":4058,"line":4095},[4056,6454,4131],{"emptyLinePlaceholder":4130},[4056,6456,6457,6459,6461,6463,6466,6468,6470,6472,6474,6476,6478,6480,6482],{"class":4058,"line":4105},[4056,6458,4264],{"class":4066},[4056,6460,4268],{"class":4267},[4056,6462,4088],{"class":4066},[4056,6464,6465],{"class":4091},"\"new-article-123\"",[4056,6467,4276],{"class":4066},[4056,6469,6339],{"class":4267},[4056,6471,4088],{"class":4066},[4056,6473,6344],{"class":4091},[4056,6475,4276],{"class":4066},[4056,6477,5224],{"class":4267},[4056,6479,4088],{"class":4066},[4056,6481,6354],{"class":4091},[4056,6483,4297],{"class":4066},[3813,6485,6486],{},"Якщо користувач оновить сторінку (F5), повторно виконається лише безпечний GET, а не POST.",[3825,6488,6490],{"id":6489},"_304-not-modified-не-змінювався","304 Not Modified — Не змінювався",[3813,6492,6493,6023,6495,6498,6499,6502,6503,6506,6507,4310],{},[3770,6494,4009],{},[3770,6496,6497],{},"не змінювався"," з моменту, вказаного у заголовках умовного запиту (",[3965,6500,6501],{},"If-None-Match",", ",[3965,6504,6505],{},"If-Modified-Since","). Клієнт може використовувати ",[3770,6508,6509],{},"закешовану версію",[3813,6511,6512,6514],{},[3770,6513,4019],{}," Економія пропускної здатності через умовні запити.",[3813,6516,6517],{},[3770,6518,6519],{},"Приклад: Умовний GET з ETag",[3813,6521,6522],{},[3770,6523,6524],{},"Запит (клієнт має закешовану версію):",[4047,6526,6528],{"className":4049,"code":6527,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fproducts\u002F42 HTTP\u002F1.1\nHost: api.example.com\nIf-None-Match: \"product-v3-hash789\"\n",[3965,6529,6530,6543,6551],{"__ignoreMap":4052},[4056,6531,6532,6534,6537,6539,6541],{"class":4058,"line":4059},[4056,6533,4345],{"class":4062},[4056,6535,6536],{"class":4066}," \u002Fapi\u002Fv1\u002Fproducts\u002F42 ",[4056,6538,4071],{"class":4070},[4056,6540,4074],{"class":4066},[4056,6542,4078],{"class":4077},[4056,6544,6545,6547,6549],{"class":4058,"line":4081},[4056,6546,4085],{"class":4084},[4056,6548,4088],{"class":4070},[4056,6550,4821],{"class":4091},[4056,6552,6553,6555,6557],{"class":4058,"line":4095},[4056,6554,6501],{"class":4084},[4056,6556,4088],{"class":4070},[4056,6558,6559],{"class":4091}," \"product-v3-hash789\"\n",[3813,6561,6562],{},[3770,6563,6564],{},"Відповідь (ресурс не змінився):",[4047,6566,6568],{"className":4049,"code":6567,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 304 Not Modified\nETag: \"product-v3-hash789\"\nCache-Control: public, max-age=3600\nContent-Length: 0\n\n",[3965,6569,6570,6584,6593,6603],{"__ignoreMap":4052},[4056,6571,6572,6574,6576,6578,6581],{"class":4058,"line":4059},[4056,6573,4071],{"class":4070},[4056,6575,4074],{"class":4066},[4056,6577,4184],{"class":4077},[4056,6579,6580],{"class":4077}," 304",[4056,6582,6583],{"class":4091}," Not Modified\n",[4056,6585,6586,6589,6591],{"class":4058,"line":4081},[4056,6587,6588],{"class":4084},"ETag",[4056,6590,4088],{"class":4070},[4056,6592,6559],{"class":4091},[4056,6594,6595,6598,6600],{"class":4058,"line":4095},[4056,6596,6597],{"class":4084},"Cache-Control",[4056,6599,4088],{"class":4070},[4056,6601,6602],{"class":4091}," public, max-age=3600\n",[4056,6604,6605,6607,6609],{"class":4058,"line":4105},[4056,6606,4108],{"class":4084},[4056,6608,4088],{"class":4070},[4056,6610,6116],{"class":4091},[3813,6612,6613],{},"Тіло порожнє — клієнт використовує закешовані дані.",[3813,6615,6616],{},[3770,6617,6618],{},"Відповідь (ресурс оновився):",[4047,6620,6622],{"className":4049,"code":6621,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 200 OK\nETag: \"product-v4-hash012\"\nContent-Type: application\u002Fjson\nContent-Length: 245\n\n{\"id\":42,\"name\":\"Updated Product\",\"price\":29999,...}\n",[3965,6623,6624,6636,6645,6653,6662,6666],{"__ignoreMap":4052},[4056,6625,6626,6628,6630,6632,6634],{"class":4058,"line":4059},[4056,6627,4071],{"class":4070},[4056,6629,4074],{"class":4066},[4056,6631,4184],{"class":4077},[4056,6633,4619],{"class":4077},[4056,6635,4622],{"class":4091},[4056,6637,6638,6640,6642],{"class":4058,"line":4081},[4056,6639,6588],{"class":4084},[4056,6641,4088],{"class":4070},[4056,6643,6644],{"class":4091}," \"product-v4-hash012\"\n",[4056,6646,6647,6649,6651],{"class":4058,"line":4095},[4056,6648,4026],{"class":4084},[4056,6650,4088],{"class":4070},[4056,6652,4246],{"class":4091},[4056,6654,6655,6657,6659],{"class":4058,"line":4105},[4056,6656,4108],{"class":4084},[4056,6658,4088],{"class":4070},[4056,6660,6661],{"class":4091}," 245\n",[4056,6663,6664],{"class":4058,"line":4116},[4056,6665,4131],{"emptyLinePlaceholder":4130},[4056,6667,6668,6670,6672,6674,6676,6678,6681,6683,6686,6688,6691,6693,6696,6698,6701],{"class":4058,"line":4127},[4056,6669,4264],{"class":4066},[4056,6671,4268],{"class":4267},[4056,6673,4088],{"class":4066},[4056,6675,4876],{"class":4077},[4056,6677,4276],{"class":4066},[4056,6679,6680],{"class":4267},"\"name\"",[4056,6682,4088],{"class":4066},[4056,6684,6685],{"class":4091},"\"Updated Product\"",[4056,6687,4276],{"class":4066},[4056,6689,6690],{"class":4267},"\"price\"",[4056,6692,4088],{"class":4066},[4056,6694,6695],{"class":4077},"29999",[4056,6697,4276],{"class":4066},[4056,6699,6700],{"class":4140},"...",[4056,6702,4297],{"class":4066},[3825,6704,6706],{"id":6705},"_307-temporary-redirect-тимчасове-перенаправлення-зберігає-метод","307 Temporary Redirect — Тимчасове перенаправлення (зберігає метод)",[3813,6708,6709,6711,6712,6715],{},[3770,6710,4009],{}," Аналогічно до 302, але ",[3770,6713,6714],{},"гарантує збереження методу запиту",". Якщо оригінальний запит був POST, перенаправлений запит також буде POST.",[3813,6717,6718,6721,6723],{},[3770,6719,6720],{},"Відмінність від 302:",[4021,6722],{},"\nІсторично деякі браузери змінювали POST на GET при перенаправленні 302. Код 307 забороняє таку поведінку.",[3813,6725,6726],{},[3770,6727,4500],{},[3813,6729,6730],{},[3770,6731,6732],{},"Запит:",[4047,6734,6736],{"className":4049,"code":6735,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Forders HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"productId\":123,\"quantity\":2}\n",[3965,6737,6738,6751,6759,6763],{"__ignoreMap":4052},[4056,6739,6740,6742,6745,6747,6749],{"class":4058,"line":4059},[4056,6741,4063],{"class":4062},[4056,6743,6744],{"class":4066}," \u002Fapi\u002Fv1\u002Forders ",[4056,6746,4071],{"class":4070},[4056,6748,4074],{"class":4066},[4056,6750,4078],{"class":4077},[4056,6752,6753,6755,6757],{"class":4058,"line":4081},[4056,6754,4026],{"class":4084},[4056,6756,4088],{"class":4070},[4056,6758,4246],{"class":4091},[4056,6760,6761],{"class":4058,"line":4095},[4056,6762,4131],{"emptyLinePlaceholder":4130},[4056,6764,6765,6767,6770,6772,6775,6777,6780,6782,6785],{"class":4058,"line":4105},[4056,6766,4264],{"class":4066},[4056,6768,6769],{"class":4267},"\"productId\"",[4056,6771,4088],{"class":4066},[4056,6773,6774],{"class":4077},"123",[4056,6776,4276],{"class":4066},[4056,6778,6779],{"class":4267},"\"quantity\"",[4056,6781,4088],{"class":4066},[4056,6783,6784],{"class":4077},"2",[4056,6786,4297],{"class":4066},[3813,6788,6789],{},[3770,6790,4826],{},[4047,6792,6794],{"className":4049,"code":6793,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 307 Temporary Redirect\nLocation: https:\u002F\u002Fapi-new.example.com\u002Fapi\u002Fv1\u002Forders\nContent-Length: 0\n\n",[3965,6795,6796,6810,6819],{"__ignoreMap":4052},[4056,6797,6798,6800,6802,6804,6807],{"class":4058,"line":4059},[4056,6799,4071],{"class":4070},[4056,6801,4074],{"class":4066},[4056,6803,4184],{"class":4077},[4056,6805,6806],{"class":4077}," 307",[4056,6808,6809],{"class":4091}," Temporary Redirect\n",[4056,6811,6812,6814,6816],{"class":4058,"line":4081},[4056,6813,4232],{"class":4084},[4056,6815,4088],{"class":4070},[4056,6817,6818],{"class":4091}," https:\u002F\u002Fapi-new.example.com\u002Fapi\u002Fv1\u002Forders\n",[4056,6820,6821,6823,6825],{"class":4058,"line":4095},[4056,6822,4108],{"class":4084},[4056,6824,4088],{"class":4070},[4056,6826,6116],{"class":4091},[3813,6828,6829,6830,6832],{},"Браузер повторює ",[3770,6831,4063],{}," (не GET) на нову адресу з тим самим тілом.",[3825,6834,6836],{"id":6835},"_308-permanent-redirect-постійне-перенаправлення-зберігає-метод","308 Permanent Redirect — Постійне перенаправлення (зберігає метод)",[3813,6838,6839,6841,6842,6844],{},[3770,6840,4009],{}," Аналогічно до 301, але ",[3770,6843,6714],{},". Ресурс назавжди переміщено, і метод запиту не повинен змінюватися.",[3813,6846,6847],{},[3770,6848,4500],{},[4047,6850,6852],{"className":4049,"code":6851,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 308 Permanent Redirect\nLocation: https:\u002F\u002Fnew-domain.example.com\u002Fapi\u002Fv1\u002Fusers\n",[3965,6853,6854,6868],{"__ignoreMap":4052},[4056,6855,6856,6858,6860,6862,6865],{"class":4058,"line":4059},[4056,6857,4071],{"class":4070},[4056,6859,4074],{"class":4066},[4056,6861,4184],{"class":4077},[4056,6863,6864],{"class":4077}," 308",[4056,6866,6867],{"class":4091}," Permanent Redirect\n",[4056,6869,6870,6872,6874],{"class":4058,"line":4081},[4056,6871,4232],{"class":4084},[4056,6873,4088],{"class":4070},[4056,6875,6876],{"class":4091}," https:\u002F\u002Fnew-domain.example.com\u002Fapi\u002Fv1\u002Fusers\n",[3813,6878,6879],{},"POST залишається POST при перенаправленні.",[3805,6881],{},[3808,6883,6885],{"id":6884},"група-4xx-помилки-клієнта","Група 4xx: Помилки клієнта",[3813,6887,4768,6888,6890,6891,6894,6895,6898],{},[3770,6889,3920],{}," вказують, що запит містить ",[3770,6892,6893],{},"помилку з боку клієнта"," — неправильний синтаксис, невалідні дані, відсутність автентифікації або прав доступу. Сервер ",[3770,6896,6897],{},"не повинен повторювати обробку"," такого запиту без виправлень з боку клієнта.",[3825,6900,6902],{"id":6901},"_400-bad-request-неправильний-запит","400 Bad Request — Неправильний запит",[3813,6904,6905,6907,6908,6911,6912,6915],{},[3770,6906,4009],{}," Сервер ",[3770,6909,6910],{},"не може або не хоче"," обробляти запит через ",[3770,6913,6914],{},"помилку синтаксису"," або невалідні дані.",[3813,6917,6918,6920],{},[3770,6919,4019],{}," Некоректний JSON, відсутні обов'язкові поля, невалідний формат даних, порушення бізнес-правил.",[3813,6922,6923],{},[3770,6924,6925],{},"Приклад 1: Некоректний JSON",[3813,6927,6928],{},[3770,6929,6732],{},[4047,6931,6933],{"className":4049,"code":6932,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Fusers HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"email\":\"john@example.com\",\"name\":John}\n",[3965,6934,6935,6947,6955,6959],{"__ignoreMap":4052},[4056,6936,6937,6939,6941,6943,6945],{"class":4058,"line":4059},[4056,6938,4063],{"class":4062},[4056,6940,5083],{"class":4066},[4056,6942,4071],{"class":4070},[4056,6944,4074],{"class":4066},[4056,6946,4078],{"class":4077},[4056,6948,6949,6951,6953],{"class":4058,"line":4081},[4056,6950,4026],{"class":4084},[4056,6952,4088],{"class":4070},[4056,6954,4246],{"class":4091},[4056,6956,6957],{"class":4058,"line":4095},[4056,6958,4131],{"emptyLinePlaceholder":4130},[4056,6960,6961,6963,6965,6967,6969,6971,6973,6975,6978],{"class":4058,"line":4105},[4056,6962,4264],{"class":4066},[4056,6964,4881],{"class":4267},[4056,6966,4088],{"class":4066},[4056,6968,4886],{"class":4091},[4056,6970,4276],{"class":4066},[4056,6972,6680],{"class":4267},[4056,6974,4088],{"class":4066},[4056,6976,6977],{"class":4140},"John",[4056,6979,4297],{"class":4066},[3813,6981,6982,6983,3869],{},"(відсутні лапки навколо ",[3965,6984,6977],{},[3813,6986,6987],{},[3770,6988,4826],{},[4047,6990,6992],{"className":4049,"code":6991,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 400 Bad Request\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"error\":\"Bad Request\",\"message\":\"Invalid JSON syntax: expected string at line 1, column 37\"}\n",[3965,6993,6994,7008,7016,7020],{"__ignoreMap":4052},[4056,6995,6996,6998,7000,7002,7005],{"class":4058,"line":4059},[4056,6997,4071],{"class":4070},[4056,6999,4074],{"class":4066},[4056,7001,4184],{"class":4077},[4056,7003,7004],{"class":4077}," 400",[4056,7006,7007],{"class":4091}," Bad Request\n",[4056,7009,7010,7012,7014],{"class":4058,"line":4081},[4056,7011,4026],{"class":4084},[4056,7013,4088],{"class":4070},[4056,7015,4852],{"class":4091},[4056,7017,7018],{"class":4058,"line":4095},[4056,7019,4131],{"emptyLinePlaceholder":4130},[4056,7021,7022,7024,7027,7029,7032,7034,7037,7039,7042],{"class":4058,"line":4105},[4056,7023,4264],{"class":4066},[4056,7025,7026],{"class":4267},"\"error\"",[4056,7028,4088],{"class":4066},[4056,7030,7031],{"class":4091},"\"Bad Request\"",[4056,7033,4276],{"class":4066},[4056,7035,7036],{"class":4267},"\"message\"",[4056,7038,4088],{"class":4066},[4056,7040,7041],{"class":4091},"\"Invalid JSON syntax: expected string at line 1, column 37\"",[4056,7043,4297],{"class":4066},[3813,7045,7046],{},[3770,7047,7048],{},"Приклад 2: Валідація даних",[3813,7050,7051],{},[3770,7052,6732],{},[4047,7054,7056],{"className":4049,"code":7055,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Fusers HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"email\":\"invalid-email\",\"password\":\"123\"}\n",[3965,7057,7058,7070,7078,7082],{"__ignoreMap":4052},[4056,7059,7060,7062,7064,7066,7068],{"class":4058,"line":4059},[4056,7061,4063],{"class":4062},[4056,7063,5083],{"class":4066},[4056,7065,4071],{"class":4070},[4056,7067,4074],{"class":4066},[4056,7069,4078],{"class":4077},[4056,7071,7072,7074,7076],{"class":4058,"line":4081},[4056,7073,4026],{"class":4084},[4056,7075,4088],{"class":4070},[4056,7077,4246],{"class":4091},[4056,7079,7080],{"class":4058,"line":4095},[4056,7081,4131],{"emptyLinePlaceholder":4130},[4056,7083,7084,7086,7088,7090,7093,7095,7097,7099,7102],{"class":4058,"line":4105},[4056,7085,4264],{"class":4066},[4056,7087,4881],{"class":4267},[4056,7089,4088],{"class":4066},[4056,7091,7092],{"class":4091},"\"invalid-email\"",[4056,7094,4276],{"class":4066},[4056,7096,5134],{"class":4267},[4056,7098,4088],{"class":4066},[4056,7100,7101],{"class":4091},"\"123\"",[4056,7103,4297],{"class":4066},[3813,7105,7106],{},[3770,7107,4826],{},[4047,7109,7111],{"className":4049,"code":7110,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 400 Bad Request\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"error\":\"Validation Failed\",\"details\":[{\"field\":\"email\",\"message\":\"Must be a valid email address\"},{\"field\":\"password\",\"message\":\"Must be at least 8 characters\"}]}\n",[3965,7112,7113,7125,7133,7137],{"__ignoreMap":4052},[4056,7114,7115,7117,7119,7121,7123],{"class":4058,"line":4059},[4056,7116,4071],{"class":4070},[4056,7118,4074],{"class":4066},[4056,7120,4184],{"class":4077},[4056,7122,7004],{"class":4077},[4056,7124,7007],{"class":4091},[4056,7126,7127,7129,7131],{"class":4058,"line":4081},[4056,7128,4026],{"class":4084},[4056,7130,4088],{"class":4070},[4056,7132,4852],{"class":4091},[4056,7134,7135],{"class":4058,"line":4095},[4056,7136,4131],{"emptyLinePlaceholder":4130},[4056,7138,7139,7141,7143,7145,7148,7150,7153,7156,7159,7161,7163,7165,7167,7169,7172,7175,7177,7179,7181,7183,7185,7187,7190],{"class":4058,"line":4105},[4056,7140,4264],{"class":4066},[4056,7142,7026],{"class":4267},[4056,7144,4088],{"class":4066},[4056,7146,7147],{"class":4091},"\"Validation Failed\"",[4056,7149,4276],{"class":4066},[4056,7151,7152],{"class":4267},"\"details\"",[4056,7154,7155],{"class":4066},":[{",[4056,7157,7158],{"class":4267},"\"field\"",[4056,7160,4088],{"class":4066},[4056,7162,4881],{"class":4091},[4056,7164,4276],{"class":4066},[4056,7166,7036],{"class":4267},[4056,7168,4088],{"class":4066},[4056,7170,7171],{"class":4091},"\"Must be a valid email address\"",[4056,7173,7174],{"class":4066},"},{",[4056,7176,7158],{"class":4267},[4056,7178,4088],{"class":4066},[4056,7180,5134],{"class":4091},[4056,7182,4276],{"class":4066},[4056,7184,7036],{"class":4267},[4056,7186,4088],{"class":4066},[4056,7188,7189],{"class":4091},"\"Must be at least 8 characters\"",[4056,7191,7192],{"class":4066},"}]}\n",[3825,7194,7196],{"id":7195},"_401-unauthorized-необхідна-автентифікація","401 Unauthorized — Необхідна автентифікація",[3813,7198,7199,7201,7202,7205],{},[3770,7200,4009],{}," Запит вимагає ",[3770,7203,7204],{},"автентифікації користувача",". Клієнт або не надав облікові дані, або надав невалідні\u002Fпрострочені.",[3813,7207,7208,7211,7212,7215],{},[3770,7209,7210],{},"Назва заплутана:"," Насправді означає ",[3770,7213,7214],{},"Unauthenticated"," (не автентифікований), а не Unauthorized (не авторизований).",[3813,7217,7218,7220],{},[3770,7219,4019],{}," Відсутній токен, невалідний JWT, прострочена сесія.",[3813,7222,7223],{},[3770,7224,7225],{},"Приклад 1: Відсутній токен",[3813,7227,7228],{},[3770,7229,6732],{},[4047,7231,7233],{"className":4049,"code":7232,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fusers\u002Fme HTTP\u002F1.1\nHost: api.example.com\n",[3965,7234,7235,7248],{"__ignoreMap":4052},[4056,7236,7237,7239,7242,7244,7246],{"class":4058,"line":4059},[4056,7238,4345],{"class":4062},[4056,7240,7241],{"class":4066}," \u002Fapi\u002Fv1\u002Fusers\u002Fme ",[4056,7243,4071],{"class":4070},[4056,7245,4074],{"class":4066},[4056,7247,4078],{"class":4077},[4056,7249,7250,7252,7254],{"class":4058,"line":4081},[4056,7251,4085],{"class":4084},[4056,7253,4088],{"class":4070},[4056,7255,4821],{"class":4091},[3813,7257,7258],{},[3770,7259,4826],{},[4047,7261,7263],{"className":4049,"code":7262,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 401 Unauthorized\nWWW-Authenticate: Bearer realm=\"API\"\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"error\":\"Unauthorized\",\"message\":\"Authentication required. Please provide a valid access token.\"}\n",[3965,7264,7265,7279,7289,7297,7301],{"__ignoreMap":4052},[4056,7266,7267,7269,7271,7273,7276],{"class":4058,"line":4059},[4056,7268,4071],{"class":4070},[4056,7270,4074],{"class":4066},[4056,7272,4184],{"class":4077},[4056,7274,7275],{"class":4077}," 401",[4056,7277,7278],{"class":4091}," Unauthorized\n",[4056,7280,7281,7284,7286],{"class":4058,"line":4081},[4056,7282,7283],{"class":4084},"WWW-Authenticate",[4056,7285,4088],{"class":4070},[4056,7287,7288],{"class":4091}," Bearer realm=\"API\"\n",[4056,7290,7291,7293,7295],{"class":4058,"line":4095},[4056,7292,4026],{"class":4084},[4056,7294,4088],{"class":4070},[4056,7296,4852],{"class":4091},[4056,7298,7299],{"class":4058,"line":4105},[4056,7300,4131],{"emptyLinePlaceholder":4130},[4056,7302,7303,7305,7307,7309,7312,7314,7316,7318,7321],{"class":4058,"line":4116},[4056,7304,4264],{"class":4066},[4056,7306,7026],{"class":4267},[4056,7308,4088],{"class":4066},[4056,7310,7311],{"class":4091},"\"Unauthorized\"",[4056,7313,4276],{"class":4066},[4056,7315,7036],{"class":4267},[4056,7317,4088],{"class":4066},[4056,7319,7320],{"class":4091},"\"Authentication required. Please provide a valid access token.\"",[4056,7322,4297],{"class":4066},[3813,7324,7325,7326,7328,7329,7332],{},"Заголовок ",[3965,7327,7283],{}," вказує схему автентифікації (",[3965,7330,7331],{},"Bearer",").",[3813,7334,7335],{},[3770,7336,7337],{},"Приклад 2: Невалідний токен",[3813,7339,7340],{},[3770,7341,6732],{},[4047,7343,7345],{"className":4049,"code":7344,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fusers\u002Fme HTTP\u002F1.1\nAuthorization: Bearer invalid-or-expired-token-xyz\n",[3965,7346,7347,7359],{"__ignoreMap":4052},[4056,7348,7349,7351,7353,7355,7357],{"class":4058,"line":4059},[4056,7350,4345],{"class":4062},[4056,7352,7241],{"class":4066},[4056,7354,4071],{"class":4070},[4056,7356,4074],{"class":4066},[4056,7358,4078],{"class":4077},[4056,7360,7361,7363,7365],{"class":4058,"line":4081},[4056,7362,5655],{"class":4084},[4056,7364,4088],{"class":4070},[4056,7366,7367],{"class":4091}," Bearer invalid-or-expired-token-xyz\n",[3813,7369,7370],{},[3770,7371,4826],{},[4047,7373,7375],{"className":4049,"code":7374,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 401 Unauthorized\nWWW-Authenticate: Bearer error=\"invalid_token\", error_description=\"Token has expired\"\nContent-Type: application\u002Fjson\n\n{\"error\":\"Unauthorized\",\"message\":\"Access token has expired. Please refresh your token.\"}\n",[3965,7376,7377,7389,7398,7406,7410],{"__ignoreMap":4052},[4056,7378,7379,7381,7383,7385,7387],{"class":4058,"line":4059},[4056,7380,4071],{"class":4070},[4056,7382,4074],{"class":4066},[4056,7384,4184],{"class":4077},[4056,7386,7275],{"class":4077},[4056,7388,7278],{"class":4091},[4056,7390,7391,7393,7395],{"class":4058,"line":4081},[4056,7392,7283],{"class":4084},[4056,7394,4088],{"class":4070},[4056,7396,7397],{"class":4091}," Bearer error=\"invalid_token\", error_description=\"Token has expired\"\n",[4056,7399,7400,7402,7404],{"class":4058,"line":4095},[4056,7401,4026],{"class":4084},[4056,7403,4088],{"class":4070},[4056,7405,4246],{"class":4091},[4056,7407,7408],{"class":4058,"line":4105},[4056,7409,4131],{"emptyLinePlaceholder":4130},[4056,7411,7412,7414,7416,7418,7420,7422,7424,7426,7429],{"class":4058,"line":4116},[4056,7413,4264],{"class":4066},[4056,7415,7026],{"class":4267},[4056,7417,4088],{"class":4066},[4056,7419,7311],{"class":4091},[4056,7421,4276],{"class":4066},[4056,7423,7036],{"class":4267},[4056,7425,4088],{"class":4066},[4056,7427,7428],{"class":4091},"\"Access token has expired. Please refresh your token.\"",[4056,7430,4297],{"class":4066},[3825,7432,7434],{"id":7433},"_402-payment-required-необхідна-оплата","402 Payment Required — Необхідна оплата",[3813,7436,7437,7439,7440,7443],{},[3770,7438,4009],{}," ",[3770,7441,7442],{},"Зарезервовано для майбутнього використання",". Передбачалося для систем цифрових платежів, але так і не було стандартизовано.",[3813,7445,7446,7448],{},[3770,7447,4019],{}," Деякі API використовують 402 для позначення вичерпаного ліміту (rate limit) або необхідності оплати підписки.",[3825,7450,7452],{"id":7451},"_403-forbidden-доступ-заборонено","403 Forbidden — Доступ заборонено",[3813,7454,7455,6907,7457,7460,7461,7464,7465,7468],{},[3770,7456,4009],{},[3770,7458,7459],{},"зрозумів запит",", але ",[3770,7462,7463],{},"відмовляє у доступі",". Автентифікація ",[3770,7466,7467],{},"не допоможе"," — у користувача немає прав на цю операцію.",[3813,7470,7471],{},[3770,7472,7473],{},"Відмінність від 401:",[3746,7475,7476,7485],{},[3749,7477,7478,7481,7482,4310],{},[3770,7479,7480],{},"401:"," Немає або невалідна автентифікація → ",[3770,7483,7484],{},"надайте облікові дані",[3749,7486,7487,7490,7491,7494,7495,4310],{},[3770,7488,7489],{},"403:"," Автентифікація є, але ",[3770,7492,7493],{},"недостатньо прав"," → ",[3770,7496,7497],{},"запитайте доступ у адміністратора",[3813,7499,7500],{},[3770,7501,7502],{},"Приклад: Недостатньо прав для видалення",[3813,7504,7505],{},[3770,7506,7507],{},"Запит (від звичайного користувача):",[4047,7509,7511],{"className":4049,"code":7510,"language":4051,"meta":4052,"style":4052},"DELETE \u002Fapi\u002Fv1\u002Fusers\u002F10 HTTP\u002F1.1\nAuthorization: Bearer user-token-xyz\n",[3965,7512,7513,7526],{"__ignoreMap":4052},[4056,7514,7515,7517,7520,7522,7524],{"class":4058,"line":4059},[4056,7516,5642],{"class":4062},[4056,7518,7519],{"class":4066}," \u002Fapi\u002Fv1\u002Fusers\u002F10 ",[4056,7521,4071],{"class":4070},[4056,7523,4074],{"class":4066},[4056,7525,4078],{"class":4077},[4056,7527,7528,7530,7532],{"class":4058,"line":4081},[4056,7529,5655],{"class":4084},[4056,7531,4088],{"class":4070},[4056,7533,7534],{"class":4091}," Bearer user-token-xyz\n",[3813,7536,7537],{},[3770,7538,4826],{},[4047,7540,7542],{"className":4049,"code":7541,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 403 Forbidden\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"error\":\"Forbidden\",\"message\":\"You do not have permission to delete users. Required role: admin\"}\n",[3965,7543,7544,7558,7566,7570],{"__ignoreMap":4052},[4056,7545,7546,7548,7550,7552,7555],{"class":4058,"line":4059},[4056,7547,4071],{"class":4070},[4056,7549,4074],{"class":4066},[4056,7551,4184],{"class":4077},[4056,7553,7554],{"class":4077}," 403",[4056,7556,7557],{"class":4091}," Forbidden\n",[4056,7559,7560,7562,7564],{"class":4058,"line":4081},[4056,7561,4026],{"class":4084},[4056,7563,4088],{"class":4070},[4056,7565,4852],{"class":4091},[4056,7567,7568],{"class":4058,"line":4095},[4056,7569,4131],{"emptyLinePlaceholder":4130},[4056,7571,7572,7574,7576,7578,7581,7583,7585,7587,7590],{"class":4058,"line":4105},[4056,7573,4264],{"class":4066},[4056,7575,7026],{"class":4267},[4056,7577,4088],{"class":4066},[4056,7579,7580],{"class":4091},"\"Forbidden\"",[4056,7582,4276],{"class":4066},[4056,7584,7036],{"class":4267},[4056,7586,4088],{"class":4066},[4056,7588,7589],{"class":4091},"\"You do not have permission to delete users. Required role: admin\"",[4056,7591,4297],{"class":4066},[3825,7593,7595],{"id":7594},"_404-not-found-ресурс-не-знайдено","404 Not Found — Ресурс не знайдено",[3813,7597,7598,6907,7600,7603],{},[3770,7599,4009],{},[3770,7601,7602],{},"не знайшов"," запитуваний ресурс. URL може бути неправильним, або ресурс було видалено.",[3813,7605,7606,7608],{},[3770,7607,4019],{}," Невірний URI, видалений ресурс, несніснуючий ID.",[3813,7610,7611],{},[3770,7612,4500],{},[3813,7614,7615],{},[3770,7616,6732],{},[4047,7618,7620],{"className":4049,"code":7619,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fusers\u002F99999 HTTP\u002F1.1\nHost: api.example.com\n",[3965,7621,7622,7635],{"__ignoreMap":4052},[4056,7623,7624,7626,7629,7631,7633],{"class":4058,"line":4059},[4056,7625,4345],{"class":4062},[4056,7627,7628],{"class":4066}," \u002Fapi\u002Fv1\u002Fusers\u002F99999 ",[4056,7630,4071],{"class":4070},[4056,7632,4074],{"class":4066},[4056,7634,4078],{"class":4077},[4056,7636,7637,7639,7641],{"class":4058,"line":4081},[4056,7638,4085],{"class":4084},[4056,7640,4088],{"class":4070},[4056,7642,4821],{"class":4091},[3813,7644,7645],{},[3770,7646,4826],{},[4047,7648,7650],{"className":4049,"code":7649,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 404 Not Found\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"error\":\"Not Found\",\"message\":\"User with ID 99999 does not exist\"}\n",[3965,7651,7652,7666,7674,7678],{"__ignoreMap":4052},[4056,7653,7654,7656,7658,7660,7663],{"class":4058,"line":4059},[4056,7655,4071],{"class":4070},[4056,7657,4074],{"class":4066},[4056,7659,4184],{"class":4077},[4056,7661,7662],{"class":4077}," 404",[4056,7664,7665],{"class":4091}," Not Found\n",[4056,7667,7668,7670,7672],{"class":4058,"line":4081},[4056,7669,4026],{"class":4084},[4056,7671,4088],{"class":4070},[4056,7673,4852],{"class":4091},[4056,7675,7676],{"class":4058,"line":4095},[4056,7677,4131],{"emptyLinePlaceholder":4130},[4056,7679,7680,7682,7684,7686,7689,7691,7693,7695,7698],{"class":4058,"line":4105},[4056,7681,4264],{"class":4066},[4056,7683,7026],{"class":4267},[4056,7685,4088],{"class":4066},[4056,7687,7688],{"class":4091},"\"Not Found\"",[4056,7690,4276],{"class":4066},[4056,7692,7036],{"class":4267},[4056,7694,4088],{"class":4066},[4056,7696,7697],{"class":4091},"\"User with ID 99999 does not exist\"",[4056,7699,4297],{"class":4066},[5243,7701,7702,7705,7707,7708,7711,7712,7715,7716,7719,7720,4310],{},[3770,7703,7704],{},"404 vs 410:",[4021,7706],{},"\nЯкщо ресурс було ",[3770,7709,7710],{},"тимчасово видалено"," і може з'явитися знову, використовуйте ",[3965,7713,7714],{},"404",". Якщо ресурс ",[3770,7717,7718],{},"назавжди видалено",", використовуйте ",[3965,7721,7722],{},"410 Gone",[3825,7724,7726],{"id":7725},"_405-method-not-allowed-метод-не-дозволено","405 Method Not Allowed — Метод не дозволено",[3813,7728,7729,7731,7732,7735,7736,7739],{},[3770,7730,4009],{}," Метод запиту ",[3770,7733,7734],{},"не підтримується"," для даного ресурсу. Відповідь повинна містити заголовок ",[3965,7737,7738],{},"Allow"," зі списком дозволених методів.",[3813,7741,7742,7744],{},[3770,7743,4019],{}," Спроба DELETE на read-only ресурс, POST на endpoint, що підтримує лише GET.",[3813,7746,7747],{},[3770,7748,4500],{},[3813,7750,7751],{},[3770,7752,7753],{},"Запит (спроба видалити системний ресурс):",[4047,7755,7757],{"className":4049,"code":7756,"language":4051,"meta":4052,"style":4052},"DELETE \u002Fapi\u002Fv1\u002Fsystem\u002Fconfig HTTP\u002F1.1\n",[3965,7758,7759],{"__ignoreMap":4052},[4056,7760,7761,7763,7766,7768,7770],{"class":4058,"line":4059},[4056,7762,5642],{"class":4062},[4056,7764,7765],{"class":4066}," \u002Fapi\u002Fv1\u002Fsystem\u002Fconfig ",[4056,7767,4071],{"class":4070},[4056,7769,4074],{"class":4066},[4056,7771,4078],{"class":4077},[3813,7773,7774],{},[3770,7775,4826],{},[4047,7777,7779],{"className":4049,"code":7778,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 405 Method Not Allowed\nAllow: GET, PUT\nContent-Type: application\u002Fjson\n\n{\"error\":\"Method Not Allowed\",\"message\":\"DELETE is not supported for this resource. Allowed methods: GET, PUT\"}\n",[3965,7780,7781,7795,7804,7812,7816],{"__ignoreMap":4052},[4056,7782,7783,7785,7787,7789,7792],{"class":4058,"line":4059},[4056,7784,4071],{"class":4070},[4056,7786,4074],{"class":4066},[4056,7788,4184],{"class":4077},[4056,7790,7791],{"class":4077}," 405",[4056,7793,7794],{"class":4091}," Method Not Allowed\n",[4056,7796,7797,7799,7801],{"class":4058,"line":4081},[4056,7798,7738],{"class":4084},[4056,7800,4088],{"class":4070},[4056,7802,7803],{"class":4091}," GET, PUT\n",[4056,7805,7806,7808,7810],{"class":4058,"line":4095},[4056,7807,4026],{"class":4084},[4056,7809,4088],{"class":4070},[4056,7811,4246],{"class":4091},[4056,7813,7814],{"class":4058,"line":4105},[4056,7815,4131],{"emptyLinePlaceholder":4130},[4056,7817,7818,7820,7822,7824,7827,7829,7831,7833,7836],{"class":4058,"line":4116},[4056,7819,4264],{"class":4066},[4056,7821,7026],{"class":4267},[4056,7823,4088],{"class":4066},[4056,7825,7826],{"class":4091},"\"Method Not Allowed\"",[4056,7828,4276],{"class":4066},[4056,7830,7036],{"class":4267},[4056,7832,4088],{"class":4066},[4056,7834,7835],{"class":4091},"\"DELETE is not supported for this resource. Allowed methods: GET, PUT\"",[4056,7837,4297],{"class":4066},[3825,7839,7841],{"id":7840},"_406-not-acceptable-неприйнятний-формат","406 Not Acceptable — Неприйнятний формат",[3813,7843,7844,6907,7846,7849,7850,4310],{},[3770,7845,4009],{},[3770,7847,7848],{},"не може"," згенерувати відповідь у форматі, запитаному клієнтом через заголовок ",[3965,7851,7852],{},"Accept",[3813,7854,7855],{},[3770,7856,4500],{},[3813,7858,7859],{},[3770,7860,7861],{},"Запит (клієнт хоче XML):",[4047,7863,7865],{"className":4049,"code":7864,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fusers\u002F42 HTTP\u002F1.1\nAccept: application\u002Fxml\n",[3965,7866,7867,7879],{"__ignoreMap":4052},[4056,7868,7869,7871,7873,7875,7877],{"class":4058,"line":4059},[4056,7870,4345],{"class":4062},[4056,7872,4806],{"class":4066},[4056,7874,4071],{"class":4070},[4056,7876,4074],{"class":4066},[4056,7878,4078],{"class":4077},[4056,7880,7881,7883,7885],{"class":4058,"line":4081},[4056,7882,7852],{"class":4084},[4056,7884,4088],{"class":4070},[4056,7886,7887],{"class":4091}," application\u002Fxml\n",[3813,7889,7890],{},[3770,7891,7892],{},"Відповідь (сервер підтримує лише JSON):",[4047,7894,7896],{"className":4049,"code":7895,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 406 Not Acceptable\nContent-Type: application\u002Fjson\n\n{\"error\":\"Not Acceptable\",\"message\":\"Server only supports application\u002Fjson. Requested format application\u002Fxml is not available.\"}\n",[3965,7897,7898,7912,7920,7924],{"__ignoreMap":4052},[4056,7899,7900,7902,7904,7906,7909],{"class":4058,"line":4059},[4056,7901,4071],{"class":4070},[4056,7903,4074],{"class":4066},[4056,7905,4184],{"class":4077},[4056,7907,7908],{"class":4077}," 406",[4056,7910,7911],{"class":4091}," Not Acceptable\n",[4056,7913,7914,7916,7918],{"class":4058,"line":4081},[4056,7915,4026],{"class":4084},[4056,7917,4088],{"class":4070},[4056,7919,4246],{"class":4091},[4056,7921,7922],{"class":4058,"line":4095},[4056,7923,4131],{"emptyLinePlaceholder":4130},[4056,7925,7926,7928,7930,7932,7935,7937,7939,7941,7944],{"class":4058,"line":4105},[4056,7927,4264],{"class":4066},[4056,7929,7026],{"class":4267},[4056,7931,4088],{"class":4066},[4056,7933,7934],{"class":4091},"\"Not Acceptable\"",[4056,7936,4276],{"class":4066},[4056,7938,7036],{"class":4267},[4056,7940,4088],{"class":4066},[4056,7942,7943],{"class":4091},"\"Server only supports application\u002Fjson. Requested format application\u002Fxml is not available.\"",[4056,7945,4297],{"class":4066},[3825,7947,7949],{"id":7948},"_408-request-timeout-таймаут-запиту","408 Request Timeout — Таймаут запиту",[3813,7951,7952,7954,7955,7958],{},[3770,7953,4009],{}," Клієнт ",[3770,7956,7957],{},"не надіслав повний запит"," у відведений час. Сервер закриває з'єднання.",[3813,7960,7961,7963],{},[3770,7962,4019],{}," Повільне з'єднання, клієнт завис при надсиланні великого тіла.",[3825,7965,7967],{"id":7966},"_409-conflict-конфлікт","409 Conflict — Конфлікт",[3813,7969,7970,7972,7973,7976],{},[3770,7971,4009],{}," Запит конфліктує з ",[3770,7974,7975],{},"поточним станом ресурсу"," на сервері. Зазвичай при спробі створити дублікат або порушенні бізнес-правил.",[3813,7978,7979],{},[3770,7980,7981],{},"Приклад 1: Дублікат email",[3813,7983,7984],{},[3770,7985,6732],{},[4047,7987,7989],{"className":4049,"code":7988,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Fusers HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"email\":\"existing@example.com\",\"password\":\"pass123\"}\n",[3965,7990,7991,8003,8011,8015],{"__ignoreMap":4052},[4056,7992,7993,7995,7997,7999,8001],{"class":4058,"line":4059},[4056,7994,4063],{"class":4062},[4056,7996,5083],{"class":4066},[4056,7998,4071],{"class":4070},[4056,8000,4074],{"class":4066},[4056,8002,4078],{"class":4077},[4056,8004,8005,8007,8009],{"class":4058,"line":4081},[4056,8006,4026],{"class":4084},[4056,8008,4088],{"class":4070},[4056,8010,4246],{"class":4091},[4056,8012,8013],{"class":4058,"line":4095},[4056,8014,4131],{"emptyLinePlaceholder":4130},[4056,8016,8017,8019,8021,8023,8026,8028,8030,8032,8035],{"class":4058,"line":4105},[4056,8018,4264],{"class":4066},[4056,8020,4881],{"class":4267},[4056,8022,4088],{"class":4066},[4056,8024,8025],{"class":4091},"\"existing@example.com\"",[4056,8027,4276],{"class":4066},[4056,8029,5134],{"class":4267},[4056,8031,4088],{"class":4066},[4056,8033,8034],{"class":4091},"\"pass123\"",[4056,8036,4297],{"class":4066},[3813,8038,8039],{},[3770,8040,4826],{},[4047,8042,8044],{"className":4049,"code":8043,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 409 Conflict\nContent-Type: application\u002Fjson\n\n{\"error\":\"Conflict\",\"message\":\"User with email 'existing@example.com' already exists\",\"field\":\"email\"}\n",[3965,8045,8046,8060,8068,8072],{"__ignoreMap":4052},[4056,8047,8048,8050,8052,8054,8057],{"class":4058,"line":4059},[4056,8049,4071],{"class":4070},[4056,8051,4074],{"class":4066},[4056,8053,4184],{"class":4077},[4056,8055,8056],{"class":4077}," 409",[4056,8058,8059],{"class":4091}," Conflict\n",[4056,8061,8062,8064,8066],{"class":4058,"line":4081},[4056,8063,4026],{"class":4084},[4056,8065,4088],{"class":4070},[4056,8067,4246],{"class":4091},[4056,8069,8070],{"class":4058,"line":4095},[4056,8071,4131],{"emptyLinePlaceholder":4130},[4056,8073,8074,8076,8078,8080,8083,8085,8087,8089,8092,8094,8096,8098,8100],{"class":4058,"line":4105},[4056,8075,4264],{"class":4066},[4056,8077,7026],{"class":4267},[4056,8079,4088],{"class":4066},[4056,8081,8082],{"class":4091},"\"Conflict\"",[4056,8084,4276],{"class":4066},[4056,8086,7036],{"class":4267},[4056,8088,4088],{"class":4066},[4056,8090,8091],{"class":4091},"\"User with email 'existing@example.com' already exists\"",[4056,8093,4276],{"class":4066},[4056,8095,7158],{"class":4267},[4056,8097,4088],{"class":4066},[4056,8099,4881],{"class":4091},[4056,8101,4297],{"class":4066},[3813,8103,8104],{},[3770,8105,8106],{},"Приклад 2: Конфлікт версій (optimistic locking)",[3813,8108,8109],{},[3770,8110,6732],{},[4047,8112,8114],{"className":4049,"code":8113,"language":4051,"meta":4052,"style":4052},"PUT \u002Fapi\u002Fv1\u002Fdocuments\u002F42 HTTP\u002F1.1\nIf-Match: \"version-5\"\nContent-Type: application\u002Fjson\n\n{\"title\":\"Updated Title\"}\n",[3965,8115,8116,8129,8139,8147,8151],{"__ignoreMap":4052},[4056,8117,8118,8120,8123,8125,8127],{"class":4058,"line":4059},[4056,8119,5711],{"class":4062},[4056,8121,8122],{"class":4066}," \u002Fapi\u002Fv1\u002Fdocuments\u002F42 ",[4056,8124,4071],{"class":4070},[4056,8126,4074],{"class":4066},[4056,8128,4078],{"class":4077},[4056,8130,8131,8134,8136],{"class":4058,"line":4081},[4056,8132,8133],{"class":4084},"If-Match",[4056,8135,4088],{"class":4070},[4056,8137,8138],{"class":4091}," \"version-5\"\n",[4056,8140,8141,8143,8145],{"class":4058,"line":4095},[4056,8142,4026],{"class":4084},[4056,8144,4088],{"class":4070},[4056,8146,4246],{"class":4091},[4056,8148,8149],{"class":4058,"line":4105},[4056,8150,4131],{"emptyLinePlaceholder":4130},[4056,8152,8153,8155,8157,8159,8162],{"class":4058,"line":4116},[4056,8154,4264],{"class":4066},[4056,8156,6339],{"class":4267},[4056,8158,4088],{"class":4066},[4056,8160,8161],{"class":4091},"\"Updated Title\"",[4056,8163,4297],{"class":4066},[3813,8165,8166],{},[3770,8167,8168],{},"Відповідь (документ вже оновлено іншим користувачем):",[4047,8170,8172],{"className":4049,"code":8171,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 409 Conflict\nETag: \"version-7\"\nContent-Type: application\u002Fjson\n\n{\"error\":\"Conflict\",\"message\":\"Document was modified by another user. Current version: 7, your version: 5\"}\n",[3965,8173,8174,8186,8195,8203,8207],{"__ignoreMap":4052},[4056,8175,8176,8178,8180,8182,8184],{"class":4058,"line":4059},[4056,8177,4071],{"class":4070},[4056,8179,4074],{"class":4066},[4056,8181,4184],{"class":4077},[4056,8183,8056],{"class":4077},[4056,8185,8059],{"class":4091},[4056,8187,8188,8190,8192],{"class":4058,"line":4081},[4056,8189,6588],{"class":4084},[4056,8191,4088],{"class":4070},[4056,8193,8194],{"class":4091}," \"version-7\"\n",[4056,8196,8197,8199,8201],{"class":4058,"line":4095},[4056,8198,4026],{"class":4084},[4056,8200,4088],{"class":4070},[4056,8202,4246],{"class":4091},[4056,8204,8205],{"class":4058,"line":4105},[4056,8206,4131],{"emptyLinePlaceholder":4130},[4056,8208,8209,8211,8213,8215,8217,8219,8221,8223,8226],{"class":4058,"line":4116},[4056,8210,4264],{"class":4066},[4056,8212,7026],{"class":4267},[4056,8214,4088],{"class":4066},[4056,8216,8082],{"class":4091},[4056,8218,4276],{"class":4066},[4056,8220,7036],{"class":4267},[4056,8222,4088],{"class":4066},[4056,8224,8225],{"class":4091},"\"Document was modified by another user. Current version: 7, your version: 5\"",[4056,8227,4297],{"class":4066},[3825,8229,8231],{"id":8230},"_410-gone-назавжди-видалено","410 Gone — Назавжди видалено",[3813,8233,8234,6023,8236,8239,8240,8243],{},[3770,8235,4009],{},[3770,8237,8238],{},"раніше існував",", але був ",[3770,8241,8242],{},"назавжди видалений"," і більше не буде доступним.",[3813,8245,8246],{},[3770,8247,8248],{},"Відмінність від 404:",[3746,8250,8251,8257],{},[3749,8252,8253,8256],{},[3770,8254,8255],{},"404:"," Ресурс не знайдено (можливо, ніколи не існував або тимчасово недоступний).",[3749,8258,8259,8262,8263,4310],{},[3770,8260,8261],{},"410:"," Ресурс точно існував, але ",[3770,8264,8265],{},"навмисно видалений назавжди",[3813,8267,8268],{},[3770,8269,4500],{},[3813,8271,8272],{},[3770,8273,6732],{},[4047,8275,8277],{"className":4049,"code":8276,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Farticles\u002Fold-article-2020 HTTP\u002F1.1\n",[3965,8278,8279],{"__ignoreMap":4052},[4056,8280,8281,8283,8286,8288,8290],{"class":4058,"line":4059},[4056,8282,4345],{"class":4062},[4056,8284,8285],{"class":4066}," \u002Fapi\u002Fv1\u002Farticles\u002Fold-article-2020 ",[4056,8287,4071],{"class":4070},[4056,8289,4074],{"class":4066},[4056,8291,4078],{"class":4077},[3813,8293,8294],{},[3770,8295,4826],{},[4047,8297,8299],{"className":4049,"code":8298,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 410 Gone\nContent-Type: application\u002Fjson\n\n{\"error\":\"Gone\",\"message\":\"This article was permanently removed on 2023-01-15 due to outdated information.\"}\n",[3965,8300,8301,8315,8323,8327],{"__ignoreMap":4052},[4056,8302,8303,8305,8307,8309,8312],{"class":4058,"line":4059},[4056,8304,4071],{"class":4070},[4056,8306,4074],{"class":4066},[4056,8308,4184],{"class":4077},[4056,8310,8311],{"class":4077}," 410",[4056,8313,8314],{"class":4091}," Gone\n",[4056,8316,8317,8319,8321],{"class":4058,"line":4081},[4056,8318,4026],{"class":4084},[4056,8320,4088],{"class":4070},[4056,8322,4246],{"class":4091},[4056,8324,8325],{"class":4058,"line":4095},[4056,8326,4131],{"emptyLinePlaceholder":4130},[4056,8328,8329,8331,8333,8335,8338,8340,8342,8344,8347],{"class":4058,"line":4105},[4056,8330,4264],{"class":4066},[4056,8332,7026],{"class":4267},[4056,8334,4088],{"class":4066},[4056,8336,8337],{"class":4091},"\"Gone\"",[4056,8339,4276],{"class":4066},[4056,8341,7036],{"class":4267},[4056,8343,4088],{"class":4066},[4056,8345,8346],{"class":4091},"\"This article was permanently removed on 2023-01-15 due to outdated information.\"",[4056,8348,4297],{"class":4066},[3825,8350,8352],{"id":8351},"_411-length-required-необхідна-довжина","411 Length Required — Необхідна довжина",[3813,8354,8355,8357,8358,4310],{},[3770,8356,4009],{}," Сервер відмовляється приймати запит без заголовка ",[3965,8359,4108],{},[3813,8361,8362],{},[3770,8363,4500],{},[3813,8365,8366],{},[3770,8367,8368],{},"Запит (без Content-Length):",[4047,8370,8372],{"className":4049,"code":8371,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Fupload HTTP\u002F1.1\nContent-Type: application\u002Foctet-stream\n\n[дані без вказаної довжини]\n",[3965,8373,8374,8387,8396,8400],{"__ignoreMap":4052},[4056,8375,8376,8378,8381,8383,8385],{"class":4058,"line":4059},[4056,8377,4063],{"class":4062},[4056,8379,8380],{"class":4066}," \u002Fapi\u002Fv1\u002Fupload ",[4056,8382,4071],{"class":4070},[4056,8384,4074],{"class":4066},[4056,8386,4078],{"class":4077},[4056,8388,8389,8391,8393],{"class":4058,"line":4081},[4056,8390,4026],{"class":4084},[4056,8392,4088],{"class":4070},[4056,8394,8395],{"class":4091}," application\u002Foctet-stream\n",[4056,8397,8398],{"class":4058,"line":4095},[4056,8399,4131],{"emptyLinePlaceholder":4130},[4056,8401,8402,8404,8407,8410,8413,8416],{"class":4058,"line":4105},[4056,8403,4137],{"class":4066},[4056,8405,8406],{"class":4140},"дані",[4056,8408,8409],{"class":4140}," без",[4056,8411,8412],{"class":4140}," вказаної",[4056,8414,8415],{"class":4140}," довжини",[4056,8417,4165],{"class":4066},[3813,8419,8420],{},[3770,8421,4826],{},[4047,8423,8425],{"className":4049,"code":8424,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 411 Length Required\nContent-Type: application\u002Fjson\n\n{\"error\":\"Length Required\",\"message\":\"Request must include Content-Length header\"}\n",[3965,8426,8427,8441,8449,8453],{"__ignoreMap":4052},[4056,8428,8429,8431,8433,8435,8438],{"class":4058,"line":4059},[4056,8430,4071],{"class":4070},[4056,8432,4074],{"class":4066},[4056,8434,4184],{"class":4077},[4056,8436,8437],{"class":4077}," 411",[4056,8439,8440],{"class":4091}," Length Required\n",[4056,8442,8443,8445,8447],{"class":4058,"line":4081},[4056,8444,4026],{"class":4084},[4056,8446,4088],{"class":4070},[4056,8448,4246],{"class":4091},[4056,8450,8451],{"class":4058,"line":4095},[4056,8452,4131],{"emptyLinePlaceholder":4130},[4056,8454,8455,8457,8459,8461,8464,8466,8468,8470,8473],{"class":4058,"line":4105},[4056,8456,4264],{"class":4066},[4056,8458,7026],{"class":4267},[4056,8460,4088],{"class":4066},[4056,8462,8463],{"class":4091},"\"Length Required\"",[4056,8465,4276],{"class":4066},[4056,8467,7036],{"class":4267},[4056,8469,4088],{"class":4066},[4056,8471,8472],{"class":4091},"\"Request must include Content-Length header\"",[4056,8474,4297],{"class":4066},[3825,8476,8478],{"id":8477},"_413-payload-too-large-тіло-запиту-занадто-велике","413 Payload Too Large — Тіло запиту занадто велике",[3813,8480,8481,8483,8484,8487],{},[3770,8482,4009],{}," Тіло запиту ",[3770,8485,8486],{},"перевищує ліміт",", встановлений сервером (розмір файлу, розмір JSON, тощо).",[3813,8489,8490],{},[3770,8491,4500],{},[3813,8493,8494],{},[3770,8495,8496],{},"Запит (файл 15 МБ):",[4047,8498,8500],{"className":4049,"code":8499,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Favatars HTTP\u002F1.1\nContent-Type: image\u002Fjpeg\nContent-Length: 15728640\n\n[15 МБ зображення]\n",[3965,8501,8502,8515,8524,8533,8537],{"__ignoreMap":4052},[4056,8503,8504,8506,8509,8511,8513],{"class":4058,"line":4059},[4056,8505,4063],{"class":4062},[4056,8507,8508],{"class":4066}," \u002Fapi\u002Fv1\u002Favatars ",[4056,8510,4071],{"class":4070},[4056,8512,4074],{"class":4066},[4056,8514,4078],{"class":4077},[4056,8516,8517,8519,8521],{"class":4058,"line":4081},[4056,8518,4026],{"class":4084},[4056,8520,4088],{"class":4070},[4056,8522,8523],{"class":4091}," image\u002Fjpeg\n",[4056,8525,8526,8528,8530],{"class":4058,"line":4095},[4056,8527,4108],{"class":4084},[4056,8529,4088],{"class":4070},[4056,8531,8532],{"class":4091}," 15728640\n",[4056,8534,8535],{"class":4058,"line":4105},[4056,8536,4131],{"emptyLinePlaceholder":4130},[4056,8538,8539,8541,8544,8546,8549],{"class":4058,"line":4116},[4056,8540,4137],{"class":4066},[4056,8542,8543],{"class":4077},"15",[4056,8545,5937],{"class":4140},[4056,8547,8548],{"class":4140}," зображення",[4056,8550,4165],{"class":4066},[3813,8552,8553],{},[3770,8554,8555],{},"Відповідь (ліміт 5 МБ):",[4047,8557,8559],{"className":4049,"code":8558,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 413 Payload Too Large\nContent-Type: application\u002Fjson\nRetry-After: 3600\n\n{\"error\":\"Payload Too Large\",\"message\":\"Maximum file size is 5 MB. Your file: 15 MB\",\"maxSize\":5242880}\n",[3965,8560,8561,8575,8583,8593,8597],{"__ignoreMap":4052},[4056,8562,8563,8565,8567,8569,8572],{"class":4058,"line":4059},[4056,8564,4071],{"class":4070},[4056,8566,4074],{"class":4066},[4056,8568,4184],{"class":4077},[4056,8570,8571],{"class":4077}," 413",[4056,8573,8574],{"class":4091}," Payload Too Large\n",[4056,8576,8577,8579,8581],{"class":4058,"line":4081},[4056,8578,4026],{"class":4084},[4056,8580,4088],{"class":4070},[4056,8582,4246],{"class":4091},[4056,8584,8585,8588,8590],{"class":4058,"line":4095},[4056,8586,8587],{"class":4084},"Retry-After",[4056,8589,4088],{"class":4070},[4056,8591,8592],{"class":4091}," 3600\n",[4056,8594,8595],{"class":4058,"line":4105},[4056,8596,4131],{"emptyLinePlaceholder":4130},[4056,8598,8599,8601,8603,8605,8608,8610,8612,8614,8617,8619,8622,8624,8627],{"class":4058,"line":4116},[4056,8600,4264],{"class":4066},[4056,8602,7026],{"class":4267},[4056,8604,4088],{"class":4066},[4056,8606,8607],{"class":4091},"\"Payload Too Large\"",[4056,8609,4276],{"class":4066},[4056,8611,7036],{"class":4267},[4056,8613,4088],{"class":4066},[4056,8615,8616],{"class":4091},"\"Maximum file size is 5 MB. Your file: 15 MB\"",[4056,8618,4276],{"class":4066},[4056,8620,8621],{"class":4267},"\"maxSize\"",[4056,8623,4088],{"class":4066},[4056,8625,8626],{"class":4077},"5242880",[4056,8628,4297],{"class":4066},[3813,8630,7325,8631,8633],{},[3965,8632,8587],{}," може вказувати, коли спробувати знову (якщо ліміт тимчасовий).",[3825,8635,8637],{"id":8636},"_415-unsupported-media-type-непідтримуваний-тип-медіа","415 Unsupported Media Type — Непідтримуваний тип медіа",[3813,8639,8640,6907,8642,8645,8646,8648],{},[3770,8641,4009],{},[3770,8643,8644],{},"відмовляється обробити запит",", тому що формат даних (",[3965,8647,4026],{},") не підтримується.",[3813,8650,8651],{},[3770,8652,4500],{},[3813,8654,8655],{},[3770,8656,8657],{},"Запит (XML замість JSON):",[4047,8659,8661],{"className":4049,"code":8660,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Fusers HTTP\u002F1.1\nContent-Type: application\u002Fxml\n\n\u003Cuser>\u003Cemail>john@example.com\u003C\u002Femail>\u003C\u002Fuser>\n",[3965,8662,8663,8675,8683,8687],{"__ignoreMap":4052},[4056,8664,8665,8667,8669,8671,8673],{"class":4058,"line":4059},[4056,8666,4063],{"class":4062},[4056,8668,5083],{"class":4066},[4056,8670,4071],{"class":4070},[4056,8672,4074],{"class":4066},[4056,8674,4078],{"class":4077},[4056,8676,8677,8679,8681],{"class":4058,"line":4081},[4056,8678,4026],{"class":4084},[4056,8680,4088],{"class":4070},[4056,8682,7887],{"class":4091},[4056,8684,8685],{"class":4058,"line":4095},[4056,8686,4131],{"emptyLinePlaceholder":4130},[4056,8688,8689,8691,8694,8697,8700,8703,8706,8708,8710,8712,8714],{"class":4058,"line":4105},[4056,8690,4664],{"class":4649},[4056,8692,8693],{"class":4084},"user",[4056,8695,8696],{"class":4649},">\u003C",[4056,8698,8699],{"class":4084},"email",[4056,8701,8702],{"class":4649},">",[4056,8704,8705],{"class":4066},"john@example.com",[4056,8707,4737],{"class":4649},[4056,8709,8699],{"class":4084},[4056,8711,4727],{"class":4649},[4056,8713,8693],{"class":4084},[4056,8715,4659],{"class":4649},[3813,8717,8718],{},[3770,8719,8720],{},"Відповідь (сервер приймає лише JSON):",[4047,8722,8724],{"className":4049,"code":8723,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 415 Unsupported Media Type\nContent-Type: application\u002Fjson\nAccept: application\u002Fjson\n\n{\"error\":\"Unsupported Media Type\",\"message\":\"Server only accepts application\u002Fjson. Received: application\u002Fxml\"}\n",[3965,8725,8726,8740,8748,8756,8760],{"__ignoreMap":4052},[4056,8727,8728,8730,8732,8734,8737],{"class":4058,"line":4059},[4056,8729,4071],{"class":4070},[4056,8731,4074],{"class":4066},[4056,8733,4184],{"class":4077},[4056,8735,8736],{"class":4077}," 415",[4056,8738,8739],{"class":4091}," Unsupported Media Type\n",[4056,8741,8742,8744,8746],{"class":4058,"line":4081},[4056,8743,4026],{"class":4084},[4056,8745,4088],{"class":4070},[4056,8747,4246],{"class":4091},[4056,8749,8750,8752,8754],{"class":4058,"line":4095},[4056,8751,7852],{"class":4084},[4056,8753,4088],{"class":4070},[4056,8755,4246],{"class":4091},[4056,8757,8758],{"class":4058,"line":4105},[4056,8759,4131],{"emptyLinePlaceholder":4130},[4056,8761,8762,8764,8766,8768,8771,8773,8775,8777,8780],{"class":4058,"line":4116},[4056,8763,4264],{"class":4066},[4056,8765,7026],{"class":4267},[4056,8767,4088],{"class":4066},[4056,8769,8770],{"class":4091},"\"Unsupported Media Type\"",[4056,8772,4276],{"class":4066},[4056,8774,7036],{"class":4267},[4056,8776,4088],{"class":4066},[4056,8778,8779],{"class":4091},"\"Server only accepts application\u002Fjson. Received: application\u002Fxml\"",[4056,8781,4297],{"class":4066},[3825,8783,8785],{"id":8784},"_422-unprocessable-entity-необроблювана-сутність","422 Unprocessable Entity — Необроблювана сутність",[3813,8787,8788,8790,8791,8794,8795,8798],{},[3770,8789,4009],{}," Запит ",[3770,8792,8793],{},"синтаксично коректний",", але сервер не може обробити його через ",[3770,8796,8797],{},"семантичні помилки"," (невалідні дані згідно бізнес-логіки).",[3813,8800,8801],{},[3770,8802,8803],{},"Відмінність від 400:",[3746,8805,8806,8812],{},[3749,8807,8808,8811],{},[3770,8809,8810],{},"400:"," Синтаксична помилка (некоректний JSON, невалідний формат).",[3749,8813,8814,8817],{},[3770,8815,8816],{},"422:"," Синтаксис правильний, але дані невалідні згідно правил (наприклад, дата народження у майбутньому).",[3813,8819,8820],{},[3770,8821,4500],{},[3813,8823,8824],{},[3770,8825,6732],{},[4047,8827,8829],{"className":4049,"code":8828,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Fbookings HTTP\u002F1.1\nContent-Type: application\u002Fjson\n\n{\"roomId\":42,\"checkIn\":\"2026-08-30\",\"checkOut\":\"2026-08-25\"}\n",[3965,8830,8831,8844,8852,8856],{"__ignoreMap":4052},[4056,8832,8833,8835,8838,8840,8842],{"class":4058,"line":4059},[4056,8834,4063],{"class":4062},[4056,8836,8837],{"class":4066}," \u002Fapi\u002Fv1\u002Fbookings ",[4056,8839,4071],{"class":4070},[4056,8841,4074],{"class":4066},[4056,8843,4078],{"class":4077},[4056,8845,8846,8848,8850],{"class":4058,"line":4081},[4056,8847,4026],{"class":4084},[4056,8849,4088],{"class":4070},[4056,8851,4246],{"class":4091},[4056,8853,8854],{"class":4058,"line":4095},[4056,8855,4131],{"emptyLinePlaceholder":4130},[4056,8857,8858,8860,8863,8865,8867,8869,8872,8874,8877,8879,8882,8884,8887],{"class":4058,"line":4105},[4056,8859,4264],{"class":4066},[4056,8861,8862],{"class":4267},"\"roomId\"",[4056,8864,4088],{"class":4066},[4056,8866,4876],{"class":4077},[4056,8868,4276],{"class":4066},[4056,8870,8871],{"class":4267},"\"checkIn\"",[4056,8873,4088],{"class":4066},[4056,8875,8876],{"class":4091},"\"2026-08-30\"",[4056,8878,4276],{"class":4066},[4056,8880,8881],{"class":4267},"\"checkOut\"",[4056,8883,4088],{"class":4066},[4056,8885,8886],{"class":4091},"\"2026-08-25\"",[4056,8888,4297],{"class":4066},[3813,8890,8891],{},[3770,8892,8893],{},"Відповідь (checkOut раніше checkIn):",[4047,8895,8897],{"className":4049,"code":8896,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 422 Unprocessable Entity\nContent-Type: application\u002Fjson\n\n{\"error\":\"Unprocessable Entity\",\"message\":\"Check-out date cannot be before check-in date\",\"details\":[{\"field\":\"checkOut\",\"message\":\"Must be after checkIn (2026-08-30)\"}]}\n",[3965,8898,8899,8913,8921,8925],{"__ignoreMap":4052},[4056,8900,8901,8903,8905,8907,8910],{"class":4058,"line":4059},[4056,8902,4071],{"class":4070},[4056,8904,4074],{"class":4066},[4056,8906,4184],{"class":4077},[4056,8908,8909],{"class":4077}," 422",[4056,8911,8912],{"class":4091}," Unprocessable Entity\n",[4056,8914,8915,8917,8919],{"class":4058,"line":4081},[4056,8916,4026],{"class":4084},[4056,8918,4088],{"class":4070},[4056,8920,4246],{"class":4091},[4056,8922,8923],{"class":4058,"line":4095},[4056,8924,4131],{"emptyLinePlaceholder":4130},[4056,8926,8927,8929,8931,8933,8936,8938,8940,8942,8945,8947,8949,8951,8953,8955,8957,8959,8961,8963,8966],{"class":4058,"line":4105},[4056,8928,4264],{"class":4066},[4056,8930,7026],{"class":4267},[4056,8932,4088],{"class":4066},[4056,8934,8935],{"class":4091},"\"Unprocessable Entity\"",[4056,8937,4276],{"class":4066},[4056,8939,7036],{"class":4267},[4056,8941,4088],{"class":4066},[4056,8943,8944],{"class":4091},"\"Check-out date cannot be before check-in date\"",[4056,8946,4276],{"class":4066},[4056,8948,7152],{"class":4267},[4056,8950,7155],{"class":4066},[4056,8952,7158],{"class":4267},[4056,8954,4088],{"class":4066},[4056,8956,8881],{"class":4091},[4056,8958,4276],{"class":4066},[4056,8960,7036],{"class":4267},[4056,8962,4088],{"class":4066},[4056,8964,8965],{"class":4091},"\"Must be after checkIn (2026-08-30)\"",[4056,8967,7192],{"class":4066},[3825,8969,8971],{"id":8970},"_429-too-many-requests-забагато-запитів","429 Too Many Requests — Забагато запитів",[3813,8973,8974,8976,8977,8980,8981,7332],{},[3770,8975,4009],{}," Клієнт надіслав ",[3770,8978,8979],{},"занадто багато запитів"," за короткий період часу (",[3770,8982,8983],{},"rate limiting",[3813,8985,8986,8988],{},[3770,8987,4019],{}," Захист API від зловживань, DoS-атак, надмірного навантаження.",[3813,8990,8991],{},[3770,8992,4500],{},[3813,8994,8995],{},[3770,8996,8997],{},"Запит (51-й запит за хвилину):",[4047,8999,9001],{"className":4049,"code":9000,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fsearch?q=laptop HTTP\u002F1.1\n",[3965,9002,9003],{"__ignoreMap":4052},[4056,9004,9005,9007,9010,9012,9014],{"class":4058,"line":4059},[4056,9006,4345],{"class":4062},[4056,9008,9009],{"class":4066}," \u002Fapi\u002Fv1\u002Fsearch?q=laptop ",[4056,9011,4071],{"class":4070},[4056,9013,4074],{"class":4066},[4056,9015,4078],{"class":4077},[3813,9017,9018],{},[3770,9019,9020],{},"Відповідь (ліміт 50 запитів\u002Fхвилину):",[4047,9022,9024],{"className":4049,"code":9023,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 429 Too Many Requests\nContent-Type: application\u002Fjson\nRetry-After: 42\nX-RateLimit-Limit: 50\nX-RateLimit-Remaining: 0\nX-RateLimit-Reset: 1693315200\n\n{\"error\":\"Too Many Requests\",\"message\":\"Rate limit exceeded. Maximum 50 requests per minute. Try again in 42 seconds.\"}\n",[3965,9025,9026,9040,9048,9057,9067,9076,9086,9090],{"__ignoreMap":4052},[4056,9027,9028,9030,9032,9034,9037],{"class":4058,"line":4059},[4056,9029,4071],{"class":4070},[4056,9031,4074],{"class":4066},[4056,9033,4184],{"class":4077},[4056,9035,9036],{"class":4077}," 429",[4056,9038,9039],{"class":4091}," Too Many Requests\n",[4056,9041,9042,9044,9046],{"class":4058,"line":4081},[4056,9043,4026],{"class":4084},[4056,9045,4088],{"class":4070},[4056,9047,4246],{"class":4091},[4056,9049,9050,9052,9054],{"class":4058,"line":4095},[4056,9051,8587],{"class":4084},[4056,9053,4088],{"class":4070},[4056,9055,9056],{"class":4091}," 42\n",[4056,9058,9059,9062,9064],{"class":4058,"line":4105},[4056,9060,9061],{"class":4084},"X-RateLimit-Limit",[4056,9063,4088],{"class":4070},[4056,9065,9066],{"class":4091}," 50\n",[4056,9068,9069,9072,9074],{"class":4058,"line":4116},[4056,9070,9071],{"class":4084},"X-RateLimit-Remaining",[4056,9073,4088],{"class":4070},[4056,9075,6116],{"class":4091},[4056,9077,9078,9081,9083],{"class":4058,"line":4127},[4056,9079,9080],{"class":4084},"X-RateLimit-Reset",[4056,9082,4088],{"class":4070},[4056,9084,9085],{"class":4091}," 1693315200\n",[4056,9087,9088],{"class":4058,"line":4134},[4056,9089,4131],{"emptyLinePlaceholder":4130},[4056,9091,9092,9094,9096,9098,9101,9103,9105,9107,9110],{"class":4058,"line":4681},[4056,9093,4264],{"class":4066},[4056,9095,7026],{"class":4267},[4056,9097,4088],{"class":4066},[4056,9099,9100],{"class":4091},"\"Too Many Requests\"",[4056,9102,4276],{"class":4066},[4056,9104,7036],{"class":4267},[4056,9106,4088],{"class":4066},[4056,9108,9109],{"class":4091},"\"Rate limit exceeded. Maximum 50 requests per minute. Try again in 42 seconds.\"",[4056,9111,4297],{"class":4066},[3813,9113,9114],{},[3770,9115,9116],{},"Заголовки rate limiting:",[3746,9118,9119,9125,9131,9137],{},[3749,9120,9121,9124],{},[3965,9122,9123],{},"X-RateLimit-Limit: 50"," — максимальна кількість запитів у вікні.",[3749,9126,9127,9130],{},[3965,9128,9129],{},"X-RateLimit-Remaining: 0"," — скільки запитів залишилося.",[3749,9132,9133,9136],{},[3965,9134,9135],{},"X-RateLimit-Reset: 1693315200"," — Unix timestamp скидання ліміту.",[3749,9138,9139,9142],{},[3965,9140,9141],{},"Retry-After: 42"," — через скільки секунд можна повторити.",[3825,9144,9146],{"id":9145},"_451-unavailable-for-legal-reasons-недоступно-з-юридичних-причин","451 Unavailable For Legal Reasons — Недоступно з юридичних причин",[3813,9148,9149,9151,9152,9155],{},[3770,9150,4009],{}," Доступ до ресурсу ",[3770,9153,9154],{},"заблоковано через юридичні вимоги"," (цензура, авторське право, судовий припис).",[3813,9157,9158],{},[3770,9159,4500],{},[3813,9161,9162],{},[3770,9163,6732],{},[4047,9165,9167],{"className":4049,"code":9166,"language":4051,"meta":4052,"style":4052},"GET \u002Fnews\u002Farticle\u002Fcensored-content HTTP\u002F1.1\nHost: news.example.com\n",[3965,9168,9169,9182],{"__ignoreMap":4052},[4056,9170,9171,9173,9176,9178,9180],{"class":4058,"line":4059},[4056,9172,4345],{"class":4062},[4056,9174,9175],{"class":4066}," \u002Fnews\u002Farticle\u002Fcensored-content ",[4056,9177,4071],{"class":4070},[4056,9179,4074],{"class":4066},[4056,9181,4078],{"class":4077},[4056,9183,9184,9186,9188],{"class":4058,"line":4081},[4056,9185,4085],{"class":4084},[4056,9187,4088],{"class":4070},[4056,9189,9190],{"class":4091}," news.example.com\n",[3813,9192,9193],{},[3770,9194,4826],{},[4047,9196,9198],{"className":4049,"code":9197,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 451 Unavailable For Legal Reasons\nContent-Type: text\u002Fhtml; charset=utf-8\nLink: \u003Chttps:\u002F\u002Fexample.com\u002Flegal-block-notice>; rel=\"blocked-by\"\n\n\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\u003Ctitle>Content Blocked\u003C\u002Ftitle>\u003C\u002Fhead>\n\u003Cbody>\n\u003Ch1>451 Unavailable For Legal Reasons\u003C\u002Fh1>\n\u003Cp>This content is blocked in your region due to court order #2026-XYZ.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fexample.com\u002Flegal-block-notice\">More information\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[3965,9199,9200,9214,9222,9231,9235,9245,9253,9279,9288,9305,9322,9355,9363],{"__ignoreMap":4052},[4056,9201,9202,9204,9206,9208,9211],{"class":4058,"line":4059},[4056,9203,4071],{"class":4070},[4056,9205,4074],{"class":4066},[4056,9207,4184],{"class":4077},[4056,9209,9210],{"class":4077}," 451",[4056,9212,9213],{"class":4091}," Unavailable For Legal Reasons\n",[4056,9215,9216,9218,9220],{"class":4058,"line":4081},[4056,9217,4026],{"class":4084},[4056,9219,4088],{"class":4070},[4056,9221,4631],{"class":4091},[4056,9223,9224,9226,9228],{"class":4058,"line":4095},[4056,9225,4572],{"class":4084},[4056,9227,4088],{"class":4070},[4056,9229,9230],{"class":4091}," \u003Chttps:\u002F\u002Fexample.com\u002Flegal-block-notice>; rel=\"blocked-by\"\n",[4056,9232,9233],{"class":4058,"line":4105},[4056,9234,4131],{"emptyLinePlaceholder":4130},[4056,9236,9237,9239,9241,9243],{"class":4058,"line":4116},[4056,9238,4650],{"class":4649},[4056,9240,4653],{"class":4070},[4056,9242,4656],{"class":4070},[4056,9244,4659],{"class":4649},[4056,9246,9247,9249,9251],{"class":4058,"line":4127},[4056,9248,4664],{"class":4649},[4056,9250,4667],{"class":4084},[4056,9252,4659],{"class":4649},[4056,9254,9255,9257,9259,9261,9264,9266,9269,9271,9273,9275,9277],{"class":4058,"line":4134},[4056,9256,4664],{"class":4649},[4056,9258,4676],{"class":4084},[4056,9260,8696],{"class":4649},[4056,9262,9263],{"class":4084},"title",[4056,9265,8702],{"class":4649},[4056,9267,9268],{"class":4066},"Content Blocked",[4056,9270,4737],{"class":4649},[4056,9272,9263],{"class":4084},[4056,9274,4727],{"class":4649},[4056,9276,4676],{"class":4084},[4056,9278,4659],{"class":4649},[4056,9280,9281,9283,9286],{"class":4058,"line":4681},[4056,9282,4664],{"class":4649},[4056,9284,9285],{"class":4084},"body",[4056,9287,4659],{"class":4649},[4056,9289,9290,9292,9294,9296,9299,9301,9303],{"class":4058,"line":4711},[4056,9291,4664],{"class":4649},[4056,9293,3734],{"class":4084},[4056,9295,8702],{"class":4649},[4056,9297,9298],{"class":4066},"451 Unavailable For Legal Reasons",[4056,9300,4737],{"class":4649},[4056,9302,3734],{"class":4084},[4056,9304,4659],{"class":4649},[4056,9306,9307,9309,9311,9313,9316,9318,9320],{"class":4058,"line":4734},[4056,9308,4664],{"class":4649},[4056,9310,3813],{"class":4084},[4056,9312,8702],{"class":4649},[4056,9314,9315],{"class":4066},"This content is blocked in your region due to court order #2026-XYZ.",[4056,9317,4737],{"class":4649},[4056,9319,3813],{"class":4084},[4056,9321,4659],{"class":4649},[4056,9323,9324,9326,9328,9330,9333,9335,9337,9340,9342,9345,9347,9349,9351,9353],{"class":4058,"line":4744},[4056,9325,4664],{"class":4649},[4056,9327,3813],{"class":4084},[4056,9329,8696],{"class":4649},[4056,9331,9332],{"class":4084},"a",[4056,9334,4701],{"class":4690},[4056,9336,4694],{"class":4066},[4056,9338,9339],{"class":4697},"\"https:\u002F\u002Fexample.com\u002Flegal-block-notice\"",[4056,9341,8702],{"class":4649},[4056,9343,9344],{"class":4066},"More information",[4056,9346,4737],{"class":4649},[4056,9348,9332],{"class":4084},[4056,9350,4727],{"class":4649},[4056,9352,3813],{"class":4084},[4056,9354,4659],{"class":4649},[4056,9356,9357,9359,9361],{"class":4058,"line":4750},[4056,9358,4737],{"class":4649},[4056,9360,9285],{"class":4084},[4056,9362,4659],{"class":4649},[4056,9364,9366,9368,9370],{"class":4058,"line":9365},13,[4056,9367,4737],{"class":4649},[4056,9369,4667],{"class":4084},[4056,9371,4659],{"class":4649},[3953,9373,9374,9377,9379,9380,9383],{},[3770,9375,9376],{},"Історична довідка:",[4021,9378],{},"\nКод 451 — це відсилка до роману ",[3770,9381,9382],{},"\"Fahrenheit 451\""," Рея Бредбері, де книги спалюються режимом. Температура 451°F (233°C) — це температура займання паперу.",[3805,9385],{},[3808,9387,9389],{"id":9388},"група-5xx-помилки-сервера","Група 5xx: Помилки сервера",[3813,9391,4768,9392,9394,9395,9398,9399,9402],{},[3770,9393,3939],{}," вказують, що сервер ",[3770,9396,9397],{},"не зміг виконати валідний запит"," через внутрішню помилку або тимчасову недоступність. Клієнт ",[3770,9400,9401],{},"може повторити запит пізніше",", оскільки помилка на стороні сервера, а не клієнта.",[3825,9404,9406],{"id":9405},"_500-internal-server-error-внутрішня-помилка-сервера","500 Internal Server Error — Внутрішня помилка сервера",[3813,9408,9409,9411,9412,9415],{},[3770,9410,4009],{}," Універсальна помилка сервера. Сервер зіткнувся з ",[3770,9413,9414],{},"несподіваною умовою",", яка перешкодила обробці запиту.",[3813,9417,9418,9420],{},[3770,9419,4019],{}," Необроблений виняток, помилка у коді, збій бази даних, відсутнє з'єднання.",[3813,9422,9423],{},[3770,9424,4500],{},[3813,9426,9427],{},[3770,9428,6732],{},[4047,9430,9432],{"className":4049,"code":9431,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fproducts HTTP\u002F1.1\n",[3965,9433,9434],{"__ignoreMap":4052},[4056,9435,9436,9438,9441,9443,9445],{"class":4058,"line":4059},[4056,9437,4345],{"class":4062},[4056,9439,9440],{"class":4066}," \u002Fapi\u002Fv1\u002Fproducts ",[4056,9442,4071],{"class":4070},[4056,9444,4074],{"class":4066},[4056,9446,4078],{"class":4077},[3813,9448,9449],{},[3770,9450,9451],{},"Відповідь (помилка у базі даних):",[4047,9453,9455],{"className":4049,"code":9454,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 500 Internal Server Error\nContent-Type: application\u002Fjson; charset=utf-8\n\n{\"error\":\"Internal Server Error\",\"message\":\"An unexpected error occurred. Please try again later.\",\"requestId\":\"req-abc-123\"}\n",[3965,9456,9457,9471,9479,9483],{"__ignoreMap":4052},[4056,9458,9459,9461,9463,9465,9468],{"class":4058,"line":4059},[4056,9460,4071],{"class":4070},[4056,9462,4074],{"class":4066},[4056,9464,4184],{"class":4077},[4056,9466,9467],{"class":4077}," 500",[4056,9469,9470],{"class":4091}," Internal Server Error\n",[4056,9472,9473,9475,9477],{"class":4058,"line":4081},[4056,9474,4026],{"class":4084},[4056,9476,4088],{"class":4070},[4056,9478,4852],{"class":4091},[4056,9480,9481],{"class":4058,"line":4095},[4056,9482,4131],{"emptyLinePlaceholder":4130},[4056,9484,9485,9487,9489,9491,9494,9496,9498,9500,9503,9505,9508,9510,9513],{"class":4058,"line":4105},[4056,9486,4264],{"class":4066},[4056,9488,7026],{"class":4267},[4056,9490,4088],{"class":4066},[4056,9492,9493],{"class":4091},"\"Internal Server Error\"",[4056,9495,4276],{"class":4066},[4056,9497,7036],{"class":4267},[4056,9499,4088],{"class":4066},[4056,9501,9502],{"class":4091},"\"An unexpected error occurred. Please try again later.\"",[4056,9504,4276],{"class":4066},[4056,9506,9507],{"class":4267},"\"requestId\"",[4056,9509,4088],{"class":4066},[4056,9511,9512],{"class":4091},"\"req-abc-123\"",[4056,9514,4297],{"class":4066},[3994,9516,9517,9520,9522,9523,9526,9527,9530],{},[3770,9518,9519],{},"Безпека:",[4021,9521],{},"\nУ продакшн-середовищі ",[3770,9524,9525],{},"НЕ розкривайте"," деталі помилки (стектрейс, SQL-запити, шляхи до файлів) у відповіді 500. Це може надати зловмисникам інформацію про архітектуру системи. Логуйте деталі на сервері, а клієнту повертайте загальне повідомлення з ",[3965,9528,9529],{},"requestId"," для відстеження.",[3825,9532,9534],{"id":9533},"_501-not-implemented-не-реалізовано","501 Not Implemented — Не реалізовано",[3813,9536,9537,6907,9539,9542],{},[3770,9538,4009],{},[3770,9540,9541],{},"не підтримує функціональність",", необхідну для обробки запиту. Зазвичай означає, що сервер не розпізнає метод запиту.",[3813,9544,9545],{},[3770,9546,4500],{},[3813,9548,9549],{},[3770,9550,9551],{},"Запит (QUERY — новий метод):",[4047,9553,9555],{"className":4049,"code":9554,"language":4051,"meta":4052,"style":4052},"QUERY \u002Fapi\u002Fv1\u002Fsearch HTTP\u002F1.1\nContent-Type: application\u002Fquery+json\n\n{\"query\":\"SELECT * FROM products WHERE price \u003C 1000\"}\n",[3965,9556,9557,9562,9571,9575],{"__ignoreMap":4052},[4056,9558,9559],{"class":4058,"line":4059},[4056,9560,9561],{"class":4066},"QUERY \u002Fapi\u002Fv1\u002Fsearch HTTP\u002F1.1\n",[4056,9563,9564,9566,9568],{"class":4058,"line":4081},[4056,9565,4026],{"class":4084},[4056,9567,4088],{"class":4070},[4056,9569,9570],{"class":4091}," application\u002Fquery+json\n",[4056,9572,9573],{"class":4058,"line":4095},[4056,9574,4131],{"emptyLinePlaceholder":4130},[4056,9576,9577,9579,9582,9584,9587],{"class":4058,"line":4105},[4056,9578,4264],{"class":4066},[4056,9580,9581],{"class":4267},"\"query\"",[4056,9583,4088],{"class":4066},[4056,9585,9586],{"class":4091},"\"SELECT * FROM products WHERE price \u003C 1000\"",[4056,9588,4297],{"class":4066},[3813,9590,9591],{},[3770,9592,9593],{},"Відповідь (сервер не підтримує QUERY):",[4047,9595,9597],{"className":4049,"code":9596,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 501 Not Implemented\nContent-Type: application\u002Fjson\n\n{\"error\":\"Not Implemented\",\"message\":\"HTTP method QUERY is not supported by this server\"}\n",[3965,9598,9599,9613,9621,9625],{"__ignoreMap":4052},[4056,9600,9601,9603,9605,9607,9610],{"class":4058,"line":4059},[4056,9602,4071],{"class":4070},[4056,9604,4074],{"class":4066},[4056,9606,4184],{"class":4077},[4056,9608,9609],{"class":4077}," 501",[4056,9611,9612],{"class":4091}," Not Implemented\n",[4056,9614,9615,9617,9619],{"class":4058,"line":4081},[4056,9616,4026],{"class":4084},[4056,9618,4088],{"class":4070},[4056,9620,4246],{"class":4091},[4056,9622,9623],{"class":4058,"line":4095},[4056,9624,4131],{"emptyLinePlaceholder":4130},[4056,9626,9627,9629,9631,9633,9636,9638,9640,9642,9645],{"class":4058,"line":4105},[4056,9628,4264],{"class":4066},[4056,9630,7026],{"class":4267},[4056,9632,4088],{"class":4066},[4056,9634,9635],{"class":4091},"\"Not Implemented\"",[4056,9637,4276],{"class":4066},[4056,9639,7036],{"class":4267},[4056,9641,4088],{"class":4066},[4056,9643,9644],{"class":4091},"\"HTTP method QUERY is not supported by this server\"",[4056,9646,4297],{"class":4066},[3825,9648,9650],{"id":9649},"_502-bad-gateway-помилка-шлюзу","502 Bad Gateway — Помилка шлюзу",[3813,9652,9653,9655,9656,9659,9660,9663],{},[3770,9654,4009],{}," Сервер, діючи як ",[3770,9657,9658],{},"шлюз або проксі",", отримав ",[3770,9661,9662],{},"невалідну відповідь"," від upstream-сервера.",[3813,9665,9666,9668],{},[3770,9667,4019],{}," Проксі не може з'єднатися з backend, backend повернув некоректну відповідь, помилка у reverse proxy (nginx, HAProxy).",[3813,9670,9671],{},[3770,9672,9673],{},"Приклад (nginx як reverse proxy):",[3813,9675,9676],{},[3770,9677,6732],{},[4047,9679,9681],{"className":4049,"code":9680,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fusers HTTP\u002F1.1\nHost: api.example.com\n",[3965,9682,9683,9695],{"__ignoreMap":4052},[4056,9684,9685,9687,9689,9691,9693],{"class":4058,"line":4059},[4056,9686,4345],{"class":4062},[4056,9688,5083],{"class":4066},[4056,9690,4071],{"class":4070},[4056,9692,4074],{"class":4066},[4056,9694,4078],{"class":4077},[4056,9696,9697,9699,9701],{"class":4058,"line":4081},[4056,9698,4085],{"class":4084},[4056,9700,4088],{"class":4070},[4056,9702,4821],{"class":4091},[3813,9704,9705],{},[3770,9706,9707],{},"Відповідь (backend-сервер недоступний):",[4047,9709,9711],{"className":4049,"code":9710,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 502 Bad Gateway\nContent-Type: text\u002Fhtml\nServer: nginx\u002F1.25.0\n\n\u003Chtml>\n\u003Chead>\u003Ctitle>502 Bad Gateway\u003C\u002Ftitle>\u003C\u002Fhead>\n\u003Cbody>\n\u003Ch1>502 Bad Gateway\u003C\u002Fh1>\n\u003Cp>nginx could not connect to upstream server\u003C\u002Fp>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[3965,9712,9713,9727,9736,9746,9750,9758,9783,9791,9807,9824,9832],{"__ignoreMap":4052},[4056,9714,9715,9717,9719,9721,9724],{"class":4058,"line":4059},[4056,9716,4071],{"class":4070},[4056,9718,4074],{"class":4066},[4056,9720,4184],{"class":4077},[4056,9722,9723],{"class":4077}," 502",[4056,9725,9726],{"class":4091}," Bad Gateway\n",[4056,9728,9729,9731,9733],{"class":4058,"line":4081},[4056,9730,4026],{"class":4084},[4056,9732,4088],{"class":4070},[4056,9734,9735],{"class":4091}," text\u002Fhtml\n",[4056,9737,9738,9741,9743],{"class":4058,"line":4095},[4056,9739,9740],{"class":4084},"Server",[4056,9742,4088],{"class":4070},[4056,9744,9745],{"class":4091}," nginx\u002F1.25.0\n",[4056,9747,9748],{"class":4058,"line":4105},[4056,9749,4131],{"emptyLinePlaceholder":4130},[4056,9751,9752,9754,9756],{"class":4058,"line":4116},[4056,9753,4664],{"class":4649},[4056,9755,4667],{"class":4084},[4056,9757,4659],{"class":4649},[4056,9759,9760,9762,9764,9766,9768,9770,9773,9775,9777,9779,9781],{"class":4058,"line":4127},[4056,9761,4664],{"class":4649},[4056,9763,4676],{"class":4084},[4056,9765,8696],{"class":4649},[4056,9767,9263],{"class":4084},[4056,9769,8702],{"class":4649},[4056,9771,9772],{"class":4066},"502 Bad Gateway",[4056,9774,4737],{"class":4649},[4056,9776,9263],{"class":4084},[4056,9778,4727],{"class":4649},[4056,9780,4676],{"class":4084},[4056,9782,4659],{"class":4649},[4056,9784,9785,9787,9789],{"class":4058,"line":4134},[4056,9786,4664],{"class":4649},[4056,9788,9285],{"class":4084},[4056,9790,4659],{"class":4649},[4056,9792,9793,9795,9797,9799,9801,9803,9805],{"class":4058,"line":4681},[4056,9794,4664],{"class":4649},[4056,9796,3734],{"class":4084},[4056,9798,8702],{"class":4649},[4056,9800,9772],{"class":4066},[4056,9802,4737],{"class":4649},[4056,9804,3734],{"class":4084},[4056,9806,4659],{"class":4649},[4056,9808,9809,9811,9813,9815,9818,9820,9822],{"class":4058,"line":4711},[4056,9810,4664],{"class":4649},[4056,9812,3813],{"class":4084},[4056,9814,8702],{"class":4649},[4056,9816,9817],{"class":4066},"nginx could not connect to upstream server",[4056,9819,4737],{"class":4649},[4056,9821,3813],{"class":4084},[4056,9823,4659],{"class":4649},[4056,9825,9826,9828,9830],{"class":4058,"line":4734},[4056,9827,4737],{"class":4649},[4056,9829,9285],{"class":4084},[4056,9831,4659],{"class":4649},[4056,9833,9834,9836,9838],{"class":4058,"line":4744},[4056,9835,4737],{"class":4649},[4056,9837,4667],{"class":4084},[4056,9839,4659],{"class":4649},[3825,9841,9843],{"id":9842},"_503-service-unavailable-сервіс-недоступний","503 Service Unavailable — Сервіс недоступний",[3813,9845,9846,6907,9848,9851,9852,4310],{},[3770,9847,4009],{},[3770,9849,9850],{},"тимчасово не може обробляти запити"," через перевантаження або технічне обслуговування. Це ",[3770,9853,9854],{},"тимчасовий стан",[3813,9856,9857,9859],{},[3770,9858,4019],{}," Технічне обслуговування, перевантаження, deployment, перезапуск сервісу.",[3813,9861,9862],{},[3770,9863,4500],{},[3813,9865,9866],{},[3770,9867,6732],{},[4047,9869,9871],{"className":4049,"code":9870,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Forders HTTP\u002F1.1\n",[3965,9872,9873],{"__ignoreMap":4052},[4056,9874,9875,9877,9879,9881,9883],{"class":4058,"line":4059},[4056,9876,4345],{"class":4062},[4056,9878,6744],{"class":4066},[4056,9880,4071],{"class":4070},[4056,9882,4074],{"class":4066},[4056,9884,4078],{"class":4077},[3813,9886,9887],{},[3770,9888,4826],{},[4047,9890,9892],{"className":4049,"code":9891,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 503 Service Unavailable\nContent-Type: application\u002Fjson\nRetry-After: 1800\n\n{\"error\":\"Service Unavailable\",\"message\":\"System is undergoing scheduled maintenance. Service will be available in 30 minutes.\",\"estimatedResume\":\"2026-08-29T15:00:00Z\"}\n",[3965,9893,9894,9908,9916,9925,9929],{"__ignoreMap":4052},[4056,9895,9896,9898,9900,9902,9905],{"class":4058,"line":4059},[4056,9897,4071],{"class":4070},[4056,9899,4074],{"class":4066},[4056,9901,4184],{"class":4077},[4056,9903,9904],{"class":4077}," 503",[4056,9906,9907],{"class":4091}," Service Unavailable\n",[4056,9909,9910,9912,9914],{"class":4058,"line":4081},[4056,9911,4026],{"class":4084},[4056,9913,4088],{"class":4070},[4056,9915,4246],{"class":4091},[4056,9917,9918,9920,9922],{"class":4058,"line":4095},[4056,9919,8587],{"class":4084},[4056,9921,4088],{"class":4070},[4056,9923,9924],{"class":4091}," 1800\n",[4056,9926,9927],{"class":4058,"line":4105},[4056,9928,4131],{"emptyLinePlaceholder":4130},[4056,9930,9931,9933,9935,9937,9940,9942,9944,9946,9949,9951,9954,9956,9959],{"class":4058,"line":4116},[4056,9932,4264],{"class":4066},[4056,9934,7026],{"class":4267},[4056,9936,4088],{"class":4066},[4056,9938,9939],{"class":4091},"\"Service Unavailable\"",[4056,9941,4276],{"class":4066},[4056,9943,7036],{"class":4267},[4056,9945,4088],{"class":4066},[4056,9947,9948],{"class":4091},"\"System is undergoing scheduled maintenance. Service will be available in 30 minutes.\"",[4056,9950,4276],{"class":4066},[4056,9952,9953],{"class":4267},"\"estimatedResume\"",[4056,9955,4088],{"class":4066},[4056,9957,9958],{"class":4091},"\"2026-08-29T15:00:00Z\"",[4056,9960,4297],{"class":4066},[3813,9962,7325,9963,9966],{},[3965,9964,9965],{},"Retry-After: 1800"," вказує клієнту повторити запит через 1800 секунд (30 хвилин).",[3825,9968,9970],{"id":9969},"_504-gateway-timeout-таймаут-шлюзу","504 Gateway Timeout — Таймаут шлюзу",[3813,9972,9973,9655,9975,6502,9977,9663],{},[3770,9974,4009],{},[3770,9976,9658],{},[3770,9978,9979],{},"не отримав своєчасну відповідь",[3813,9981,9982],{},[3770,9983,9984],{},"Відмінність від 502:",[3746,9986,9987,9993],{},[3749,9988,9989,9992],{},[3770,9990,9991],{},"502:"," Отримано невалідну відповідь від upstream.",[3749,9994,9995,9998],{},[3770,9996,9997],{},"504:"," Взагалі не отримано відповіді у відведений час.",[3813,10000,10001],{},[3770,10002,4500],{},[3813,10004,10005],{},[3770,10006,10007],{},"Запит (довга операція):",[4047,10009,10011],{"className":4049,"code":10010,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Freports\u002Fheavy-calculation HTTP\u002F1.1\n",[3965,10012,10013],{"__ignoreMap":4052},[4056,10014,10015,10017,10020,10022,10024],{"class":4058,"line":4059},[4056,10016,4063],{"class":4062},[4056,10018,10019],{"class":4066}," \u002Fapi\u002Fv1\u002Freports\u002Fheavy-calculation ",[4056,10021,4071],{"class":4070},[4056,10023,4074],{"class":4066},[4056,10025,4078],{"class":4077},[3813,10027,10028],{},[3770,10029,10030],{},"Відповідь (backend не відповів за 60 секунд):",[4047,10032,10034],{"className":4049,"code":10033,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 504 Gateway Timeout\nContent-Type: application\u002Fjson\nServer: nginx\u002F1.25.0\n\n{\"error\":\"Gateway Timeout\",\"message\":\"Upstream server did not respond within 60 seconds. Please try again or use asynchronous processing.\"}\n",[3965,10035,10036,10050,10058,10066,10070],{"__ignoreMap":4052},[4056,10037,10038,10040,10042,10044,10047],{"class":4058,"line":4059},[4056,10039,4071],{"class":4070},[4056,10041,4074],{"class":4066},[4056,10043,4184],{"class":4077},[4056,10045,10046],{"class":4077}," 504",[4056,10048,10049],{"class":4091}," Gateway Timeout\n",[4056,10051,10052,10054,10056],{"class":4058,"line":4081},[4056,10053,4026],{"class":4084},[4056,10055,4088],{"class":4070},[4056,10057,4246],{"class":4091},[4056,10059,10060,10062,10064],{"class":4058,"line":4095},[4056,10061,9740],{"class":4084},[4056,10063,4088],{"class":4070},[4056,10065,9745],{"class":4091},[4056,10067,10068],{"class":4058,"line":4105},[4056,10069,4131],{"emptyLinePlaceholder":4130},[4056,10071,10072,10074,10076,10078,10081,10083,10085,10087,10090],{"class":4058,"line":4116},[4056,10073,4264],{"class":4066},[4056,10075,7026],{"class":4267},[4056,10077,4088],{"class":4066},[4056,10079,10080],{"class":4091},"\"Gateway Timeout\"",[4056,10082,4276],{"class":4066},[4056,10084,7036],{"class":4267},[4056,10086,4088],{"class":4066},[4056,10088,10089],{"class":4091},"\"Upstream server did not respond within 60 seconds. Please try again or use asynchronous processing.\"",[4056,10091,4297],{"class":4066},[3825,10093,10095],{"id":10094},"_511-network-authentication-required-необхідна-автентифікація-мережі","511 Network Authentication Required — Необхідна автентифікація мережі",[3813,10097,10098,10100,10101,10104,10105,10108],{},[3770,10099,4009],{}," Клієнт повинен ",[3770,10102,10103],{},"автентифікуватися у мережі"," перед доступом до ресурсу. Використовується ",[3770,10106,10107],{},"captive portal"," (публічний Wi-Fi у кафе, готелі, аеропорту).",[3813,10110,10111],{},[3770,10112,10113],{},"Приклад (Wi-Fi у готелі):",[3813,10115,10116],{},[3770,10117,6732],{},[4047,10119,10121],{"className":4049,"code":10120,"language":4051,"meta":4052,"style":4052},"GET \u002Fapi\u002Fv1\u002Fnews HTTP\u002F1.1\nHost: example.com\n",[3965,10122,10123,10136],{"__ignoreMap":4052},[4056,10124,10125,10127,10130,10132,10134],{"class":4058,"line":4059},[4056,10126,4345],{"class":4062},[4056,10128,10129],{"class":4066}," \u002Fapi\u002Fv1\u002Fnews ",[4056,10131,4071],{"class":4070},[4056,10133,4074],{"class":4066},[4056,10135,4078],{"class":4077},[4056,10137,10138,10140,10142],{"class":4058,"line":4081},[4056,10139,4085],{"class":4084},[4056,10141,4088],{"class":4070},[4056,10143,10144],{"class":4091}," example.com\n",[3813,10146,10147],{},[3770,10148,10149],{},"Відповідь (перехоплено captive portal):",[4047,10151,10153],{"className":4049,"code":10152,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 511 Network Authentication Required\nContent-Type: text\u002Fhtml\n\n\u003Chtml>\n\u003Chead>\u003Ctitle>Hotel Wi-Fi Login\u003C\u002Ftitle>\u003C\u002Fhead>\n\u003Cbody>\n\u003Ch1>Welcome to Hotel Wi-Fi\u003C\u002Fh1>\n\u003Cp>Please log in to access the internet\u003C\u002Fp>\n\u003Cform action=\"\u002Fwifi-login\" method=\"POST\">\n\u003Cinput name=\"room\" placeholder=\"Room number\">\n\u003Cinput name=\"surname\" placeholder=\"Surname\">\n\u003Cbutton type=\"submit\">Connect\u003C\u002Fbutton>\n\u003C\u002Fform>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[3965,10154,10155,10169,10177,10181,10189,10214,10222,10239,10256,10281,10306,10328,10354,10362,10371],{"__ignoreMap":4052},[4056,10156,10157,10159,10161,10163,10166],{"class":4058,"line":4059},[4056,10158,4071],{"class":4070},[4056,10160,4074],{"class":4066},[4056,10162,4184],{"class":4077},[4056,10164,10165],{"class":4077}," 511",[4056,10167,10168],{"class":4091}," Network Authentication Required\n",[4056,10170,10171,10173,10175],{"class":4058,"line":4081},[4056,10172,4026],{"class":4084},[4056,10174,4088],{"class":4070},[4056,10176,9735],{"class":4091},[4056,10178,10179],{"class":4058,"line":4095},[4056,10180,4131],{"emptyLinePlaceholder":4130},[4056,10182,10183,10185,10187],{"class":4058,"line":4105},[4056,10184,4664],{"class":4649},[4056,10186,4667],{"class":4084},[4056,10188,4659],{"class":4649},[4056,10190,10191,10193,10195,10197,10199,10201,10204,10206,10208,10210,10212],{"class":4058,"line":4116},[4056,10192,4664],{"class":4649},[4056,10194,4676],{"class":4084},[4056,10196,8696],{"class":4649},[4056,10198,9263],{"class":4084},[4056,10200,8702],{"class":4649},[4056,10202,10203],{"class":4066},"Hotel Wi-Fi Login",[4056,10205,4737],{"class":4649},[4056,10207,9263],{"class":4084},[4056,10209,4727],{"class":4649},[4056,10211,4676],{"class":4084},[4056,10213,4659],{"class":4649},[4056,10215,10216,10218,10220],{"class":4058,"line":4127},[4056,10217,4664],{"class":4649},[4056,10219,9285],{"class":4084},[4056,10221,4659],{"class":4649},[4056,10223,10224,10226,10228,10230,10233,10235,10237],{"class":4058,"line":4134},[4056,10225,4664],{"class":4649},[4056,10227,3734],{"class":4084},[4056,10229,8702],{"class":4649},[4056,10231,10232],{"class":4066},"Welcome to Hotel Wi-Fi",[4056,10234,4737],{"class":4649},[4056,10236,3734],{"class":4084},[4056,10238,4659],{"class":4649},[4056,10240,10241,10243,10245,10247,10250,10252,10254],{"class":4058,"line":4681},[4056,10242,4664],{"class":4649},[4056,10244,3813],{"class":4084},[4056,10246,8702],{"class":4649},[4056,10248,10249],{"class":4066},"Please log in to access the internet",[4056,10251,4737],{"class":4649},[4056,10253,3813],{"class":4084},[4056,10255,4659],{"class":4649},[4056,10257,10258,10260,10263,10266,10268,10271,10274,10276,10279],{"class":4058,"line":4711},[4056,10259,4664],{"class":4649},[4056,10261,10262],{"class":4084},"form",[4056,10264,10265],{"class":4690}," action",[4056,10267,4694],{"class":4066},[4056,10269,10270],{"class":4697},"\"\u002Fwifi-login\"",[4056,10272,10273],{"class":4690}," method",[4056,10275,4694],{"class":4066},[4056,10277,10278],{"class":4697},"\"POST\"",[4056,10280,4659],{"class":4649},[4056,10282,10283,10285,10288,10291,10293,10296,10299,10301,10304],{"class":4058,"line":4734},[4056,10284,4664],{"class":4649},[4056,10286,10287],{"class":4084},"input",[4056,10289,10290],{"class":4690}," name",[4056,10292,4694],{"class":4066},[4056,10294,10295],{"class":4697},"\"room\"",[4056,10297,10298],{"class":4690}," placeholder",[4056,10300,4694],{"class":4066},[4056,10302,10303],{"class":4697},"\"Room number\"",[4056,10305,4659],{"class":4649},[4056,10307,10308,10310,10312,10314,10316,10319,10321,10323,10326],{"class":4058,"line":4744},[4056,10309,4664],{"class":4649},[4056,10311,10287],{"class":4084},[4056,10313,10290],{"class":4690},[4056,10315,4694],{"class":4066},[4056,10317,10318],{"class":4697},"\"surname\"",[4056,10320,10298],{"class":4690},[4056,10322,4694],{"class":4066},[4056,10324,10325],{"class":4697},"\"Surname\"",[4056,10327,4659],{"class":4649},[4056,10329,10330,10332,10335,10338,10340,10343,10345,10348,10350,10352],{"class":4058,"line":4750},[4056,10331,4664],{"class":4649},[4056,10333,10334],{"class":4084},"button",[4056,10336,10337],{"class":4690}," type",[4056,10339,4694],{"class":4066},[4056,10341,10342],{"class":4697},"\"submit\"",[4056,10344,8702],{"class":4649},[4056,10346,10347],{"class":4066},"Connect",[4056,10349,4737],{"class":4649},[4056,10351,10334],{"class":4084},[4056,10353,4659],{"class":4649},[4056,10355,10356,10358,10360],{"class":4058,"line":9365},[4056,10357,4737],{"class":4649},[4056,10359,10262],{"class":4084},[4056,10361,4659],{"class":4649},[4056,10363,10365,10367,10369],{"class":4058,"line":10364},14,[4056,10366,4737],{"class":4649},[4056,10368,9285],{"class":4084},[4056,10370,4659],{"class":4649},[4056,10372,10374,10376,10378],{"class":4058,"line":10373},15,[4056,10375,4737],{"class":4649},[4056,10377,4667],{"class":4084},[4056,10379,4659],{"class":4649},[3805,10381],{},[3808,10383,10385],{"id":10384},"візуалізація-потоків-обробки-кодів-статусу","Візуалізація потоків обробки кодів статусу",[4047,10387,10391],{"className":10388,"code":10389,"language":10390,"meta":4052,"style":4052},"language-plantuml shiki shiki-themes light-plus dark-plus dark-plus","@startuml HTTP Status Code Decision Flow\n\nskinparam backgroundColor #FEFEFE\nskinparam handwritten false\nskinparam defaultFontName Arial\nskinparam shadowing false\n\nstart\n\n:Клієнт надсилає HTTP-запит;\n\nif (Сервер отримав запит?) then (так)\n  \n  if (Запит потребує проміжної відповіді?) then (так)\n    :Відправити **1xx Informational**;\n    note right\n      100 Continue\n      101 Switching Protocols\n      103 Early Hints\n    end note\n  endif\n  \n  if (Запит валідний?) then (так)\n    \n    if (Автентифікація потрібна?) then (так)\n      if (Облікові дані надано?) then (так)\n        if (Облікові дані валідні?) then (так)\n          :Перевірка авторизації;\n        else (ні)\n          :Відправити **401 Unauthorized**;\n          stop\n        endif\n      else (ні)\n        :Відправити **401 Unauthorized**;\n        stop\n      endif\n    endif\n    \n    if (Є права доступу?) then (так)\n      \n      if (Ресурс існує?) then (так)\n        \n        if (Метод дозволений?) then (так)\n          \n          if (Ліміт запитів не вичерпано?) then (так)\n            \n            :Обробка запиту на сервері;\n            \n            if (Обробка успішна?) then (так)\n              \n              if (Створено новий ресурс?) then (так)\n                :Відправити **201 Created**;\n                stop\n              else (ні)\n                if (Є дані для повернення?) then (так)\n                  :Відправити **200 OK**;\n                  stop\n                else (ні)\n                  :Відправити **204 No Content**;\n                  stop\n                endif\n              endif\n              \n            else (помилка сервера)\n              :Відправити **500 Internal Server Error**;\n              stop\n            endif\n            \n          else (ні)\n            :Відправити **429 Too Many Requests**;\n            stop\n          endif\n          \n        else (ні)\n          :Відправити **405 Method Not Allowed**;\n          stop\n        endif\n        \n      else (ні, але була перенаправлення)\n        if (Перенаправлення постійне?) then (так)\n          :Відправити **301 Moved Permanently**;\n          stop\n        else (тимчасове)\n          :Відправити **302 Found \u002F 307 Temporary Redirect**;\n          stop\n        endif\n      endif\n      \n      :Відправити **404 Not Found**;\n      stop\n      \n    else (ні)\n      :Відправити **403 Forbidden**;\n      stop\n    endif\n    \n  else (невалідний)\n    \n    if (Синтаксична помилка?) then (так)\n      :Відправити **400 Bad Request**;\n      stop\n    else (семантична помилка)\n      :Відправити **422 Unprocessable Entity**;\n      stop\n    endif\n    \n  endif\n  \nelse (помилка мережі)\n  :Відправити **502 Bad Gateway \u002F 504 Gateway Timeout**;\n  stop\nendif\n\n@enduml\n","plantuml",[3965,10392,10393,10398,10402,10407,10412,10417,10422,10426,10431,10435,10440,10444,10449,10454,10459,10464,10470,10476,10482,10488,10494,10500,10505,10511,10517,10523,10529,10535,10541,10547,10553,10559,10565,10571,10577,10583,10589,10595,10600,10606,10612,10618,10624,10630,10636,10642,10648,10654,10659,10665,10671,10677,10683,10689,10695,10701,10707,10713,10719,10725,10730,10736,10742,10747,10753,10759,10765,10771,10776,10782,10788,10794,10800,10805,10810,10816,10821,10826,10831,10837,10843,10849,10854,10860,10866,10871,10876,10881,10886,10892,10898,10903,10909,10915,10920,10925,10930,10936,10941,10947,10953,10958,10964,10970,10975,10980,10985,10990,10995,11001,11007,11013,11019,11024],{"__ignoreMap":4052},[4056,10394,10395],{"class":4058,"line":4059},[4056,10396,10397],{},"@startuml HTTP Status Code Decision Flow\n",[4056,10399,10400],{"class":4058,"line":4081},[4056,10401,4131],{"emptyLinePlaceholder":4130},[4056,10403,10404],{"class":4058,"line":4095},[4056,10405,10406],{},"skinparam backgroundColor #FEFEFE\n",[4056,10408,10409],{"class":4058,"line":4105},[4056,10410,10411],{},"skinparam handwritten false\n",[4056,10413,10414],{"class":4058,"line":4116},[4056,10415,10416],{},"skinparam defaultFontName Arial\n",[4056,10418,10419],{"class":4058,"line":4127},[4056,10420,10421],{},"skinparam shadowing false\n",[4056,10423,10424],{"class":4058,"line":4134},[4056,10425,4131],{"emptyLinePlaceholder":4130},[4056,10427,10428],{"class":4058,"line":4681},[4056,10429,10430],{},"start\n",[4056,10432,10433],{"class":4058,"line":4711},[4056,10434,4131],{"emptyLinePlaceholder":4130},[4056,10436,10437],{"class":4058,"line":4734},[4056,10438,10439],{},":Клієнт надсилає HTTP-запит;\n",[4056,10441,10442],{"class":4058,"line":4744},[4056,10443,4131],{"emptyLinePlaceholder":4130},[4056,10445,10446],{"class":4058,"line":4750},[4056,10447,10448],{},"if (Сервер отримав запит?) then (так)\n",[4056,10450,10451],{"class":4058,"line":9365},[4056,10452,10453],{},"  \n",[4056,10455,10456],{"class":4058,"line":10364},[4056,10457,10458],{},"  if (Запит потребує проміжної відповіді?) then (так)\n",[4056,10460,10461],{"class":4058,"line":10373},[4056,10462,10463],{},"    :Відправити **1xx Informational**;\n",[4056,10465,10467],{"class":4058,"line":10466},16,[4056,10468,10469],{},"    note right\n",[4056,10471,10473],{"class":4058,"line":10472},17,[4056,10474,10475],{},"      100 Continue\n",[4056,10477,10479],{"class":4058,"line":10478},18,[4056,10480,10481],{},"      101 Switching Protocols\n",[4056,10483,10485],{"class":4058,"line":10484},19,[4056,10486,10487],{},"      103 Early Hints\n",[4056,10489,10491],{"class":4058,"line":10490},20,[4056,10492,10493],{},"    end note\n",[4056,10495,10497],{"class":4058,"line":10496},21,[4056,10498,10499],{},"  endif\n",[4056,10501,10503],{"class":4058,"line":10502},22,[4056,10504,10453],{},[4056,10506,10508],{"class":4058,"line":10507},23,[4056,10509,10510],{},"  if (Запит валідний?) then (так)\n",[4056,10512,10514],{"class":4058,"line":10513},24,[4056,10515,10516],{},"    \n",[4056,10518,10520],{"class":4058,"line":10519},25,[4056,10521,10522],{},"    if (Автентифікація потрібна?) then (так)\n",[4056,10524,10526],{"class":4058,"line":10525},26,[4056,10527,10528],{},"      if (Облікові дані надано?) then (так)\n",[4056,10530,10532],{"class":4058,"line":10531},27,[4056,10533,10534],{},"        if (Облікові дані валідні?) then (так)\n",[4056,10536,10538],{"class":4058,"line":10537},28,[4056,10539,10540],{},"          :Перевірка авторизації;\n",[4056,10542,10544],{"class":4058,"line":10543},29,[4056,10545,10546],{},"        else (ні)\n",[4056,10548,10550],{"class":4058,"line":10549},30,[4056,10551,10552],{},"          :Відправити **401 Unauthorized**;\n",[4056,10554,10556],{"class":4058,"line":10555},31,[4056,10557,10558],{},"          stop\n",[4056,10560,10562],{"class":4058,"line":10561},32,[4056,10563,10564],{},"        endif\n",[4056,10566,10568],{"class":4058,"line":10567},33,[4056,10569,10570],{},"      else (ні)\n",[4056,10572,10574],{"class":4058,"line":10573},34,[4056,10575,10576],{},"        :Відправити **401 Unauthorized**;\n",[4056,10578,10580],{"class":4058,"line":10579},35,[4056,10581,10582],{},"        stop\n",[4056,10584,10586],{"class":4058,"line":10585},36,[4056,10587,10588],{},"      endif\n",[4056,10590,10592],{"class":4058,"line":10591},37,[4056,10593,10594],{},"    endif\n",[4056,10596,10598],{"class":4058,"line":10597},38,[4056,10599,10516],{},[4056,10601,10603],{"class":4058,"line":10602},39,[4056,10604,10605],{},"    if (Є права доступу?) then (так)\n",[4056,10607,10609],{"class":4058,"line":10608},40,[4056,10610,10611],{},"      \n",[4056,10613,10615],{"class":4058,"line":10614},41,[4056,10616,10617],{},"      if (Ресурс існує?) then (так)\n",[4056,10619,10621],{"class":4058,"line":10620},42,[4056,10622,10623],{},"        \n",[4056,10625,10627],{"class":4058,"line":10626},43,[4056,10628,10629],{},"        if (Метод дозволений?) then (так)\n",[4056,10631,10633],{"class":4058,"line":10632},44,[4056,10634,10635],{},"          \n",[4056,10637,10639],{"class":4058,"line":10638},45,[4056,10640,10641],{},"          if (Ліміт запитів не вичерпано?) then (так)\n",[4056,10643,10645],{"class":4058,"line":10644},46,[4056,10646,10647],{},"            \n",[4056,10649,10651],{"class":4058,"line":10650},47,[4056,10652,10653],{},"            :Обробка запиту на сервері;\n",[4056,10655,10657],{"class":4058,"line":10656},48,[4056,10658,10647],{},[4056,10660,10662],{"class":4058,"line":10661},49,[4056,10663,10664],{},"            if (Обробка успішна?) then (так)\n",[4056,10666,10668],{"class":4058,"line":10667},50,[4056,10669,10670],{},"              \n",[4056,10672,10674],{"class":4058,"line":10673},51,[4056,10675,10676],{},"              if (Створено новий ресурс?) then (так)\n",[4056,10678,10680],{"class":4058,"line":10679},52,[4056,10681,10682],{},"                :Відправити **201 Created**;\n",[4056,10684,10686],{"class":4058,"line":10685},53,[4056,10687,10688],{},"                stop\n",[4056,10690,10692],{"class":4058,"line":10691},54,[4056,10693,10694],{},"              else (ні)\n",[4056,10696,10698],{"class":4058,"line":10697},55,[4056,10699,10700],{},"                if (Є дані для повернення?) then (так)\n",[4056,10702,10704],{"class":4058,"line":10703},56,[4056,10705,10706],{},"                  :Відправити **200 OK**;\n",[4056,10708,10710],{"class":4058,"line":10709},57,[4056,10711,10712],{},"                  stop\n",[4056,10714,10716],{"class":4058,"line":10715},58,[4056,10717,10718],{},"                else (ні)\n",[4056,10720,10722],{"class":4058,"line":10721},59,[4056,10723,10724],{},"                  :Відправити **204 No Content**;\n",[4056,10726,10728],{"class":4058,"line":10727},60,[4056,10729,10712],{},[4056,10731,10733],{"class":4058,"line":10732},61,[4056,10734,10735],{},"                endif\n",[4056,10737,10739],{"class":4058,"line":10738},62,[4056,10740,10741],{},"              endif\n",[4056,10743,10745],{"class":4058,"line":10744},63,[4056,10746,10670],{},[4056,10748,10750],{"class":4058,"line":10749},64,[4056,10751,10752],{},"            else (помилка сервера)\n",[4056,10754,10756],{"class":4058,"line":10755},65,[4056,10757,10758],{},"              :Відправити **500 Internal Server Error**;\n",[4056,10760,10762],{"class":4058,"line":10761},66,[4056,10763,10764],{},"              stop\n",[4056,10766,10768],{"class":4058,"line":10767},67,[4056,10769,10770],{},"            endif\n",[4056,10772,10774],{"class":4058,"line":10773},68,[4056,10775,10647],{},[4056,10777,10779],{"class":4058,"line":10778},69,[4056,10780,10781],{},"          else (ні)\n",[4056,10783,10785],{"class":4058,"line":10784},70,[4056,10786,10787],{},"            :Відправити **429 Too Many Requests**;\n",[4056,10789,10791],{"class":4058,"line":10790},71,[4056,10792,10793],{},"            stop\n",[4056,10795,10797],{"class":4058,"line":10796},72,[4056,10798,10799],{},"          endif\n",[4056,10801,10803],{"class":4058,"line":10802},73,[4056,10804,10635],{},[4056,10806,10808],{"class":4058,"line":10807},74,[4056,10809,10546],{},[4056,10811,10813],{"class":4058,"line":10812},75,[4056,10814,10815],{},"          :Відправити **405 Method Not Allowed**;\n",[4056,10817,10819],{"class":4058,"line":10818},76,[4056,10820,10558],{},[4056,10822,10824],{"class":4058,"line":10823},77,[4056,10825,10564],{},[4056,10827,10829],{"class":4058,"line":10828},78,[4056,10830,10623],{},[4056,10832,10834],{"class":4058,"line":10833},79,[4056,10835,10836],{},"      else (ні, але була перенаправлення)\n",[4056,10838,10840],{"class":4058,"line":10839},80,[4056,10841,10842],{},"        if (Перенаправлення постійне?) then (так)\n",[4056,10844,10846],{"class":4058,"line":10845},81,[4056,10847,10848],{},"          :Відправити **301 Moved Permanently**;\n",[4056,10850,10852],{"class":4058,"line":10851},82,[4056,10853,10558],{},[4056,10855,10857],{"class":4058,"line":10856},83,[4056,10858,10859],{},"        else (тимчасове)\n",[4056,10861,10863],{"class":4058,"line":10862},84,[4056,10864,10865],{},"          :Відправити **302 Found \u002F 307 Temporary Redirect**;\n",[4056,10867,10869],{"class":4058,"line":10868},85,[4056,10870,10558],{},[4056,10872,10874],{"class":4058,"line":10873},86,[4056,10875,10564],{},[4056,10877,10879],{"class":4058,"line":10878},87,[4056,10880,10588],{},[4056,10882,10884],{"class":4058,"line":10883},88,[4056,10885,10611],{},[4056,10887,10889],{"class":4058,"line":10888},89,[4056,10890,10891],{},"      :Відправити **404 Not Found**;\n",[4056,10893,10895],{"class":4058,"line":10894},90,[4056,10896,10897],{},"      stop\n",[4056,10899,10901],{"class":4058,"line":10900},91,[4056,10902,10611],{},[4056,10904,10906],{"class":4058,"line":10905},92,[4056,10907,10908],{},"    else (ні)\n",[4056,10910,10912],{"class":4058,"line":10911},93,[4056,10913,10914],{},"      :Відправити **403 Forbidden**;\n",[4056,10916,10918],{"class":4058,"line":10917},94,[4056,10919,10897],{},[4056,10921,10923],{"class":4058,"line":10922},95,[4056,10924,10594],{},[4056,10926,10928],{"class":4058,"line":10927},96,[4056,10929,10516],{},[4056,10931,10933],{"class":4058,"line":10932},97,[4056,10934,10935],{},"  else (невалідний)\n",[4056,10937,10939],{"class":4058,"line":10938},98,[4056,10940,10516],{},[4056,10942,10944],{"class":4058,"line":10943},99,[4056,10945,10946],{},"    if (Синтаксична помилка?) then (так)\n",[4056,10948,10950],{"class":4058,"line":10949},100,[4056,10951,10952],{},"      :Відправити **400 Bad Request**;\n",[4056,10954,10956],{"class":4058,"line":10955},101,[4056,10957,10897],{},[4056,10959,10961],{"class":4058,"line":10960},102,[4056,10962,10963],{},"    else (семантична помилка)\n",[4056,10965,10967],{"class":4058,"line":10966},103,[4056,10968,10969],{},"      :Відправити **422 Unprocessable Entity**;\n",[4056,10971,10973],{"class":4058,"line":10972},104,[4056,10974,10897],{},[4056,10976,10978],{"class":4058,"line":10977},105,[4056,10979,10594],{},[4056,10981,10983],{"class":4058,"line":10982},106,[4056,10984,10516],{},[4056,10986,10988],{"class":4058,"line":10987},107,[4056,10989,10499],{},[4056,10991,10993],{"class":4058,"line":10992},108,[4056,10994,10453],{},[4056,10996,10998],{"class":4058,"line":10997},109,[4056,10999,11000],{},"else (помилка мережі)\n",[4056,11002,11004],{"class":4058,"line":11003},110,[4056,11005,11006],{},"  :Відправити **502 Bad Gateway \u002F 504 Gateway Timeout**;\n",[4056,11008,11010],{"class":4058,"line":11009},111,[4056,11011,11012],{},"  stop\n",[4056,11014,11016],{"class":4058,"line":11015},112,[4056,11017,11018],{},"endif\n",[4056,11020,11022],{"class":4058,"line":11021},113,[4056,11023,4131],{"emptyLinePlaceholder":4130},[4056,11025,11027],{"class":4058,"line":11026},114,[4056,11028,11029],{},"@enduml\n",[3805,11031],{},[3808,11033,11035],{"id":11034},"порівняльна-таблиця-схожих-кодів-статусу","Порівняльна таблиця схожих кодів статусу",[3813,11037,11038,11039,11042],{},"Багато кодів статусу мають схожу семантику, що може викликати плутанину. Нижче наведено ",[3770,11040,11041],{},"порівняльну таблицю"," для роз'яснення відмінностей:",[3825,11044,11046],{"id":11045},"_200-ok-vs-201-created-vs-204-no-content","200 OK vs 201 Created vs 204 No Content",[3830,11048,11049,11065],{},[3833,11050,11051],{},[3836,11052,11053,11056,11059,11062],{},[3839,11054,11055],{},"Код",[3839,11057,11058],{},"Коли використовувати",[3839,11060,11061],{},"Тіло відповіді",[3839,11063,11064],{},"Приклад",[3852,11066,11067,11085,11105],{},[3836,11068,11069,11073,11076,11079],{},[3857,11070,11071],{},[3770,11072,5261],{},[3857,11074,11075],{},"Успішна обробка, дані повертаються",[3857,11077,11078],{},"Так",[3857,11080,11081,11084],{},[3965,11082,11083],{},"GET \u002Fusers\u002F42"," → повертає дані користувача",[3836,11086,11087,11091,11094,11099],{},[3857,11088,11089],{},[3770,11090,5253],{},[3857,11092,11093],{},"Створено новий ресурс",[3857,11095,11096,11097],{},"Так (дані нового ресурсу) + ",[3965,11098,4232],{},[3857,11100,11101,11104],{},[3965,11102,11103],{},"POST \u002Fusers"," → створено користувача",[3836,11106,11107,11112,11115,11118],{},[3857,11108,11109],{},[3770,11110,11111],{},"204 No Content",[3857,11113,11114],{},"Успішна обробка, дані НЕ повертаються",[3857,11116,11117],{},"Ні",[3857,11119,11120,11123],{},[3965,11121,11122],{},"DELETE \u002Fusers\u002F42"," → користувача видалено",[3825,11125,11127],{"id":11126},"_301-moved-permanently-vs-302-found-vs-307-temporary-redirect-vs-308-permanent-redirect","301 Moved Permanently vs 302 Found vs 307 Temporary Redirect vs 308 Permanent Redirect",[3830,11129,11130,11145],{},[3833,11131,11132],{},[3836,11133,11134,11136,11139,11142],{},[3839,11135,11055],{},[3839,11137,11138],{},"Тривалість",[3839,11140,11141],{},"Зберігає метод?",[3839,11143,11144],{},"Використання",[3852,11146,11147,11163,11178,11195],{},[3836,11148,11149,11154,11157,11160],{},[3857,11150,11151],{},[3770,11152,11153],{},"301 Moved Permanently",[3857,11155,11156],{},"Постійне",[3857,11158,11159],{},"Ні (може змінити POST→GET)",[3857,11161,11162],{},"Зміна домену, SEO",[3836,11164,11165,11170,11173,11175],{},[3857,11166,11167],{},[3770,11168,11169],{},"302 Found",[3857,11171,11172],{},"Тимчасове",[3857,11174,11159],{},[3857,11176,11177],{},"Тимчасове перенаправлення, A\u002FB тести",[3836,11179,11180,11185,11187,11192],{},[3857,11181,11182],{},[3770,11183,11184],{},"307 Temporary Redirect",[3857,11186,11172],{},[3857,11188,11189,11191],{},[3770,11190,11078],{}," (POST залишається POST)",[3857,11193,11194],{},"Тимчасове перенаправлення з POST",[3836,11196,11197,11202,11204,11208],{},[3857,11198,11199],{},[3770,11200,11201],{},"308 Permanent Redirect",[3857,11203,11156],{},[3857,11205,11206,11191],{},[3770,11207,11078],{},[3857,11209,11210],{},"Постійне перенаправлення з POST",[3825,11212,11214],{"id":11213},"_400-bad-request-vs-422-unprocessable-entity","400 Bad Request vs 422 Unprocessable Entity",[3830,11216,11217,11230],{},[3833,11218,11219],{},[3836,11220,11221,11223,11226,11228],{},[3839,11222,11055],{},[3839,11224,11225],{},"Тип помилки",[3839,11227,11058],{},[3839,11229,11064],{},[3852,11231,11232,11253],{},[3836,11233,11234,11239,11244,11247],{},[3857,11235,11236],{},[3770,11237,11238],{},"400 Bad Request",[3857,11240,11241],{},[3770,11242,11243],{},"Синтаксична",[3857,11245,11246],{},"Некоректний JSON, невалідний формат, порушення HTTP-протоколу",[3857,11248,11249,11252],{},[3965,11250,11251],{},"{\"email\": invalid}"," (некоректний JSON)",[3836,11254,11255,11260,11265,11268],{},[3857,11256,11257],{},[3770,11258,11259],{},"422 Unprocessable Entity",[3857,11261,11262],{},[3770,11263,11264],{},"Семантична",[3857,11266,11267],{},"Синтаксис правильний, але дані невалідні згідно бізнес-логіки",[3857,11269,11270,11273],{},[3965,11271,11272],{},"{\"age\": -5}"," (вік не може бути від'ємним)",[3825,11275,11277],{"id":11276},"_401-unauthorized-vs-403-forbidden","401 Unauthorized vs 403 Forbidden",[3830,11279,11280,11294],{},[3833,11281,11282],{},[3836,11283,11284,11286,11289,11292],{},[3839,11285,11055],{},[3839,11287,11288],{},"Проблема",[3839,11290,11291],{},"Рішення",[3839,11293,11064],{},[3852,11295,11296,11314],{},[3836,11297,11298,11303,11308,11311],{},[3857,11299,11300],{},[3770,11301,11302],{},"401 Unauthorized",[3857,11304,11305],{},[3770,11306,11307],{},"Відсутня або невалідна автентифікація",[3857,11309,11310],{},"Надати валідні облікові дані (логін, токен)",[3857,11312,11313],{},"Токен прострочений → увійдіть знову",[3836,11315,11316,11321,11327,11330],{},[3857,11317,11318],{},[3770,11319,11320],{},"403 Forbidden",[3857,11322,11323,11326],{},[3770,11324,11325],{},"Недостатньо прав"," (автентифікація є)",[3857,11328,11329],{},"Запитати доступ у адміністратора, змінити роль",[3857,11331,11332],{},"Звичайний користувач намагається видалити інших",[3825,11334,11336],{"id":11335},"_404-not-found-vs-410-gone","404 Not Found vs 410 Gone",[3830,11338,11339,11353],{},[3833,11340,11341],{},[3836,11342,11343,11345,11347,11350],{},[3839,11344,11055],{},[3839,11346,3847],{},[3839,11348,11349],{},"Чи існував ресурс?",[3839,11351,11352],{},"SEO наслідки",[3852,11354,11355,11371],{},[3836,11356,11357,11362,11365,11368],{},[3857,11358,11359],{},[3770,11360,11361],{},"404 Not Found",[3857,11363,11364],{},"Ресурс не знайдено",[3857,11366,11367],{},"Невідомо (можливо, ніколи не існував)",[3857,11369,11370],{},"Пошукові системи повторюють індексацію",[3836,11372,11373,11377,11382,11385],{},[3857,11374,11375],{},[3770,11376,7722],{},[3857,11378,11379,11380],{},"Ресурс ",[3770,11381,7718],{},[3857,11383,11384],{},"Так, існував раніше",[3857,11386,11387,11388],{},"Пошукові системи ",[3770,11389,11390],{},"видаляють з індексу",[3825,11392,11394],{"id":11393},"_502-bad-gateway-vs-503-service-unavailable-vs-504-gateway-timeout","502 Bad Gateway vs 503 Service Unavailable vs 504 Gateway Timeout",[3830,11396,11397,11411],{},[3833,11398,11399],{},[3836,11400,11401,11403,11406,11409],{},[3839,11402,11055],{},[3839,11404,11405],{},"Причина",[3839,11407,11408],{},"Хто відповідає",[3839,11410,3850],{},[3852,11412,11413,11428,11446],{},[3836,11414,11415,11419,11422,11425],{},[3857,11416,11417],{},[3770,11418,9772],{},[3857,11420,11421],{},"Невалідна відповідь від upstream",[3857,11423,11424],{},"Проксі\u002Fшлюз",[3857,11426,11427],{},"Повторити (можливо, backend перезапускається)",[3836,11429,11430,11435,11438,11441],{},[3857,11431,11432],{},[3770,11433,11434],{},"503 Service Unavailable",[3857,11436,11437],{},"Сервер перевантажений або на обслуговуванні",[3857,11439,11440],{},"Сам сервер",[3857,11442,11443,11444],{},"Повторити через час, вказаний у ",[3965,11445,8587],{},[3836,11447,11448,11453,11456,11458],{},[3857,11449,11450],{},[3770,11451,11452],{},"504 Gateway Timeout",[3857,11454,11455],{},"Upstream не відповів вчасно",[3857,11457,11424],{},[3857,11459,11460],{},"Повторити або перейти на асинхронну обробку",[3805,11462],{},[3808,11464,11466],{"id":11465},"узагальнення-вибір-правильного-коду-статусу","Узагальнення: Вибір правильного коду статусу",[3738,11468,11469,11507,11537,11579],{},[3741,11470,11473],{"icon":11471,"title":11472},"i-lucide-check-circle","✅ Успішні операції (2xx)",[3746,11474,11475,11481,11489,11495,11501],{},[3749,11476,11477,11480],{},[3770,11478,11479],{},"200 OK:"," Універсальний успіх, дані повертаються",[3749,11482,11483,11486,11487],{},[3770,11484,11485],{},"201 Created:"," Створено новий ресурс + ",[3965,11488,4232],{},[3749,11490,11491,11494],{},[3770,11492,11493],{},"202 Accepted:"," Запит прийнято, обробка асинхронна",[3749,11496,11497,11500],{},[3770,11498,11499],{},"204 No Content:"," Успіх без тіла відповіді (DELETE, PUT)",[3749,11502,11503,11506],{},[3770,11504,11505],{},"206 Partial Content:"," Часткове завантаження (Range)",[3741,11508,11511],{"icon":11509,"title":11510},"i-lucide-arrow-right-circle","➡️ Перенаправлення (3xx)",[3746,11512,11513,11519,11525,11531],{},[3749,11514,11515,11518],{},[3770,11516,11517],{},"301 Moved Permanently:"," Ресурс назавжди переміщено (SEO)",[3749,11520,11521,11524],{},[3770,11522,11523],{},"302 Found \u002F 307:"," Тимчасове перенаправлення",[3749,11526,11527,11530],{},[3770,11528,11529],{},"303 See Other:"," POST → GET редірект",[3749,11532,11533,11536],{},[3770,11534,11535],{},"304 Not Modified:"," Використовувати кеш (умовний GET)",[3741,11538,11541],{"icon":11539,"title":11540},"i-lucide-x-circle","❌ Помилки клієнта (4xx)",[3746,11542,11543,11549,11555,11561,11567,11573],{},[3749,11544,11545,11548],{},[3770,11546,11547],{},"400 Bad Request:"," Синтаксична помилка",[3749,11550,11551,11554],{},[3770,11552,11553],{},"401 Unauthorized:"," Немає автентифікації",[3749,11556,11557,11560],{},[3770,11558,11559],{},"403 Forbidden:"," Немає прав доступу",[3749,11562,11563,11566],{},[3770,11564,11565],{},"404 Not Found:"," Ресурс не знайдено",[3749,11568,11569,11572],{},[3770,11570,11571],{},"422 Unprocessable Entity:"," Семантична помилка",[3749,11574,11575,11578],{},[3770,11576,11577],{},"429 Too Many Requests:"," Перевищено rate limit",[3741,11580,11583],{"icon":11581,"title":11582},"i-lucide-alert-triangle","⚠️ Помилки сервера (5xx)",[3746,11584,11585,11591,11597,11603],{},[3749,11586,11587,11590],{},[3770,11588,11589],{},"500 Internal Server Error:"," Загальна помилка сервера",[3749,11592,11593,11596],{},[3770,11594,11595],{},"502 Bad Gateway:"," Помилка upstream-сервера",[3749,11598,11599,11602],{},[3770,11600,11601],{},"503 Service Unavailable:"," Тимчасово недоступний",[3749,11604,11605,11608],{},[3770,11606,11607],{},"504 Gateway Timeout:"," Upstream не відповів вчасно",[3805,11610],{},[3808,11612,11614],{"id":11613},"контрольні-питання-та-завдання","Контрольні питання та завдання",[11616,11617,11618],"accordion",{},[11619,11620,11622,11628,11643],"accordion-item",{"label":11621},"Питання 1: Класифікація кодів статусу",[3813,11623,11624,11627],{},[3770,11625,11626],{},"Завдання:"," Класифікуйте наступні коди статусу за категоріями (1xx, 2xx, 3xx, 4xx, 5xx) та поясніть їхнє призначення:",[3813,11629,11630,11631,11633,11634,11636,11637,11639,11640,11642],{},"a) 201",[4021,11632],{},"\nb) 404",[4021,11635],{},"\nc) 503",[4021,11638],{},"\nd) 301",[4021,11641],{},"\ne) 422",[11644,11645,11647,11652,11665,11674,11683,11692],"collapsible",{"label":11646},"Показати відповідь",[3813,11648,11649],{},[3770,11650,11651],{},"Відповіді:",[3813,11653,11654,11655,11657,11658,11661,11662,11664],{},"a) ",[3770,11656,5253],{}," — категорія ",[3770,11659,11660],{},"2xx (Успішні)",". Ресурс успішно створено, відповідь містить ",[3965,11663,4232],{}," з URI нового ресурсу.",[3813,11666,11667,11668,11657,11670,11673],{},"b) ",[3770,11669,11361],{},[3770,11671,11672],{},"4xx (Помилки клієнта)",". Запитуваний ресурс не знайдено на сервері.",[3813,11675,11676,11677,11657,11679,11682],{},"c) ",[3770,11678,11434],{},[3770,11680,11681],{},"5xx (Помилки сервера)",". Сервер тимчасово не може обробляти запити (обслуговування, перевантаження).",[3813,11684,11685,11686,11657,11688,11691],{},"d) ",[3770,11687,11153],{},[3770,11689,11690],{},"3xx (Перенаправлення)",". Ресурс назавжди переміщено на нову адресу, клієнт повинен оновити збережені посилання.",[3813,11693,11694,11695,11657,11697,11699],{},"e) ",[3770,11696,11259],{},[3770,11698,11672],{},". Запит синтаксично коректний, але містить семантичні помилки (невалідні дані згідно бізнес-правил).",[3813,11701,11702],{},"::",[11619,11704,11706,11711],{"label":11705},"Питання 2: Різниця між 401 та 403",[3813,11707,11708,11710],{},[3770,11709,11626],{}," Поясніть різницю між кодами 401 Unauthorized та 403 Forbidden. Наведіть приклади ситуацій, коли слід використовувати кожен з них.",[11644,11712,11713,11717,11722,11744,11748,11768],{"label":11646},[3813,11714,11715],{},[3770,11716,4826],{},[3813,11718,11719,11721],{},[3770,11720,11302],{}," (насправді означає \"Unauthenticated\"):",[3746,11723,11724,11733,11739],{},[3749,11725,11726,11729,11730,4310],{},[3770,11727,11728],{},"Проблема:"," Відсутня або невалідна ",[3770,11731,11732],{},"автентифікація",[3749,11734,11735,11738],{},[3770,11736,11737],{},"Рішення:"," Клієнт повинен надати валідні облікові дані (токен, логін\u002Fпароль).",[3749,11740,11741,11743],{},[3770,11742,4500],{}," Користувач не увійшов у систему або токен прострочений.",[3813,11745,11746],{},[3770,11747,11559],{},[3746,11749,11750,11758,11763],{},[3749,11751,11752,11754,11755,11757],{},[3770,11753,11728],{}," Автентифікація є валідною, але ",[3770,11756,7493],{}," для виконання операції.",[3749,11759,11760,11762],{},[3770,11761,11737],{}," Запитати доступ у адміністратора або змінити роль користувача.",[3749,11764,11765,11767],{},[3770,11766,4500],{}," Звичайний користувач (role: user) намагається видалити інших користувачів (потрібна роль admin).",[3813,11769,11770,11773,11775,11776,11778],{},[3770,11771,11772],{},"Ключова відмінність:",[4021,11774],{},"\n401 → \"Хто ти?\" (потрібна автентифікація)",[4021,11777],{},"\n403 → \"Я знаю, хто ти, але тобі не дозволено\" (недостатньо прав)",[11619,11780,11782,11787,11817],{"label":11781},"Питання 3: Вибір коду для REST API",[3813,11783,11784,11786],{},[3770,11785,11626],{}," Виберіть найбільш підхожий код статусу для наступних сценаріїв REST API:",[3813,11788,11789,11790,11793,11794,11796,11797,11800,11801,11803,11804,11806,11807,11809,11810,11813,11814,11816],{},"a) Клієнт створює нового користувача через ",[3965,11791,11792],{},"POST \u002Fapi\u002Fusers",", операція успішна.",[4021,11795],{},"\nb) Клієнт надсилає ",[3965,11798,11799],{},"DELETE \u002Fapi\u002Fproducts\u002F123",", продукт видалено, підтвердження не потрібне.",[4021,11802],{},"\nc) Клієнт надсилає ",[3965,11805,11792],{}," з email, що вже існує в базі.",[4021,11808],{},"\nd) Клієнт надсилає ",[3965,11811,11812],{},"GET \u002Fapi\u002Forders"," без токена автентифікації.",[4021,11815],{},"\ne) Клієнт надсилає 55-й запит за хвилину при ліміті 50 запитів\u002Fхвилину.",[11644,11818,11819,11823,11832,11837,11846,11854],{"label":11646},[3813,11820,11821],{},[3770,11822,11651],{},[3813,11824,11654,11825,11827,11828,11831],{},[3770,11826,5253],{}," — створено новий ресурс. Відповідь повинна містити заголовок ",[3965,11829,11830],{},"Location: \u002Fapi\u002Fusers\u002F456"," з URI новоствореного користувача та тіло з даними користувача.",[3813,11833,11667,11834,11836],{},[3770,11835,11111],{}," — операція успішна, дані не повертаються. Тіло відповіді порожнє.",[3813,11838,11676,11839,11842,11843,11845],{},[3770,11840,11841],{},"409 Conflict"," — запит конфліктує з поточним станом (дублікат email). Альтернативно можна використати ",[3965,11844,11259],{},", якщо це розглядається як порушення бізнес-правил.",[3813,11847,11685,11848,11850,11851,4310],{},[3770,11849,11302],{}," — відсутня автентифікація. Відповідь повинна містити заголовок ",[3965,11852,11853],{},"WWW-Authenticate: Bearer realm=\"API\"",[3813,11855,11694,11856,11859,11860,6502,11862,6502,11864,6502,11866,4310],{},[3770,11857,11858],{},"429 Too Many Requests"," — перевищено ліміт запитів. Відповідь повинна містити заголовки ",[3965,11861,8587],{},[3965,11863,9061],{},[3965,11865,9071],{},[3965,11867,9080],{},[11619,11869,11871,11876,11935,11939,12001,12006,12021],{"label":11870},"Питання 4: Аналіз RAW HTTP-взаємодії",[3813,11872,11873,11875],{},[3770,11874,11626],{}," Проаналізуйте наступну HTTP-взаємодію та відповідь на питання:",[4047,11877,11879],{"className":4049,"code":11878,"language":4051,"meta":4052,"style":4052},"POST \u002Fapi\u002Fv1\u002Farticles HTTP\u002F1.1\nHost: blog.example.com\nContent-Type: application\u002Fjson\nAuthorization: Bearer user-token-abc\n\n{\"title\":\"My Article\"}\n",[3965,11880,11881,11893,11902,11910,11919,11923],{"__ignoreMap":4052},[4056,11882,11883,11885,11887,11889,11891],{"class":4058,"line":4059},[4056,11884,4063],{"class":4062},[4056,11886,6314],{"class":4066},[4056,11888,4071],{"class":4070},[4056,11890,4074],{"class":4066},[4056,11892,4078],{"class":4077},[4056,11894,11895,11897,11899],{"class":4058,"line":4081},[4056,11896,4085],{"class":4084},[4056,11898,4088],{"class":4070},[4056,11900,11901],{"class":4091}," blog.example.com\n",[4056,11903,11904,11906,11908],{"class":4058,"line":4095},[4056,11905,4026],{"class":4084},[4056,11907,4088],{"class":4070},[4056,11909,4246],{"class":4091},[4056,11911,11912,11914,11916],{"class":4058,"line":4105},[4056,11913,5655],{"class":4084},[4056,11915,4088],{"class":4070},[4056,11917,11918],{"class":4091}," Bearer user-token-abc\n",[4056,11920,11921],{"class":4058,"line":4116},[4056,11922,4131],{"emptyLinePlaceholder":4130},[4056,11924,11925,11927,11929,11931,11933],{"class":4058,"line":4127},[4056,11926,4264],{"class":4066},[4056,11928,6339],{"class":4267},[4056,11930,4088],{"class":4066},[4056,11932,6344],{"class":4091},[4056,11934,4297],{"class":4066},[3813,11936,11937],{},[3770,11938,4826],{},[4047,11940,11942],{"className":4049,"code":11941,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 422 Unprocessable Entity\nContent-Type: application\u002Fjson\n\n{\"error\":\"Validation Failed\",\"details\":[{\"field\":\"content\",\"message\":\"Content is required\"}]}\n",[3965,11943,11944,11956,11964,11968],{"__ignoreMap":4052},[4056,11945,11946,11948,11950,11952,11954],{"class":4058,"line":4059},[4056,11947,4071],{"class":4070},[4056,11949,4074],{"class":4066},[4056,11951,4184],{"class":4077},[4056,11953,8909],{"class":4077},[4056,11955,8912],{"class":4091},[4056,11957,11958,11960,11962],{"class":4058,"line":4081},[4056,11959,4026],{"class":4084},[4056,11961,4088],{"class":4070},[4056,11963,4246],{"class":4091},[4056,11965,11966],{"class":4058,"line":4095},[4056,11967,4131],{"emptyLinePlaceholder":4130},[4056,11969,11970,11972,11974,11976,11978,11980,11982,11984,11986,11988,11990,11992,11994,11996,11999],{"class":4058,"line":4105},[4056,11971,4264],{"class":4066},[4056,11973,7026],{"class":4267},[4056,11975,4088],{"class":4066},[4056,11977,7147],{"class":4091},[4056,11979,4276],{"class":4066},[4056,11981,7152],{"class":4267},[4056,11983,7155],{"class":4066},[4056,11985,7158],{"class":4267},[4056,11987,4088],{"class":4066},[4056,11989,6349],{"class":4091},[4056,11991,4276],{"class":4066},[4056,11993,7036],{"class":4267},[4056,11995,4088],{"class":4066},[4056,11997,11998],{"class":4091},"\"Content is required\"",[4056,12000,7192],{"class":4066},[3813,12002,12003],{},[3770,12004,12005],{},"Питання:",[12007,12008,12009,12012,12015,12018],"ol",{},[3749,12010,12011],{},"Чому сервер повернув 422, а не 400?",[3749,12013,12014],{},"Чи була автентифікація успішною?",[3749,12016,12017],{},"Що повинен зробити клієнт для виправлення помилки?",[3749,12019,12020],{},"Чи правильно обрано код статусу? Обгрунтуйте.",[11644,12022,12023,12027],{"label":11646},[3813,12024,12025],{},[3770,12026,11651],{},[12007,12028,12029,12049,12059,12101],{},[3749,12030,12031,12034,12036,12037,12040,12041,12044,12045,12048],{},[3770,12032,12033],{},"Чому 422, а не 400?",[4021,12035],{},"\nЗапит є ",[3770,12038,12039],{},"синтаксично коректним"," (валідний JSON, правильна структура), тому 400 не підходить. Помилка є ",[3770,12042,12043],{},"семантичною"," — відсутнє обов'язкове поле ",[3965,12046,12047],{},"content"," згідно бізнес-правил валідації. 422 Unprocessable Entity саме для таких випадків.",[3749,12050,12051,12053,12055,12056,12058],{},[3770,12052,12014],{},[4021,12054],{},"\nТак, автентифікація успішна. Якби токен був невалідним або відсутнім, сервер повернув би ",[3770,12057,11302],{},". Сервер дійшов до етапу валідації даних, що означає успішну автентифікацію.",[3749,12060,12061,12064,12066,12067,12072,12073],{},[3770,12062,12063],{},"Що повинен зробити клієнт?",[4021,12065],{},"\nКлієнт повинен ",[3770,12068,12069,12070],{},"додати поле ",[3965,12071,12047],{}," до тіла запиту та повторити POST:",[4047,12074,12078],{"className":12075,"code":12076,"language":12077,"meta":4052,"style":4052},"language-json shiki shiki-themes light-plus dark-plus dark-plus","{\"title\":\"My Article\",\"content\":\"Article text here...\"}\n","json",[3965,12079,12080],{"__ignoreMap":4052},[4056,12081,12082,12084,12086,12088,12090,12092,12094,12096,12099],{"class":4058,"line":4059},[4056,12083,4264],{"class":4066},[4056,12085,6339],{"class":4267},[4056,12087,4088],{"class":4066},[4056,12089,6344],{"class":4091},[4056,12091,4276],{"class":4066},[4056,12093,6349],{"class":4267},[4056,12095,4088],{"class":4066},[4056,12097,12098],{"class":4091},"\"Article text here...\"",[4056,12100,4297],{"class":4066},[3749,12102,12103,12106,12108,12109,12112],{},[3770,12104,12105],{},"Чи правильно обрано код статусу?",[4021,12107],{},"\nТак, ",[3770,12110,12111],{},"422 є правильним вибором",". Альтернативно можна було використати 400, але 422 більш точно описує семантичну природу помилки та дозволяє клієнту зрозуміти, що синтаксис коректний, але дані невалідні.",[11619,12114,12116,12129],{"label":12115},"Питання 5: Проектування rate limiting",[3813,12117,12118,12120,12121,12124,12125,12128],{},[3770,12119,11626],{}," Розробіть структуру відповіді для endpoint ",[3965,12122,12123],{},"\u002Fapi\u002Fv1\u002Fsearch",", який має ліміт ",[3770,12126,12127],{},"100 запитів на годину",". Клієнт надіслав 101-й запит. Яку відповідь повинен повернути сервер? Включіть усі необхідні заголовки та тіло.",[11644,12130,12131,12135,12306,12311,12342],{"label":11646},[3813,12132,12133],{},[3770,12134,4826],{},[4047,12136,12138],{"className":4049,"code":12137,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 429 Too Many Requests\nContent-Type: application\u002Fjson; charset=utf-8\nRetry-After: 2847\nX-RateLimit-Limit: 100\nX-RateLimit-Remaining: 0\nX-RateLimit-Reset: 1693318047\nX-RateLimit-Window: 3600\nDate: Sat, 29 Aug 2026 14:00:00 GMT\nContent-Length: 189\n\n{\n  \"error\": \"Too Many Requests\",\n  \"message\": \"Rate limit exceeded. Maximum 100 requests per hour.\",\n  \"limit\": 100,\n  \"remaining\": 0,\n  \"resetAt\": \"2026-08-29T14:47:27Z\",\n  \"retryAfterSeconds\": 2847\n}\n",[3965,12139,12140,12152,12160,12169,12178,12186,12195,12204,12213,12222,12226,12231,12244,12256,12268,12280,12292,12302],{"__ignoreMap":4052},[4056,12141,12142,12144,12146,12148,12150],{"class":4058,"line":4059},[4056,12143,4071],{"class":4070},[4056,12145,4074],{"class":4066},[4056,12147,4184],{"class":4077},[4056,12149,9036],{"class":4077},[4056,12151,9039],{"class":4091},[4056,12153,12154,12156,12158],{"class":4058,"line":4081},[4056,12155,4026],{"class":4084},[4056,12157,4088],{"class":4070},[4056,12159,4852],{"class":4091},[4056,12161,12162,12164,12166],{"class":4058,"line":4095},[4056,12163,8587],{"class":4084},[4056,12165,4088],{"class":4070},[4056,12167,12168],{"class":4091}," 2847\n",[4056,12170,12171,12173,12175],{"class":4058,"line":4105},[4056,12172,9061],{"class":4084},[4056,12174,4088],{"class":4070},[4056,12176,12177],{"class":4091}," 100\n",[4056,12179,12180,12182,12184],{"class":4058,"line":4116},[4056,12181,9071],{"class":4084},[4056,12183,4088],{"class":4070},[4056,12185,6116],{"class":4091},[4056,12187,12188,12190,12192],{"class":4058,"line":4127},[4056,12189,9080],{"class":4084},[4056,12191,4088],{"class":4070},[4056,12193,12194],{"class":4091}," 1693318047\n",[4056,12196,12197,12200,12202],{"class":4058,"line":4134},[4056,12198,12199],{"class":4084},"X-RateLimit-Window",[4056,12201,4088],{"class":4070},[4056,12203,8592],{"class":4091},[4056,12205,12206,12208,12210],{"class":4058,"line":4681},[4056,12207,5688],{"class":4084},[4056,12209,4088],{"class":4070},[4056,12211,12212],{"class":4091}," Sat, 29 Aug 2026 14:00:00 GMT\n",[4056,12214,12215,12217,12219],{"class":4058,"line":4711},[4056,12216,4108],{"class":4084},[4056,12218,4088],{"class":4070},[4056,12220,12221],{"class":4091}," 189\n",[4056,12223,12224],{"class":4058,"line":4734},[4056,12225,4131],{"emptyLinePlaceholder":4130},[4056,12227,12228],{"class":4058,"line":4744},[4056,12229,12230],{"class":4066},"{\n",[4056,12232,12233,12236,12239,12241],{"class":4058,"line":4750},[4056,12234,12235],{"class":4267},"  \"error\"",[4056,12237,12238],{"class":4066},": ",[4056,12240,9100],{"class":4091},[4056,12242,12243],{"class":4066},",\n",[4056,12245,12246,12249,12251,12254],{"class":4058,"line":9365},[4056,12247,12248],{"class":4267},"  \"message\"",[4056,12250,12238],{"class":4066},[4056,12252,12253],{"class":4091},"\"Rate limit exceeded. Maximum 100 requests per hour.\"",[4056,12255,12243],{"class":4066},[4056,12257,12258,12261,12263,12266],{"class":4058,"line":10364},[4056,12259,12260],{"class":4267},"  \"limit\"",[4056,12262,12238],{"class":4066},[4056,12264,12265],{"class":4077},"100",[4056,12267,12243],{"class":4066},[4056,12269,12270,12273,12275,12278],{"class":4058,"line":10373},[4056,12271,12272],{"class":4267},"  \"remaining\"",[4056,12274,12238],{"class":4066},[4056,12276,12277],{"class":4077},"0",[4056,12279,12243],{"class":4066},[4056,12281,12282,12285,12287,12290],{"class":4058,"line":10466},[4056,12283,12284],{"class":4267},"  \"resetAt\"",[4056,12286,12238],{"class":4066},[4056,12288,12289],{"class":4091},"\"2026-08-29T14:47:27Z\"",[4056,12291,12243],{"class":4066},[4056,12293,12294,12297,12299],{"class":4058,"line":10472},[4056,12295,12296],{"class":4267},"  \"retryAfterSeconds\"",[4056,12298,12238],{"class":4066},[4056,12300,12301],{"class":4077},"2847\n",[4056,12303,12304],{"class":4058,"line":10478},[4056,12305,4297],{"class":4066},[3813,12307,12308],{},[3770,12309,12310],{},"Пояснення заголовків:",[3746,12312,12313,12319,12325,12330,12336],{},[3749,12314,12315,12318],{},[3965,12316,12317],{},"Retry-After: 2847"," — через скільки секунд можна повторити запит (2847 сек = ~47 хвилин).",[3749,12320,12321,12324],{},[3965,12322,12323],{},"X-RateLimit-Limit: 100"," — максимальна кількість запитів у вікні (годині).",[3749,12326,12327,12329],{},[3965,12328,9129],{}," — скільки запитів залишилося (вичерпано).",[3749,12331,12332,12335],{},[3965,12333,12334],{},"X-RateLimit-Reset: 1693318047"," — Unix timestamp (секунди з 1970-01-01) моменту скидання ліміту.",[3749,12337,12338,12341],{},[3965,12339,12340],{},"X-RateLimit-Window: 3600"," — розмір вікна у секундах (3600 = 1 година).",[3813,12343,12344,12347],{},[3770,12345,12346],{},"Примітка:"," Стандарту для заголовків rate limiting не існує, але ці назви є найпоширенішими (використовуються GitHub, Twitter, Stripe).",[11619,12349,12351,12360],{"label":12350},"Питання 6: Обробка великих файлів",[3813,12352,12353,12355,12356,12359],{},[3770,12354,11626],{}," Клієнт завантажує відео файл розміром 500 МБ через ",[3965,12357,12358],{},"POST \u002Fapi\u002Fv1\u002Fvideos\u002Fupload",". Сервер підтримує ліміт 100 МБ. Який код статусу повинен повернути сервер? Напишіть RAW HTTP-відповідь з усіма необхідними заголовками.",[11644,12361,12362,12366,12507,12512,12533],{"label":11646},[3813,12363,12364],{},[3770,12365,4826],{},[4047,12367,12369],{"className":4049,"code":12368,"language":4051,"meta":4052,"style":4052},"HTTP\u002F1.1 413 Payload Too Large\nContent-Type: application\u002Fjson; charset=utf-8\nRetry-After: 3600\nContent-Length: 203\nDate: Sat, 29 Aug 2026 14:15:00 GMT\n\n{\n  \"error\": \"Payload Too Large\",\n  \"message\": \"File size exceeds maximum allowed size\",\n  \"maxSizeBytes\": 104857600,\n  \"maxSizeMB\": 100,\n  \"receivedSizeBytes\": 524288000,\n  \"receivedSizeMB\": 500,\n  \"suggestion\": \"Split video into chunks or compress before uploading\"\n}\n",[3965,12370,12371,12383,12391,12399,12408,12417,12421,12425,12435,12446,12458,12469,12481,12493,12503],{"__ignoreMap":4052},[4056,12372,12373,12375,12377,12379,12381],{"class":4058,"line":4059},[4056,12374,4071],{"class":4070},[4056,12376,4074],{"class":4066},[4056,12378,4184],{"class":4077},[4056,12380,8571],{"class":4077},[4056,12382,8574],{"class":4091},[4056,12384,12385,12387,12389],{"class":4058,"line":4081},[4056,12386,4026],{"class":4084},[4056,12388,4088],{"class":4070},[4056,12390,4852],{"class":4091},[4056,12392,12393,12395,12397],{"class":4058,"line":4095},[4056,12394,8587],{"class":4084},[4056,12396,4088],{"class":4070},[4056,12398,8592],{"class":4091},[4056,12400,12401,12403,12405],{"class":4058,"line":4105},[4056,12402,4108],{"class":4084},[4056,12404,4088],{"class":4070},[4056,12406,12407],{"class":4091}," 203\n",[4056,12409,12410,12412,12414],{"class":4058,"line":4116},[4056,12411,5688],{"class":4084},[4056,12413,4088],{"class":4070},[4056,12415,12416],{"class":4091}," Sat, 29 Aug 2026 14:15:00 GMT\n",[4056,12418,12419],{"class":4058,"line":4127},[4056,12420,4131],{"emptyLinePlaceholder":4130},[4056,12422,12423],{"class":4058,"line":4134},[4056,12424,12230],{"class":4066},[4056,12426,12427,12429,12431,12433],{"class":4058,"line":4681},[4056,12428,12235],{"class":4267},[4056,12430,12238],{"class":4066},[4056,12432,8607],{"class":4091},[4056,12434,12243],{"class":4066},[4056,12436,12437,12439,12441,12444],{"class":4058,"line":4711},[4056,12438,12248],{"class":4267},[4056,12440,12238],{"class":4066},[4056,12442,12443],{"class":4091},"\"File size exceeds maximum allowed size\"",[4056,12445,12243],{"class":4066},[4056,12447,12448,12451,12453,12456],{"class":4058,"line":4734},[4056,12449,12450],{"class":4267},"  \"maxSizeBytes\"",[4056,12452,12238],{"class":4066},[4056,12454,12455],{"class":4077},"104857600",[4056,12457,12243],{"class":4066},[4056,12459,12460,12463,12465,12467],{"class":4058,"line":4744},[4056,12461,12462],{"class":4267},"  \"maxSizeMB\"",[4056,12464,12238],{"class":4066},[4056,12466,12265],{"class":4077},[4056,12468,12243],{"class":4066},[4056,12470,12471,12474,12476,12479],{"class":4058,"line":4750},[4056,12472,12473],{"class":4267},"  \"receivedSizeBytes\"",[4056,12475,12238],{"class":4066},[4056,12477,12478],{"class":4077},"524288000",[4056,12480,12243],{"class":4066},[4056,12482,12483,12486,12488,12491],{"class":4058,"line":9365},[4056,12484,12485],{"class":4267},"  \"receivedSizeMB\"",[4056,12487,12238],{"class":4066},[4056,12489,12490],{"class":4077},"500",[4056,12492,12243],{"class":4066},[4056,12494,12495,12498,12500],{"class":4058,"line":10364},[4056,12496,12497],{"class":4267},"  \"suggestion\"",[4056,12499,12238],{"class":4066},[4056,12501,12502],{"class":4091},"\"Split video into chunks or compress before uploading\"\n",[4056,12504,12505],{"class":4058,"line":10373},[4056,12506,4297],{"class":4066},[3813,12508,12509],{},[3770,12510,12511],{},"Пояснення:",[3746,12513,12514,12520,12526],{},[3749,12515,12516,12519],{},[3770,12517,12518],{},"413 Payload Too Large"," — правильний код для ситуації, коли розмір тіла запиту перевищує ліміт сервера.",[3749,12521,12522,12525],{},[3770,12523,12524],{},"Retry-After: 3600"," — можна спробувати знову через годину (якщо ліміт тимчасовий, наприклад, щоденна квота). Якщо ліміт постійний, заголовок не обов'язковий.",[3749,12527,12528,12529,12532],{},"Тіло містить ",[3770,12530,12531],{},"детальну інформацію"," про ліміти та рекомендацію щодо виправлення (chunked upload, компресія).",[3813,12534,12535,12538,12540,12541,12543,12544,12547],{},[3770,12536,12537],{},"Альтернативний підхід:",[4021,12539],{},"\nВикористання заголовка ",[3965,12542,4013],{}," дозволяє клієнту ",[3770,12545,12546],{},"перевірити можливість завантаження"," перед відправкою великого файлу, економлячи пропускну здатність.",[3813,12549,11702],{},[3805,12551],{},[3808,12553,12555],{"id":12554},"додаткові-ресурси","Додаткові ресурси",[12007,12557,12558,12564,12570,12576],{},[3749,12559,12560,12563],{},[3770,12561,12562],{},"RFC 9110: HTTP Semantics"," — офіційна специфікація кодів статусу HTTP.",[3749,12565,12566,12569],{},[3770,12567,12568],{},"MDN Web Docs: HTTP Status Codes"," — детальна документація з прикладами.",[3749,12571,12572,12575],{},[3770,12573,12574],{},"httpstatuses.com"," — швидкий довідник кодів статусу з поясненнями.",[3749,12577,12578,12581],{},[3770,12579,12580],{},"REST API Design Best Practices"," — рекомендації щодо вибору кодів статусу у REST API.",[3953,12583,12584,7439,12587,12590],{},[3770,12585,12586],{},"Наступний розділ:",[9332,12588,3602],{"href":12589},".\u002Fhttp-headers"," — детальний огляд заголовків запитів і відповідей, кешування, CORS, автентифікації через заголовки.",[12592,12593,12594],"style",{},"html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .sKtos, html code.shiki .sKtos{--shiki-light:#800000;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .se1LK, html code.shiki .se1LK{--shiki-light:#CD3131;--shiki-default:#F44747;--shiki-dark:#F44747}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sLwNe, html code.shiki .sLwNe{--shiki-light:#0451A5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s0P7L, html code.shiki .s0P7L{--shiki-light:#800000;--shiki-default:#808080;--shiki-dark:#808080}html pre.shiki code .sa4r_, html code.shiki .sa4r_{--shiki-light:#E50000;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .su9tN, html code.shiki .su9tN{--shiki-light:#0000FF;--shiki-default:#CE9178;--shiki-dark:#CE9178}",{"title":4052,"searchDepth":4081,"depth":4081,"links":12596},[12597,12600,12606,12615,12624,12642,12650,12651,12659,12660,12661],{"id":3810,"depth":4081,"text":3811,"children":12598},[12599],{"id":3827,"depth":4095,"text":3828},{"id":3973,"depth":4081,"text":3974,"children":12601},[12602,12603,12604,12605],{"id":4003,"depth":4095,"text":4004},{"id":4300,"depth":4095,"text":4301},{"id":4483,"depth":4095,"text":4484},{"id":4525,"depth":4095,"text":4526},{"id":4764,"depth":4081,"text":4765,"children":12607},[12608,12609,12610,12611,12612,12613,12614],{"id":4778,"depth":4095,"text":4779},{"id":5048,"depth":4095,"text":5049},{"id":5264,"depth":4095,"text":5265},{"id":5594,"depth":4095,"text":5595},{"id":5612,"depth":4095,"text":5613},{"id":5779,"depth":4095,"text":5780},{"id":5797,"depth":4095,"text":5798},{"id":5986,"depth":4081,"text":5987,"children":12616},[12617,12618,12619,12620,12621,12622,12623],{"id":5999,"depth":4095,"text":6000},{"id":6017,"depth":4095,"text":6018},{"id":6150,"depth":4095,"text":6151},{"id":6277,"depth":4095,"text":6278},{"id":6489,"depth":4095,"text":6490},{"id":6705,"depth":4095,"text":6706},{"id":6835,"depth":4095,"text":6836},{"id":6884,"depth":4081,"text":6885,"children":12625},[12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641],{"id":6901,"depth":4095,"text":6902},{"id":7195,"depth":4095,"text":7196},{"id":7433,"depth":4095,"text":7434},{"id":7451,"depth":4095,"text":7452},{"id":7594,"depth":4095,"text":7595},{"id":7725,"depth":4095,"text":7726},{"id":7840,"depth":4095,"text":7841},{"id":7948,"depth":4095,"text":7949},{"id":7966,"depth":4095,"text":7967},{"id":8230,"depth":4095,"text":8231},{"id":8351,"depth":4095,"text":8352},{"id":8477,"depth":4095,"text":8478},{"id":8636,"depth":4095,"text":8637},{"id":8784,"depth":4095,"text":8785},{"id":8970,"depth":4095,"text":8971},{"id":9145,"depth":4095,"text":9146},{"id":9388,"depth":4081,"text":9389,"children":12643},[12644,12645,12646,12647,12648,12649],{"id":9405,"depth":4095,"text":9406},{"id":9533,"depth":4095,"text":9534},{"id":9649,"depth":4095,"text":9650},{"id":9842,"depth":4095,"text":9843},{"id":9969,"depth":4095,"text":9970},{"id":10094,"depth":4095,"text":10095},{"id":10384,"depth":4081,"text":10385},{"id":11034,"depth":4081,"text":11035,"children":12652},[12653,12654,12655,12656,12657,12658],{"id":11045,"depth":4095,"text":11046},{"id":11126,"depth":4095,"text":11127},{"id":11213,"depth":4095,"text":11214},{"id":11276,"depth":4095,"text":11277},{"id":11335,"depth":4095,"text":11336},{"id":11393,"depth":4095,"text":11394},{"id":11465,"depth":4081,"text":11466},{"id":11613,"depth":4081,"text":11614},{"id":12554,"depth":4081,"text":12555},"md",null,{},{"title":3598,"description":4052},"AQ1csBnvDe64ndU7inNm5Lz90tCOmPl5dYLZuI_Kry0",[12668,12669],{"title":3594,"path":3595,"stem":3596,"description":4052,"children":-1},{"title":3602,"path":3603,"stem":3604,"description":4052,"children":-1},1788070090478]