"Скользящее сжатие" по многим запросам API для извлечения общности в полезных нагрузках.
Я использую C# ASP.NET WEB API, поэтому я бы предпочел ответ, нацеленный на это, но общей теории было бы достаточно, так как этот метод может быть применен к любому языку.
Я думаю, что эту проблему можно решить с помощью сжатия или сериализации, я рад использовать либо / и то и другое, и пользовательские решения хороши, так как в этом случае и клиент, и сервер являются внутренними и контролируются мной.
Итак, мы знаем, что вы можете сжать общие части полезной нагрузки, используя что-то вроде GZIP. Однако это будет смотреть только на текущую полезную нагрузку, а не на предыдущую или на следующую.
В ответах моего api есть несколько форм, с изменением только некоторых полей на запрос для каждого клиента. Текущим типом контента является json (экспериментирует с другими, такими как protobuf), значения полей, которые изменяются для каждого клиента, являются данными клиента и запрашивают параметры, поступающие из общедоступного API.
Например, у меня будут тела ответов для "успеха", "ошибки сервера", "неверного запроса" и т. Д. В этих ответах, скажем, 20 полей, может быть по 2, являются динамическими (для типа ответа, для клиента).
Чтобы уменьшить размер полезной нагрузки между моими внутренними службами, в идеале я бы возвращал только тип ответа и динамические значения. Я бы хотел, чтобы это было выведено во время выполнения (т.е. не во время компиляции), поскольку существует много переменных, поэтому клиенту и серверу придется накопить общие знания о том, как упаковать / распаковать полезную нагрузку.
Я был бы счастлив с подходом, который начинается с отправки полной полезной нагрузки, а затем с течением времени, когда шаблон распознается, применяется "скользящее сжатие". Я рад пожертвовать серверной памятью для уменьшения размеров полезной нагрузки.
Я не могу просто сделать так, чтобы мой ответ включал тип и динамические поля (чтобы обойти эту сложность "скользящего сжатия"); поскольку этот ответ на самом деле представляет собой совокупность многих внутренних служб (он скрыт как одно большее сообщение для клиента), каждая служба может изменить свое поле, и в него каждые несколько месяцев добавляется больше служб. Различные сервисы вызываются на основе полей запроса клиента, поэтому типы ответов (т. Е. Для успеха) являются общими, только когда поля запроса одинаковы / похожи.
Таким образом, когда ответы API равны на 90% (для общего типа запроса); Как мне сжать эти 90% в "флаг", а затем добавить только оставшиеся 10%?