<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B8_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0</id>
	<title>Фильтрация и сортировка - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B8_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B8_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;action=history"/>
	<updated>2026-09-16T13:29:02Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B8_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=6540&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: « = Фильтрация и сортировка = Одна из общих функций, предоставляемых большинством сервисов, — это возможность возвращать список ресурсов через &#039;&#039;&#039;API&#039;&#039;&#039;. Эти ресурсы можно фильтровать и сортировать по различным критериям.  Рассмотрим примеры &#039;&#039;&#039;API&#039;&#039;&#039; реестра и...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B8_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=6540&amp;oldid=prev"/>
		<updated>2026-07-29T03:28:07Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « = Фильтрация и сортировка = Одна из общих функций, предоставляемых большинством сервисов, — это возможность возвращать список ресурсов через &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039;. Эти ресурсы можно фильтровать и сортировать по различным критериям.  Рассмотрим примеры &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; реестра и...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
= Фильтрация и сортировка =&lt;br /&gt;
Одна из общих функций, предоставляемых большинством сервисов, — это возможность возвращать список ресурсов через &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039;. Эти ресурсы можно фильтровать и сортировать по различным критериям.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим примеры &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; реестра и документов &amp;#039;&amp;#039;&amp;#039;AppEngine&amp;#039;&amp;#039;&amp;#039;. Конечная точка &amp;lt;code&amp;gt;/apps&amp;lt;/code&amp;gt; позволяет получить список всех установленных приложений, а конечная точка &amp;lt;code&amp;gt;/documents&amp;lt;/code&amp;gt; возвращает список всех доступных документов, как показано ниже:&lt;br /&gt;
&lt;br /&gt;
* Список приложений&lt;br /&gt;
* Список документов&lt;br /&gt;
&lt;br /&gt;
Используя возможности фильтрации и сортировки, предоставляемые этими &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039;, вы можете легко сузить область поиска и получить только ту информацию, которая соответствует вашим потребностям.&lt;br /&gt;
&lt;br /&gt;
= Сортировка =&lt;br /&gt;
Для сортировки списка можно использовать параметр запроса &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt;. Параметр &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; требует указания одного имени поля или списка имен полей, разделенных запятыми, определяющего порядок сортировки. Порядок имен полей в списке — слева направо, то есть первое имя поля является основным критерием сортировки, за ним следует второе, а затем следующее за ним поле.&lt;br /&gt;
&lt;br /&gt;
По умолчанию сортировка выполняется по возрастанию. Однако это можно изменить, добавив перед именем поля знак минус (&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;). В этом случае список будет отсортирован в порядке убывания на основе этого конкретного поля. Важно отметить, что сравнение строк для сортировки нечувствительно к регистру.&lt;br /&gt;
&lt;br /&gt;
Посмотрите на следующий вызов &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039;:&amp;lt;pre&amp;gt;GET …/problems?sort=status,-startTime,relevance&amp;lt;/pre&amp;gt;&amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; отсортирует элементы результатов сначала по &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; по возрастанию, затем по убыванию &amp;lt;code&amp;gt;startTime&amp;lt;/code&amp;gt; и, наконец, по возрастанию &amp;lt;code&amp;gt;relevance&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Фильтрация =&lt;br /&gt;
Вы можете использовать параметр запроса &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt;, если &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; поддерживает фильтрацию. По умолчанию выражение фильтра может ссылаться на любое поле в указанном ресурсе. Однако некоторые сервисы могут ограничивать поля, которые вы можете фильтровать.&lt;br /&gt;
&lt;br /&gt;
Отфильтрованный результат всегда представляет собой список, независимо от количества записей. Если результат пуст, это все равно считается успешным выполнением &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; с кодом ответа &amp;#039;&amp;#039;&amp;#039;HTTP 200 - Ok&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Формирование выражения фильтра ==&lt;br /&gt;
Для построения выражения фильтра используйте набор выражений на уровне полей в сочетании с логическими операторами. Поддерживаются следующие логические операторы: &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для группировки выражений также можно использовать скобки. Если скобки не используются, применяется стандартный порядок приоритета логических операторов, при этом &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; имеет приоритет над &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Общая форма выражения на уровне поля выглядит так: &amp;lt;code&amp;gt;&amp;amp;#x3C;Fieldname&amp;amp;#x3E; &amp;amp;#x3C;Operator&amp;amp;#x3E; &amp;amp;#x3C;Value&amp;amp;#x3E;&amp;lt;/code&amp;gt;. Давайте разберемся в них:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;#x3C;Fieldname&amp;amp;#x3E;&amp;lt;/code&amp;gt; — это имя поля, по которому вы хотите выполнить фильтрацию.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;#x3C;Operator&amp;amp;#x3E;&amp;lt;/code&amp;gt; — это оператор, определяющий, как должно выглядеть поле по сравнению с указанным значением.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;#x3C;Value&amp;amp;#x3E;&amp;lt;/code&amp;gt; — это значение, с которым сравнивается поле. В зависимости от типа фильтруемого поля, значение может быть строкой, датой/временем, числом или логическим значением.&lt;br /&gt;
&lt;br /&gt;
= Типы данных и операторы =&lt;br /&gt;
Ниже приведён список типов данных, поддерживаемых в выражении фильтра, а также операторы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Поддерживаемые операторы&lt;br /&gt;
!Представление&lt;br /&gt;
|-&lt;br /&gt;
|число (short, int, long, float, double)&lt;br /&gt;
|&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3C;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3C;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3E;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3E;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&lt;br /&gt;
|Целые числа: десятичная и шестнадцатеричная (с ведущим знаком &amp;lt;code&amp;gt;0x&amp;lt;/code&amp;gt;). Числа с плавающей запятой: научная запись с необязательным показателем степени &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Строка&lt;br /&gt;
|&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;starts-with&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ends-with&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&lt;br /&gt;
|Только одинарные кавычки: &amp;lt;code&amp;gt;&amp;#039;Hello World!&amp;#039;&amp;lt;/code&amp;gt;. Специальные символы (например, кавычки) предваряются символом &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;. Точные операторы &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt; регистр чувствительны к регистру. Неточные операторы &amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;starts-with&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;ends-with&amp;lt;/code&amp;gt; нечувствительны к регистру.&lt;br /&gt;
|-&lt;br /&gt;
|Логический&lt;br /&gt;
|&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;&lt;br /&gt;
|Сравнение с константами &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; только.&lt;br /&gt;
|-&lt;br /&gt;
|Дата/Время&lt;br /&gt;
|&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3C;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3C;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3E;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;#x3E;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&lt;br /&gt;
|Строка, соответствующая стандарту &amp;#039;&amp;#039;&amp;#039;ISO 8601&amp;#039;&amp;#039;&amp;#039;, в одном из следующих форматов:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;yyyy-MM-ddThh:mm:ss[+/-]hh:mm&amp;lt;/code&amp;gt; (например &amp;lt;code&amp;gt;2007-12-03T10:15:30+01:00&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;yyyy-MM-ddThh:mm:ss&amp;lt;/code&amp;gt; (например &amp;lt;code&amp;gt;2007-12-03T10:15:30&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;yyyy-MM-dd&amp;lt;/code&amp;gt; (например &amp;lt;code&amp;gt;2007-12-03&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;hh:mm:ss&amp;lt;/code&amp;gt; (например &amp;lt;code&amp;gt;10:15:30&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|Множество&lt;br /&gt;
|&amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;is-empty&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
* &amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt;: Сравнение с элементами, содержащимися в массиве, например, &amp;lt;code&amp;gt;&amp;#039;Hello World!&amp;#039;&amp;lt;/code&amp;gt; для массива строк.&lt;br /&gt;
* &amp;lt;code&amp;gt;is-empty&amp;lt;/code&amp;gt;: Проверяет, пуст ли массив.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Оператор &amp;#039;in&amp;#039; =&lt;br /&gt;
Его можно использовать для сравнения на равенство внутри постоянного списка возможных значений, который предоставляется оператором &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; имеет тип данных строка. Вместо того чтобы писать...&amp;lt;pre&amp;gt;name = &amp;#039;123&amp;#039; or name = &amp;#039;456&amp;#039; or name = &amp;#039;789&amp;#039;&amp;lt;/pre&amp;gt;вы можете написать&amp;lt;pre&amp;gt;name in(&amp;#039;123&amp;#039;,&amp;#039;456&amp;#039;,&amp;#039;789&amp;#039;)&amp;lt;/pre&amp;gt;Оператор поддерживается для всех типов данных, кроме логических (boolean). Вы можете использовать константу списка только справа от оператора &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;; вы не можете использовать её как поле типа данных list.&lt;br /&gt;
&lt;br /&gt;
Таким образом, это выражение недействительно:&amp;lt;pre&amp;gt;(&amp;#039;123&amp;#039;,&amp;#039;456&amp;#039;,&amp;#039;789&amp;#039;) contains &amp;#039;123&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Примеры =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /clients?filter=age=30&lt;br /&gt;
GET /clients?filter=firstName=&amp;#039;Konrad&amp;#039; and lastName=&amp;#039;Zuse&amp;#039;&lt;br /&gt;
GET /documents?filter=owner=&amp;#039;user1&amp;#039; and lastModified&amp;gt;=&amp;#039;2022-02-06T11:00:00Z&amp;#039;&lt;br /&gt;
GET /tenants?filter=tenantUuid starts-with &amp;#039;abc&amp;#039; and not(deleted=false or active=true)&lt;br /&gt;
GET /caches?filter=cacheHitRate&amp;lt;90.5&lt;br /&gt;
GET /locations?filter=distance&amp;gt;=1.0E4&lt;br /&gt;
GET /apps?filter=resourceStatus.subResourceTypes contains &amp;#039;FUNCTIONS&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Фильтрация полей и частичные результаты =&lt;br /&gt;
Некоторые сервисы по умолчанию могут возвращать только подмножество всех доступных полей ресурса, также известное как частичный результат. Это может быть полезно в определенных сценариях, чтобы избежать дорогостоящих фоновых операций и ненужного использования сетевой полосы пропускания.&lt;br /&gt;
&lt;br /&gt;
Если &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039; поддерживает частичные результаты, он принимает параметр запроса &amp;lt;code&amp;gt;add-fields&amp;lt;/code&amp;gt; для включения отсутствующих полей в ответ по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Фильтрация полей поддерживается только в &amp;#039;&amp;#039;&amp;#039;API&amp;#039;&amp;#039;&amp;#039;, которые отображают или получают данные о ресурсе.&lt;br /&gt;
&lt;br /&gt;
== Что следует помнить ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;add-fields&amp;lt;/code&amp;gt; принимает список имен полей, разделенных запятыми, которые добавляются к набору полей по умолчанию.&lt;br /&gt;
* Повторяющиеся поля в списке приводят к ошибке.&lt;br /&gt;
* Добавление полей, уже имеющихся в ответе по умолчанию, считается избыточным и игнорируется.&lt;br /&gt;
* Обращение к неизвестным полям приводит к ошибке.&lt;br /&gt;
* Точка разделяет вложенные имена полей.&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
В следующем примере вы получаете список сущностей. Результат включает поля по умолчанию.&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /entities&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;totalCount&amp;quot;: 72,&lt;br /&gt;
  &amp;quot;nextPageKey&amp;quot;: &amp;quot;…&amp;quot;,&lt;br /&gt;
  &amp;quot;entities&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;entityId&amp;quot;: &amp;quot;HOST-0004DD30F142D18C&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;В следующем примере вы используете &amp;lt;code&amp;gt;add-fields&amp;lt;/code&amp;gt; для добавления &amp;lt;code&amp;gt;lastSeenTms&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;properties.bitness&amp;lt;/code&amp;gt; в дополнение к результату по умолчанию, который вы можете увидеть в приведенном ниже результате:&amp;lt;pre&amp;gt;&lt;br /&gt;
GET /entities?add-fields=lastSeenTms,properties.bitness&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;totalCount&amp;quot;: 72,&lt;br /&gt;
  &amp;quot;nextPageKey&amp;quot;: &amp;quot;…&amp;quot;,&lt;br /&gt;
  &amp;quot;entities&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;entityId&amp;quot;: &amp;quot;HOST-0004DD30F142D18C&amp;quot;,&lt;br /&gt;
      &amp;quot;lastSeenTms&amp;quot;: 1615991063257,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: {&lt;br /&gt;
        &amp;quot;bitness&amp;quot;: &amp;quot;64&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>