Använda lagrade procedurer i Data API Builder

Lagrade procedurer kan exponeras som REST- eller GraphQL-slutpunkter i DAB. Detta är användbart för scenarier som omfattar anpassad logik, filtrering, validering eller beräknade resultat som inte hanteras av enkla tabeller eller vyer.

Konfiguration

Så här exponerar du en lagrad procedur:

  • Ställ in source.type"stored-procedure"
  • Ange source.object till det fullständigt kvalificerade procedurnamnet
  • Definiera valfritt parameters med sina standardvärden, om det behövs
  • Ange rest.methods (till exempel "GET", "POST") eller rest: false
  • Ange graphql.operation till "query" eller "mutation", eller utelämna för att använda standardvärdet "mutation"
  • Bevilja behörighet med hjälp av "execute" åtgärden

CLI-exempel

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"

Konfigurationsexempel

"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-stöd

  • Stöder endast GET och POST
  • Standardvärdet är POST om methods utelämnas
  • Skickar parametrar via frågesträng med GET
  • Skickar parametrar via JSON-brödtext med POST
  • Inaktiverar REST för en lagrad procedur om "rest": false är inställt

Exempel begäranden

GET /api/GetCowrittenBooksByAuthor?author=asimov

POST /api/GetCowrittenBooksByAuthor

{
  "author": "asimov"
}

Stöd för GraphQL

  • Kräver graphql.operation att vara "query" eller "mutation"
  • Fälten är automatiskt fördefinierade med execute, till exempel executeGetCowrittenBooksByAuthor
  • Parametrar skickas som GraphQL-argument

Exempel på GraphQL

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

Begränsningar

  • Endast den första resultatuppsättningen returneras
  • Sidnumrering, filtrering och ordning stöds inte
  • Relationer stöds inte
  • Kräver metadata från sys.dm_exec_describe_first_result_set
  • Det går inte att returnera ett enskilt objekt efter nyckel
  • Ingen auktorisering på parameternivå