Partager via


Utilisation de procédures stockées dans le générateur d’API de données

Les procédures stockées peuvent être exposées en tant que points de terminaison REST ou GraphQL dans DAB. Cela est utile pour les scénarios qui impliquent une logique personnalisée, un filtrage, une validation ou des résultats calculés non gérés par des tables ou des vues simples.

Paramétrage

Pour exposer une procédure stockée :

  • Définir source.type sur "stored-procedure"
  • Définir source.object sur le nom de procédure entièrement qualifié
  • Définir l’optionnel parameters en utilisant ses valeurs par défaut, si nécessaire
  • Définir rest.methods (par exemple, "GET", "POST") ou rest: false
  • Définissez graphql.operation sur "query" ou "mutation", ou omettez pour revenir à "mutation"
  • Accorder une autorisation à l’aide de l’action "execute"

Exemple 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"

Exemple de configuration

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

Prise en charge REST

  • Prend en charge uniquement GET et POST
  • Défaut sur POST si methods est omis
  • Envoie des paramètres via une chaîne de requête avec GET
  • Envoie des paramètres via le corps JSON avec POST
  • Désactive REST pour une procédure stockée si "rest": false est défini

Exemples de requêtes

GET /api/GetCowrittenBooksByAuthor?author=asimov

POST /api/GetCowrittenBooksByAuthor

{
  "author": "asimov"
}

Prise en charge de GraphQL

  • Doit graphql.operation être "query" ou "mutation"
  • Les champs sont préfixés automatiquement avec execute, par exemple, executeGetCowrittenBooksByAuthor
  • Les paramètres sont passés en tant qu’arguments GraphQL

Exemple GraphQL

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

Limites

  • Seul le premier jeu de résultats est retourné
  • La pagination, le filtrage et l’ordre ne sont pas pris en charge
  • Les relations ne sont pas prises en charge
  • Nécessite des métadonnées à partir de sys.dm_exec_describe_first_result_set
  • Impossible de retourner un seul élément avec une clé
  • Aucune autorisation au niveau du paramètre