Выбор поля (проекция) в REST

Проекция помогает возвращать только то, что ваш клиент действительно нуждается. Небольшие полезные данные повышают производительность, сокращают затраты на сеть и сокращают затраты на анализ на стороне клиента. Построитель ДАННЫХ (DAB) реализует проекцию REST с помощью $select параметра запроса.

Замечание

Имена параметров запроса REST (включая $select) чувствительны к регистру. Имена полей также чувствительны к регистру в зависимости от того, что вы настроили или предоставили.

Перейдите к версии GraphQL этого документа.

Базовый выбор

Рисунок

GET /api/{entity}?$select=FieldA,FieldB,FieldC

Если $select опущено, DAB возвращает все поля, которые вызывающая роль авторизована для чтения (субъект include и настройка и exclude разрешения на уровне полей). Нет подстановочного знака, например *, опущений о том, как запрашивать $select полную разрешенную фигуру.

Примеры

# Return all accessible fields
GET /api/author

# Return only first_name
GET /api/author?$select=first_name

# Return only first_name and last_name
GET /api/author?$select=first_name,last_name

Внутренние столбцы и столбцы ответа

Вам не требуется проектировать первичный ключ или поля упорядочивания. Если опущено, они не отображаются в ответе JSON. Однако DAB может получить дополнительные столбцы, необходимые для применения политик безопасности (фильтров на уровне строк, маски полей) и обработки курсоров разбиения на страницы ($after / nextLink).

Замечание

Эти внутренние извлекаемые столбцы удаляются перед ответом, если вы явно не запрашиваете их.

Example

GET /api/book?$select=id,title&$orderby=publisher_id desc&$first=5

Концептуальный SQL

SELECT TOP (6) -- first (5) + 1 probe row for paging
  [b].[id],
  [b].[sku_title] AS title
FROM dbo.books AS [b]
ORDER BY [b].[publisher_id] DESC, [b].[id] ASC;

Ответ

{
  "value": [
    { "id": 101, "title": "Example 1" },
    { "id": 77,  "title": "Example 2" },
    { "id": 42,  "title": "Example 3" },
    { "id": 33,  "title": "Example 4" },
    { "id": 5,   "title": "Example 5" }
  ],
  "nextLink": "..."
}

Дополнительные сведения о разбиении на страницы и ключевом слове after.

Дополнительные внутренние столбцы и шестая строка пробы не отображаются в полезных данных.

Хранимые процедуры

Для хранимых процедур, поддерживаемых сущностями, $select не интерпретируется как предложение проекции. Вместо этого пары "ключ-значение" строки запроса (кроме распознанных системных параметров, таких как $filter, $orderbyи т. д.), рассматриваются как параметры хранимой процедуры. $select не имеет эффекта; Результирующий набор процедуры определяет фигуру.

Пример конфигурации

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

См. также

Понятие REST GraphQL Цель
Projection $select items Выбор возвращаемых полей
Filtering $filter фильтр Ограничение строк по условию
Сортировка $orderby orderBy Определение порядка сортировки
Размер страницы $first first Ограничение количества элементов на страницу
Продолжение $after после Продолжить с последней страницы с помощью курсора

Замечание

Ключевые слова REST начинаются с $следующих соглашений OData.