Sdílet prostřednictvím


Rozšířené databázové objekty v Tvůrci rozhraní Data API

Tvůrce rozhraní DATA API zahrnuje podporu zobrazení a uložených procedur jako alternativy mapování na databázové tabulky nebo kontejnery. Tyto jedinečné databázové objekty vyžadují vlastní konfiguraci pro bezproblémové mapování na koncové body REST nebo GraphQL. Pro použití tvůrce rozhraní Data API se zobrazeními a uloženými procedurami se vyžaduje určitá vlastní konfigurace.

Tento článek obsahuje rozpis použití zobrazení i uložených procedur s tvůrcem rozhraní Data API.

Zobrazení

Zobrazení se dají použít podobně jako tabulka v Tvůrci rozhraní Data API. Zobrazení použití musí být definováno zadáním zdrojového typu entity jako view. Spolu s tím, že musí být zadána vlastnost key-fields, aby tvůrce rozhraní Data API věděl, jak může v případě potřeby identifikovat a vrátit jednu položku.

Pokud máte zobrazení, například dbo.vw_books_details je možné ho zpřístupnit pomocí následujícího příkazu dab:

dab add BookDetail --source dbo.vw_books_details --source.type View --source.key-fields "id" --permissions "anonymous:read"

Poznámka

--source.key-fields je pro zobrazení povinná při generování konfigurace prostřednictvím rozhraní příkazového řádku.

Soubor dab-config.json by vypadal jako v následujícím příkladu:

"BookDetail": {
  "source": {
    "type": "view",
    "object": "dbo.vw_books_details",
    "key-fields": [ "id" ]
  },
  "permissions": [{
    "role": "anonymous",
    "actions": [ "read" ]
  }]
}

Poznámka

Mějte na paměti, že byste měli oprávnění nakonfigurovat odpovídajícím způsobem s možností zobrazení být aktualizovatelné nebo ne. Pokud zobrazení není možné aktualizovat, měli byste povolit přístup pro čtení jenom k entitě na základě tohoto zobrazení.

Podpora REST pro zobrazení

Zobrazení z hlediska REST se chová jako tabulka. Podporují se všechny operace REST.

Podpora GraphQL pro zobrazení

Zobrazení z pohledu GraphQL se chová jako tabulka. Podporují se všechny operace GraphQL.

Uložené procedury

Uložené procedury lze použít jako objekty související s entitami vystavenými tvůrcem rozhraní Data API. Použití uložené procedury musí být definováno určující, že typ zdroje pro entitu je stored-procedure.

Poznámka

Tvůrce rozhraní DATA API podporuje uložené procedury pro relační databáze (tj. MSSQL), ale ne pro nerelační databáze (tj. NoSQL).

Pokud máte uloženou proceduru, například dbo.stp_get_all_cowritten_books_by_author ji můžete vystavit pomocí následujícího příkazu dab:

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

Soubor dab-config.json by vypadal jako v následujícím příkladu:

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

parameters definuje, které parametry mají být zpřístupněny, a také poskytuje výchozí hodnoty, které se mají předat parametrům uložené procedury, pokud tyto parametry nejsou zadané v požadavku HTTP.

Omezení

  • Tvůrce rozhraní Data API používá pouze první sadu výsledků vrácenou uloženou procedurou.
  • Podporují se pouze uložené procedury, jejichž metadata pro první sadu výsledků popsanou sys.dm_exec_describe_first_result_set.
  • Pro koncové body REST i GraphQL: Pokud je parametr uložené procedury zadaný v konfiguračním souboru i v řetězci dotazu adresy URL, má přednost parametr v řetězci dotazu ADRESY URL.
  • Entity zálohované uloženou procedurou nemají všechny možnosti automaticky poskytované pro entity zálohované tabulkami, kolekcemi nebo zobrazeními.
    • Uložené entity zálohované procedurou nepodporují stránkování, řazení ani filtrování. Takové entity také nepodporují vracení položek určených hodnotami primárního klíče.
    • Autorizační pravidla na úrovni pole nebo parametru nejsou podporovaná.

Podpora REST pro uložené procedury

Chování koncového bodu REST pro entitu zálohovanou procedurou lze nakonfigurovat tak, aby podporovalo jednu nebo více příkazů HTTP (GET, POST, PUT, PATCH, DELETE). Část REST entity by vypadala jako v následujícím příkladu:

"rest": {
  "methods": [ "GET", "POST" ]
}

Všechny požadavky REST na entitu selžou s metodou HTTP 405 Není povolena, pokud se použije metoda HTTP, která není uvedená v konfiguraci. Například spuštění požadavku PUT selže s kódem chyby 405. Pokud je oddíl methods vyloučen z konfigurace REST entity, výchozí metoda POST je odvozena. Pokud chcete zakázat koncový bod REST pro tuto entitu, nakonfigurujte "rest": false a všechny požadavky REST na entitu uložené procedury selže s HTTP 404 Nenalezena.

Pokud uložená procedura přijímá parametry, je možné parametry předat v řetězci dotazu adresy URL při volání koncového bodu REST pomocí příkazu GET HTTP. Příklad:

GET http://<dab-server>/api/GetCowrittenBooksByAuthor?author=isaac%20asimov

Uložené procedury, které se spouští pomocí jiných příkazů HTTP, jako je POST, PUT, PATCH, DELETE, vyžadují předání parametrů jako JSON v textu požadavku. Příklad:

POST http://<dab-server>/api/GetCowrittenBooksByAuthor
{
  "author": "isaac asimov"
}

Podpora GraphQL pro uložené procedury

Spouštění uložených procedur v GraphQL je možné nakonfigurovat pomocí graphql možnosti uložené entity zálohované procedurou. Explicitní nastavení operace entity umožňuje reprezentovat uloženou proceduru ve schématu GraphQL způsobem, který odpovídá chování uložené procedury.

Poznámka

GraphQL vyžaduje, prvek dotazu, který se nachází ve schématu. Pokud vystavujete jenom uložené procedury, ujistěte se, že alespoň jeden z nich podporuje operaci query, jinak se zobrazí chyba GraphQL, jako je The object type Query has to at least define one field in order to be valid.

Nenastavování žádné hodnoty operace způsobí vytvoření operace mutation.

Pokud například použijete hodnotu query pro možnost operation, výsledkem je přeložit uložená procedura jako pole dotazu ve schématu GraphQL.

Použití rozhraní příkazového řádku:

dab add GetCowrittenBooksByAuthor --source dbo.stp_get_all_cowritten_books_by_author --source.type "stored-procedure" --source.params "searchType:s" --permissions "anonymous:execute" --rest.methods "GET" --graphql.operation "query"

Konfigurace modulu runtime:

"graphql": {
  "operation": "query"
}

Součásti schématu GraphQL: typ a pole dotazu:

type GetCowrittenBooksByAuthor {
  id: Int!
  title: String
}

Ve schématu mají operace dotazování i mutaci uložených procedur execute jako předponu. Pro předchozí uloženou proceduru by bylo executeGetCowrittenBooksByAuthorpřesné pole názvu dotazu vygenerované . Typ GraphQL, který se generuje, je:

type Query {
  executeGetCowrittenBooksByAuthor(
    searchType: String = "S"
  ): [GetCowrittenBooksByAuthor!]!
}

Alternativně lze operation nastavit na mutation tak, aby pole s mutací představovalo uloženou proceduru ve schématu GraphQL. Příkaz dab update lze použít ke změně operation:

dab update GetCowrittenBooksByAuthor --graphql.operation "mutation"

Konfigurace modulu runtime:

"graphql": {
  "operation": "mutation"
}

Schéma GraphQL, které se generuje, je:

type Mutation {
  executeGetCowrittenBooksByAuthor(
    searchType: String = "S"
  ): [GetCowrittenBooksByAuthor!]!
}

Pokud uložená procedura přijímá parametry, lze tyto parametry předat jako parametr dotazu nebo mutaci. Příklad:

query {
  executeGetCowrittenBooksByAuthor(author:"asimov")
   {
    id
    title
    pages
    year
  }
}
  • Referenční konfigurace
  • instalace rozhraní příkazového řádku