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


Использование хранимых процедур в построителе API данных

Хранимые процедуры могут быть представлены как конечные точки REST или GraphQL в DAB. Это полезно для сценариев, которые включают пользовательскую логику, фильтрацию, проверку или вычисляемые результаты, которые не обрабатываются простыми таблицами или представлениями.

Конфигурация

Чтобы открыть доступ к хранимой процедуре, выполните приведенные ниже действия.

  • Установите source.type на "stored-procedure"
  • Задайте source.object полное имя процедуры
  • При необходимости определите необязательные parameters со значениями по умолчанию.
  • Задать rest.methods (например, "GET", "POST") или rest: false
  • Установите graphql.operation на "query" или "mutation", или пропустите, чтобы установить значение по умолчанию "mutation".
  • Предоставление разрешения с помощью "execute" действия

Пример интерфейса командной строки

dab add GetCowrittenBooksByAuthor \
  --source dbo.stp_get_all_cowritten_books_by_author \
  --source.type "stored-procedure" \
  --source.params "searchType:default-value" \
  --permissions "anonymous:execute" \
  --rest.methods "get" \
  --graphql.operation "query"

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

"GetCowrittenBooksByAuthor": {
  "source": {
    "type": "stored-procedure",
    "object": "dbo.stp_get_all_cowritten_books_by_author",
    "parameters": {
      "searchType": "default-value"
    }
  },
  "rest": {
    "methods": [ "GET" ]
  },
  "graphql": {
    "operation": "query"
  },
  "permissions": [
    {
      "role": "anonymous",
      "actions": [ "execute" ]
    }
  ]
}

Поддержка REST

  • Поддерживает только GET и POST
  • POST по умолчанию, если methods опущено
  • Отправляет параметры с помощью строки запроса GET
  • Отправляет параметры в теле JSON с помощью POST
  • Отключает REST для хранимой процедуры, если "rest": false задано значение

Примеры запросов

GET /api/GetCowrittenBooksByAuthor?author=asimov

POST /api/GetCowrittenBooksByAuthor

{
  "author": "asimov"
}

Поддержка GraphQL

  • Требуется, чтобы graphql.operation было "query" или "mutation"
  • Поля автоматически префиксируются как execute, например, executeGetCowrittenBooksByAuthor
  • Параметры передаются в качестве аргументов GraphQL

Пример GraphQL

query {
  executeGetCowrittenBooksByAuthor(author: "asimov") {
    id
    title
  }
}

Ограничения

  • Возвращается только первый результирующий набор .
  • Разбиение на страницы, фильтрация и упорядочение не поддерживаются
  • Связи не поддерживаются
  • Требуется метаданные из sys.dm_exec_describe_first_result_set
  • Не удается вернуть один элемент по ключу
  • Авторизация на уровне параметров отсутствует