Condividi tramite


Uso di stored procedure in Generatore API dati

Le stored procedure possono essere esposte come endpoint REST o GraphQL in DAB. Ciò è utile per gli scenari che comportano logica personalizzata, filtro, convalida o risultati calcolati non gestiti da tabelle o viste semplici.

Configurazione

Per esporre una stored procedure:

  • Impostare source.type su "stored-procedure"
  • Impostare source.object sul nome completo qualificato della procedura
  • Definire le opzioni opzionali parameters con le loro impostazioni predefinite, se necessario
  • Impostare rest.methods (ad esempio, "GET", "POST") o rest: false
  • Impostare graphql.operation su "query" o "mutation"o omettere l'impostazione predefinita su "mutation"
  • Concedere l'autorizzazione usando l'azione "execute"

Esempio di 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"

Esempio di configurazione

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

Supporto REST

  • Supporta solo GET e POST
  • Il valore predefinito è POST se methods viene omesso
  • Invia parametri tramite stringa di query con GET
  • Invia parametri tramite il corpo JSON con POST
  • Disabilita REST per una stored procedure se "rest": false è impostata

Richieste di esempio

GET /api/GetCowrittenBooksByAuthor?author=asimov

POST /api/GetCowrittenBooksByAuthor

{
  "author": "asimov"
}

Supporto di GraphQL

  • Richiede graphql.operation che sia "query" o "mutation"
  • I campi sono preceduti automaticamente da execute, ad esempio executeGetCowrittenBooksByAuthor
  • I parametri vengono passati come argomenti GraphQL

Esempio di GraphQL

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

Limitazioni

  • Viene restituito solo il primo set di risultati
  • L'impaginazione, il filtro e l'ordinamento non sono supportati
  • Le relazioni non sono supportate
  • Richiede metadati da sys.dm_exec_describe_first_result_set
  • Non è possibile restituire un singolo elemento per chiave
  • Nessuna autorizzazione a livello di parametro