RESTful подход к огромному фильтрующему запросу - PullRequest
0 голосов
/ 27 февраля 2019

Я проектирую и внедряю конечную точку REST для извлечения и фильтрации больших объемов данных.Данные структурированы в сигналы и поступают из разных источников данных.Процесс фильтрации возвращает только указанные сигналы из указанных источников.Два сигнала из двух разных источников могут иметь одно и то же имя, поэтому их нельзя однозначно идентифицировать только по имени.

Вопрос в том, какой подход будет наиболее масштабируемым и RESTful?

Вещи Iрассмотрено:

  1. Выполнить запрос GET с двумя списками параметров в URL: списком имен сигналов и соответствующими им источниками ( sources = src1, src1 & сигналов= sig1, Sig2 ).Однако это приведет к очень длинной строке запроса.

  2. Выполните запрос GET с телом JSON, содержащим имена источников в качестве ключей и имен сигналовкак вектор ( {src1: [sig1, sig2]} ).Тем не менее, это нарушит передовые методы RESTful, поскольку у запроса GET не должно быть тела.

  3. Сделайте запрос POST стело представлено в 2. Однако у меня уже есть конечная точка GET для извлечения данных (однако без фильтрации), и мне нужно использовать то же самое.Я мог бы изменить запрос на POST , но было бы неправильно использовать POST для извлечения данных.

Другие ограничения:новые источники могут быть добавлены позже, поэтому я не могу просто использовать имя источника в качестве имени параметра запроса (также я уже использую другие параметры запроса) - но я мог бы легко перебирать ключи JSON.Есть также источники, которые не содержат сигналов, поэтому я должен иметь возможность включать их тоже (то же самое, если, например, клиент запрашивает все сигналы из источника).Наконец, база данных сигналов содержит около 30 000 сигналов, поэтому наихудший случай должен быть в состоянии охватить все это.

1 Ответ

0 голосов
/ 27 февраля 2019

Избегайте варианта 2, как вы указали, это не очень хорошая идея.Многие фреймворки API не позволят вам сделать это.Вы получаете все преимущества GET (идемпотентность, ясность, возможность закладок).Попытайтесь заставить его работать с этой опцией и, возможно, рассмотрите некоторые обходные пути, если это возможно.

Но, в конечном счете, не бойтесь переходить на POST, если вам действительно это нужно.Это не идеально, иногда вы не можете обойтись без соглашения.

...