Содержимое
С некоторым удивлением узнал о существовании бинарного XML: формата EXI (https://www.w3.org/TR/exi/) То есть, это такой Protobuf/AVRO, но из экосистемы XML. Работает примерно так же: подаете на вход схему XSD и документ XML, получаете на выходе байтовый поток. В принципе, можно схему не подавать, но она позволит лучше упаковать всякие сложные типы вроде даты или перечислений. Звучит просто. Внутри, как часто бывает с XML, нечеловечески сложные концепции: формальные обучающиеся грамматики, конечные автоматы, нужна ученая степень, чтобы разобраться. Ну и видно, что авторы угорали, когда разрабатывали спецификацию. Там даже есть специальный заголовок '$'.'E'.'X'.'I'! По размеру итоговый поток получается в 100 раз меньше, чем XML, и в 14 раз меньше, чем просто заархивированный GZIP'ом XML (в худших случаях — на 60% лучше обычного архиватора). Скорость обработки в среднем в 14.5 выше, чем обычного XML (в лучших случаях — в 250 раз!). Ну и скорость упаковки/распаковки тоже в десятки раз выше — за счет понимания структуры XML. Первый драфт вышел в 2007, последняя версия спецификации — в 2014, а в 2018 появились странные вещи типа EXI for JSON, который по некоторым замерам тоже жмет лучше, чем альтернативы. Protobuf вышел в 2008. Всё это мне напоминает конвергентную эволюцию, когда неродственные виды приобретают схожие черты при обитании в схожих условиях (то есть, решающих одну и ту же задачу). Ну и борьбу за экологическую нишу. Мы знаем, что EXI массово не используется, это место бинарного первого выбора занимает Protobuf. Когда освобождается какая-то ниша, представители каждого класса и отряда предлагают своих кандидатов. Так в Южной Америке роль копытных долго выполняли грызуны, а хищников — сухопутные длинноногие крокодилы и плотоядные нелетающие журавли. Бывают странности в изолированных экосистемах. Конкуренции они обычно не выдерживают, что и видно в случае Protobuf / EXI. Хотя в отдельных изолятах могут и сейчас использоваться (и EXI применяется!) А разговоры про переход на JSON каких-нибудь 2009-2010 годов напоминают нынешние разговоры про GraphQL. Ну вы посмотрите на этот JSON! Ведь не пойми что: схемы нет, безопасности нет, стандартного протокола вызова нет, зачем туда идти? (Характерная цитата из обсуждения: 'There are also a range of protocols/standards that are built on top of XML, such as SOAP, XML-Signature, XML-Encryption, WS-Security, SAML, etc. This does not exist for JSON.'). А вот ещё подождем немного, EXI включат в набор инструментов SOAP, и тогда заживем. Ну реально — мог бы появиться свой gRPC на основе XML. Never happend. Многие виды в изолированных экосистемах не выдерживают конкуренции с более приспособленными.