XML и YAML

Тема дорожной карты · Backend разработчик

XML (Extensible Markup Language) — текстовый формат сериализации данных, представляющий структурированные данные в иерархическом дереве вложенных тегов; несмотря на то что он в значительной мере вытеснен JSON для REST API, он остаётся незаменимым в корпоративных интеграциях, SOAP-веб-сервисах и документо-ориентированных рабочих процессах. XML-документ использует открывающие и закрывающие теги (<user><id>42</id><name>Alice</name></user>), поддерживает пространства имён для устранения неоднозначностей в сложных схемах и валидируется по XSD (XML Schema Definition) или DTD, обеспечивая строгие структурные гарантии, аналогичные JSON Schema. Бэкенд-разработчики разбирают XML в Java с помощью javax.xml.parsers.DocumentBuilder (DOM) или javax.xml.stream.XMLStreamReader (StAX для потоковой обработки больших документов), в Python — с lxml.etree или встроенным xml.etree.ElementTree, в Node.js — с библиотеками fast-xml-parser или xml2js. XML обеспечивает работу SOAP-корпоративных сервисов, где WSDL-файлы описывают контракт сервиса, является нативным форматом для SVG-графики, XSLT-преобразований, Maven pom.xml-файлов сборки и CRD Kubernetes-операторов, хранимых в etcd. Когда важна пропускная способность, многословность XML (накладные расходы атрибутов и тегов могут удвоить или утроить размер полезной нагрузки по сравнению с JSON) делает Protocol Buffers (Protobuf) или MessagePack предпочтительными альтернативами для высокопроизводительных микросервисов, тогда как XML остаётся правильным выбором там, где необходима самоописательность документа и богатая валидация схемы.

Как это работает

XML и YAML — что вы шлёте по сети и как кодируете: JSON (текст, читаем, повсеместный), Protobuf (бинарь, требует схему, дефолт gRPC), MessagePack (бинарь, JSON-like, меньше), CBOR (бинарь, IoT-friendly), XML (legacy, многословный), Avro (schema-evolving, big-data экосистема). Для конфига: YAML (удобно писать, хрупкие отступы), TOML (яснее YAML), JSON (точно, но уродливо для человека). Формат времени: ISO 8601 / RFC 3339 с явной таймзоной.

Когда применять

JSON — для публичных REST API: клиенты на любом языке его читают. Protobuf — для high-traffic internal RPC (меньше, быстрее, schema-versioned). Avro — для аналитических пайплайнов (Kafka + schema registry). Всегда указывайте кодировку (Content-Type: application/json; charset=utf-8). Datetime — UTC + ISO 8601, локаль клиент сам выставит. Никогда locale-зависимые числовые форматы (1,000 vs 1.000).

Типичные ошибки

Ловушки XML и YAML: тихо храните локальное время без таймзоны (DST-баги, off-by-N-часов навсегда); JSON без схемы — клиенты гадают, какие поля есть (OpenAPI / JSON Schema чинит); float для денег (используйте копейки как integer или decimal-тип); BOM-prefixed UTF-8 ломает парсеры; вера в порядок ключей JSON (нет гарантии).

Связанные понятия

Полезные ресурсы