Ответ 1
В общем, нет. Чем более популярным API и, тем больше потенциальными потребителями API, тем более инвариантным должен быть API.
- Разработчики, начинающие работу с API, путаются, когда поле появляется несколько раз, но не в другое время. Это приводит к разочарованию и, в конечном счете, отнимает время API-интерфейса в виде запросов на поддержку.
- Невозможно точно узнать, как пользователи по нисходящей линии используют API. Часто они не используют его так, как воображает разработчик API. Элементы, которые появляются или исчезают в зависимости от контекста, могут нарушать приложения, которые потребляют API. Разработчик API обычно не знает, когда было нарушено нисходящее приложение, за исключением жалоб от разработчиков, работающих ниже по течению.
- Когда элементы данных появляются или исчезают, вводится неопределенность. Был ли элемент данных отправлен не потому, что API считал его неактуальным? Или изменился API? Или есть некоторая ошибка в коде потребителя, не правильно разбирающая ответ? Если потребитель ожидает поля, а его нет, как он отлаживается?
- На стороне сервера необходим дополнительный код, чтобы вычеркнуть эти поля из ответа. Что делать, если логика, чтобы исключить данные? Это шанс ввести дефекты, и это означает, что существует больше кода, который должен поддерживаться.
Во многих приложениях латентность сети является доминирующим фактором, а не полосой пропускания. По соображениям производительности многие разработчики API будут одобрять несколько больших запросов/ответов по многим небольшим запросам/ответам. В моей последней компании системы продаж и биллинга будут регулярно обмениваться сообщениями в 100 КБ, 200 КБ или более. Иногда требовалось лишь несколько килобайт данных. Но общая производительность системы была лучше, чем выборка некоторых данных, поэтому было обнаружено, что больше было необходимо отправить дополнительный запрос для этих данных.
Для большинства приложений некоторая несогласованность более опасна, чем избыточные данные являются расточительными.
Как всегда, существует миллион исключений. Я когда-то брал интервью у работы на станции торпеды. У них были подводные датчики на их огневой дистанции для отслеживания торпед. Все данные датчиков передавались через акустические модемы в центральный подводный сборщик данных. Акустические подводные модемы? Да. При 300 бодах каждый байт подсчитывает.
Существуют встроенные приложения с батарейным питанием, в которых учитываются каждый байт, а также низкочастотные системы радиосвязи.
Другим исключением являются редкие данные. Например, представьте себе матрицу с 4 000 000 строк и 10 000 столбцов, где 99,99% значений матрицы равны нулю. Матрица должна быть представлена с разреженной структурой данных, которая не включает нули.