Compartilhar via


Usando procedimentos armazenados no construtor de API de Dados

Os procedimentos armazenados podem ser expostos como endpoints REST ou GraphQL no DAB. Isso é útil para cenários que envolvem lógica personalizada, filtragem, validação ou resultados computados não tratados por tabelas ou exibições simples.

Configuração

Para expor um procedimento armazenado:

  • Definir source.type como "stored-procedure"
  • Definir source.object como o nome do procedimento totalmente qualificado
  • Defina o parameters opcional com seus valores padrão, se necessário
  • Definir rest.methods (por exemplo, "GET", "POST") ou rest: false
  • Definir graphql.operation como "query" ou "mutation", ou omitir como padrão para "mutation"
  • Conceder permissão usando a ação "execute"

Exemplo da CLI

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"

Exemplo de configuração

"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" ]
    }
  ]
}

Suporte a REST

  • Dá suporte somente GET e POST
  • Define-se como padrão POST se methods for omitido.
  • Envia parâmetros por meio de cadeia de caracteres de consulta com GET
  • Envia parâmetros por meio do corpo JSON com POST
  • Desabilita REST para um procedimento armazenado se "rest": false estiver definido

Solicitações de exemplo

GET /api/GetCowrittenBooksByAuthor?author=asimov

POST /api/GetCowrittenBooksByAuthor

{
  "author": "asimov"
}

Suporte ao GraphQL

  • Requer que graphql.operation esteja "query" ou "mutation"
  • Os campos são prefixados automaticamente com execute, por exemplo, executeGetCowrittenBooksByAuthor
  • Parâmetros são passados como argumentos GraphQL

Exemplo de GraphQL

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

Limitações

  • Somente o primeiro conjunto de resultados é retornado
  • Não há suporte para paginação, filtragem e ordenação
  • Não há suporte para relações
  • Requer metadados de sys.dm_exec_describe_first_result_set
  • Não é possível retornar um único item por chave
  • Nenhuma autorização no nível do parâmetro