"Скользящее сжатие" по многим запросам API для извлечения общности в полезных нагрузках.

Я использую C# ASP.NET WEB API, поэтому я бы предпочел ответ, нацеленный на это, но общей теории было бы достаточно, так как этот метод может быть применен к любому языку.

Я думаю, что эту проблему можно решить с помощью сжатия или сериализации, я рад использовать либо / и то и другое, и пользовательские решения хороши, так как в этом случае и клиент, и сервер являются внутренними и контролируются мной.

Итак, мы знаем, что вы можете сжать общие части полезной нагрузки, используя что-то вроде GZIP. Однако это будет смотреть только на текущую полезную нагрузку, а не на предыдущую или на следующую.

В ответах моего api есть несколько форм, с изменением только некоторых полей на запрос для каждого клиента. Текущим типом контента является json (экспериментирует с другими, такими как protobuf), значения полей, которые изменяются для каждого клиента, являются данными клиента и запрашивают параметры, поступающие из общедоступного API.

Например, у меня будут тела ответов для "успеха", "ошибки сервера", "неверного запроса" и т. Д. В этих ответах, скажем, 20 полей, может быть по 2, являются динамическими (для типа ответа, для клиента).

Чтобы уменьшить размер полезной нагрузки между моими внутренними службами, в идеале я бы возвращал только тип ответа и динамические значения. Я бы хотел, чтобы это было выведено во время выполнения (т.е. не во время компиляции), поскольку существует много переменных, поэтому клиенту и серверу придется накопить общие знания о том, как упаковать / распаковать полезную нагрузку.

Я был бы счастлив с подходом, который начинается с отправки полной полезной нагрузки, а затем с течением времени, когда шаблон распознается, применяется "скользящее сжатие". Я рад пожертвовать серверной памятью для уменьшения размеров полезной нагрузки.

Я не могу просто сделать так, чтобы мой ответ включал тип и динамические поля (чтобы обойти эту сложность "скользящего сжатия"); поскольку этот ответ на самом деле представляет собой совокупность многих внутренних служб (он скрыт как одно большее сообщение для клиента), каждая служба может изменить свое поле, и в него каждые несколько месяцев добавляется больше служб. Различные сервисы вызываются на основе полей запроса клиента, поэтому типы ответов (т. Е. Для успеха) являются общими, только когда поля запроса одинаковы / похожи.

Таким образом, когда ответы API равны на 90% (для общего типа запроса); Как мне сжать эти 90% в "флаг", а затем добавить только оставшиеся 10%?

0 ответов

Другие вопросы по тегам