Поделиться через


Вызов конечных точек REST

Построитель API данных (DAB) предоставляет веб-API RESTful, который позволяет получать доступ к таблицам, представлениям и хранимым процедурам из подключенной базы данных. Каждый предоставленный объект базы данных определяется как сущность в конфигурации среды выполнения.

По умолчанию DAB размещает конечные точки REST по адресу:

https://{base_url}/api/{entity}

Замечание

Все элементы пути и параметры запроса чувствительны к регистру.

Ключевые слова, поддерживаемые в построителе API данных

Концепция REST Purpose
Проекция $select Выберите возвращаемые поля
Фильтрация $filter Ограничение строк по условию
Сортировка $orderby Определение порядка сортировки
Размер страницы $first Ограничение элементов на страницу
Продолжение $after Продолжить с последней страницы

Базовая структура

Чтобы вызвать REST API, создайте запрос с помощью этого шаблона:

{HTTP method} https://{base_url}/{rest-path}/{entity}

Пример чтения всех записей из сущности book :

GET https://localhost:5001/api/book

Ответ представляет собой объект JSON с массивом value . Сведения об разбиении на страницы и ошибки отображаются только в том случае, если это применимо.

Замечание

По умолчанию DAB возвращает до 100 элементов на запрос, если не настроено в противном случае (runtime.pagination.default-page-size).

GET https://localhost:5001/api/book

Успех:

{
  "value": [
    { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
    { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
  ]
}

Успешный результат с разбивкой на страницы:

{
  "value": [
    { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
    { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
  ],
  "nextLink": "https://localhost:5001/api/book?$after=WyJCb29rMiJd"
}

Пустой результат (элемент не найден):

{
  "value": []
}

Замечание

Запрос GET для несуществующего первичного ключа возвращается 200 OK с пустым value массивом, а не 404 Not Found. Проверьте наличие пустого массива, чтобы определить, существует ли элемент.

Типы запросов

Каждая сущность REST поддерживает операции чтения как для коллекций, так и для отдельных записей.

Операция Описание
GET /api/{entity} Возвращает список записей
GET /api/{entity}/{primary-key-column}/{primary-key-value} Возвращает одну запись по первичному ключу

Пример возврата одной записи:

GET /api/book/id/1010

Пример возврата множества:

GET /api/book

Фильтрация результатов

$filter Используйте параметр запроса, чтобы ограничить возвращаемые записи.

GET /api/book?$filter=title eq 'Foundation'

Этот запрос возвращает все книги, название которых равно "Foundation".

Фильтры могут включать логические операторы для более сложных запросов:

GET /api/book?$filter=year ge 1970 or title eq 'Dune'

Дополнительные сведения см. в справочнике по аргументам $filter.

Сортировка результатов

Параметр $orderby определяет порядок сортировки записей.

GET /api/book?$orderby=year desc, title asc

Возвращаются книги, упорядоченные по year по убыванию, а затем по title.

Дополнительные сведения см. в справочнике по аргументам $orderby.

Ограничение результатов {#first-and-after}

Параметр $first ограничивает количество записей, возвращаемых в одном запросе.

GET /api/book?$first=5

Это возвращает первые пять книг, упорядоченных по первичному ключу по умолчанию. Вы также можете запросить $first=-1 настроенный максимальный размер страницы, который по умолчанию имеет значение 100 элементов. Настройте это ограничение с помощью runtime.pagination.default-page-size в файле конфигурации.

Дополнительные сведения см. в справочнике по аргументу $first.

Продолжение результатов

Чтобы загрузить следующую страницу, используйте $after и токен продолжения из предыдущего ответа.

GET /api/book?$first=5&$after={continuation-token}

Маркер $after определяет, где закончился последний запрос. Дополнительные сведения см. в справочнике по аргументам $after.

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

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

GET /api/book?$select=id,title,price

Возвращаются только указанные столбцы. Если поле отсутствует или недоступно, DAB возвращается 400 Bad Request.

Дополнительные сведения см. в справочнике по аргументам $select.

Изменение данных

REST API также поддерживает операции создания, обновления и удаления в зависимости от разрешений сущности.

Метод Действие
POST Создание нового элемента
PUT Замените существующий элемент (или создайте, если отсутствует)
PATCH Обновите существующий элемент (или создайте, если отсутствует)
DELETE Удалите элемент по первичному ключу

Это важно

Поведение PUT upsert (insert-if-missing) и PATCH работает только в том случае, если база данных разрешает явные значения первичного ключа. Для таблиц с автоматически созданными ключами (такими как IDENTITY в столбцах SQL Server или SERIAL в PostgreSQL), попытка PUT или PATCH несуществующего ключа возвращает 404 Not Found, потому что база данных отклоняет явные вставки в автоматически созданный столбец. Используйте POST для создания записей в таблицах с автоматически сгенерированными ключами или используйте PUT и PATCH без ключей, чтобы DAB автоматически назначил ключ.

Создание новой записи

Используется POST для создания нового элемента.

POST https://localhost:5001/api/book
Content-Type: application/json

{
  "id": 2000,
  "title": "Leviathan Wakes",
  "year": 2011,
  "pages": 577
}

Обновить существующую запись

Используется PATCH для обновления определенных полей в существующем элементе.

PATCH https://localhost:5001/api/book/id/2000
Content-Type: application/json

{
  "id": 2000,
  "title": "Leviathan Wakes",
  "year": 2011,
  "pages": 577
}

Удалить запись

Используйте DELETE, чтобы удалить элемент по первичному ключу.

DELETE https://localhost:5001/api/book/id/2000

Расширенные пути REST с подкаталогами

Замечание

Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.

Пути REST-сущностей могут включать косые черты для создания сегментов URL-адресов в стиле подкаталогов. Эта конфигурация обеспечивает более экспрессивные иерархические структуры URL-адресов для API.

Настройте путь подкаталога в свойстве сущности rest.path.

{
  "entities": {
    "ShoppingCartItem": {
      "source": "dbo.ShoppingCartItem",
      "rest": {
        "path": "shopping-cart/item"
      }
    }
  }
}

Эта конфигурация приводит к конечной точке:

GET /api/shopping-cart/item

DAB использует сопоставление по самому длинному префиксу для маршрутизации, поэтому более конкретные пути сопоставляются раньше, чем более короткие. Для обеспечения безопасности проверка блокирует шаблоны обхода пути, такие как .., а также обратные косые скобки и процентно-кодированные разделители.

Дополнительные сведения см. в конфигурации пути REST.

PUT и PATCH без ключа для автоматически сгенерированных первичных ключей

Замечание

Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.

Когда все столбцы первичного ключа для сущности создаются автоматически (например, IDENTITY столбцы в SQL Server), можно отправлять запросы PUT и PATCH без указания первичного ключа в URL-адресе. DAB автоматически назначает ключ во время вставки.

PUT /api/Book
Content-Type: application/json

{
  "title": "My New Book",
  "publisher_id": 1234
}

Этот запрос создает новую Book запись с автоматически созданным первичным ключом.

Правила для операций без ключей

  • Все опущенные столбцы первичного ключа должны быть автоматически сформированы. Если какой-либо опущенный ключевой столбец не создается автоматически, запрос завершается ошибкой.
  • Для составных первичных ключей необходимо по-прежнему предоставлять все не автоматически созданные части ключа в URL-адресе.
  • Хранимые процедуры не затрагиваются этой функцией. Они продолжают использовать собственную обработку параметров.
  • Документ OpenAPI отражает операции без ключа в пути базовой сущности (например, PUT /api/Book без ключевых сегментов).

Сжатие HTTP-ответа

Замечание

Функции построителя данных 2.0, описанные в этом разделе, находятся в предварительной версии и могут измениться до общедоступной доступности. Дополнительные сведения см. в статье "Новые возможности" версии 2.0.

DAB поддерживает сжатие ответов HTTP для уменьшения размера полезных данных и повышения скорости передачи. Настройте сжатие в runtime.compression разделе файла конфигурации:

{
  "runtime": {
    "compression": {
      "level": "optimal"
    }
  }
}

Доступные уровни сжатия:

Уровень Описание
optimal Балансирует коэффициент сжатия и скорость (рекомендуется для большинства сценариев)
fastest Приоритет отдаётся скорости сжатия, а не коэффициенту.
none Отключает сжатие

Дополнительные сведения о настройке сжатия см. в разделе конфигурации сжатия среды выполнения.