Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Построитель 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 |
Отключает сжатие |
Дополнительные сведения о настройке сжатия см. в разделе конфигурации сжатия среды выполнения.