Sdílet prostřednictvím


Volání koncových bodů REST

Tvůrce rozhraní DAB (Data API Builder) poskytuje webové rozhraní RESTful, které umožňuje přístup k tabulkám, zobrazením a uloženým procedurami z připojené databáze. Každý vystavený databázový objekt je definován jako entita v konfiguraci modulu runtime.

Ve výchozím nastavení DAB hostuje koncové body REST na adrese:

https://{base_url}/api/{entity}

Poznámka:

U všech komponent cesty a parametrů dotazu se rozlišují malá a velká písmena.

Klíčová slova podporovaná v Tvůrci rozhraní Data API

Koncepce REST Purpose
Projekce $select Vyberte pole, která se mají vrátit
Filtrování $filter Omezení řádků podle podmínky
Řazení $orderby Definování pořadí řazení
Velikost stránky $first Omezení položek na stránku
Pokračování $after Pokračovat z poslední stránky

Základní struktura

Pokud chcete volat rozhraní REST API, vytvořte požadavek pomocí tohoto vzoru:

{HTTP method} https://{base_url}/{rest-path}/{entity}

Příklad čtení všech záznamů z book entity:

GET https://localhost:5001/api/book

Odpověď je objekt JSON s polem value . Stránkování a informace o chybách se zobrazí pouze v případě, že je to možné.

Poznámka:

Ve výchozím nastavení daB vrátí až 100 položek na dotaz, pokud není nakonfigurovaný jinak (runtime.pagination.default-page-size).

GET https://localhost:5001/api/book

Úspěch:

{
  "value": [
    { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
    { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
  ]
}

Úspěch se stránkováním:

{
  "value": [
    { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
    { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
  ],
  "nextLink": "https://localhost:5001/api/book?$after=WyJCb29rMiJd"
}

Prázdný výsledek (položka nebyla nalezena):

{
  "value": []
}

Poznámka:

Požadavek GET na neexistující primární klíč se vrátí 200 OK s prázdným value polem, nikoli 404 Not Found. Zkontrolujte prázdné pole a určete, jestli položka existuje.

Typy dotazů

Každá entita REST podporuje čtení kolekce i jednoho záznamu.

Operation Description
GET /api/{entity} Vrátí seznam záznamů.
GET /api/{entity}/{primary-key-column}/{primary-key-value} Vrátí jeden záznam podle primárního klíče.

Příklad vrácení jednoho záznamu:

GET /api/book/id/1010

Příklad vracející mnoho dat:

GET /api/book

Filtrování výsledků

Pomocí parametru $filter dotazu omezte, které záznamy se vrátí.

GET /api/book?$filter=title eq 'Foundation'

Tento dotaz vrátí všechny knihy, jejichž název je "Foundation."

Filtry můžou zahrnovat logické operátory pro složitější dotazy:

GET /api/book?$filter=year ge 1970 or title eq 'Dune'

Další informace najdete v referenci argumentu $filter.

Řazení výsledků

Parametr $orderby definuje způsob řazení záznamů.

GET /api/book?$orderby=year desc, title asc

Vrátí knihy seřazené podle year sestupně, pak podle title.

Další informace najdete v referenčním $orderby argumentu.

Omezení výsledků :{#first-and-after}

Parametr $first omezuje počet vrácených záznamů v jednom požadavku.

GET /api/book?$first=5

Tím se vrátí prvních pět knih seřazených podle primárního klíče ve výchozím nastavení. Můžete také použít $first=-1 k vyžádání nakonfigurované maximální velikosti stránky, která má výchozí hodnotu 100 položek. Tento limit nakonfigurujte v konfiguračním runtime.pagination.default-page-size souboru.

Další informace najdete v referenci $first argumentu.

Pokračování výsledků

Pokud chcete načíst další stránku, použijte $after s tokenem pro pokračování z předchozí odpovědi.

GET /api/book?$first=5&$after={continuation-token}

Token $after identifikuje, kde byl poslední dotaz ukončen. Další informace najdete v referenčním $after argumentu.

Výběr pole (projekce)

Pomocí $select určíte, která pole jsou zahrnuta v odpovědi.

GET /api/book?$select=id,title,price

Tím se vrátí pouze zadané sloupce. Pokud pole chybí nebo není přístupné, DAB vrátí 400 Bad Request.

Další informace najdete v referenčním $select argumentu.

Úprava dat

Rozhraní REST API také podporuje operace vytváření, aktualizace a odstraňování v závislosti na oprávněních entity.

Metoda Action
POST Vytvoření nové položky
PUT Nahrazení existující položky (nebo vytvoření, pokud chybí)
PATCH Aktualizace existující položky (nebo vytvoření, pokud chybí)
DELETE Odebrání položky podle primárního klíče

Důležité

Chování funkce upsert (insert-if-missing) u PUT a PATCH funguje pouze v případě, že databáze umožňuje explicitní hodnoty primárního klíče. U tabulek s automaticky vygenerovanými klíči (například IDENTITY sloupce v SQL Serveru nebo SERIAL v PostgreSQL) pokus o PATCH nebo 404 Not Found do neexistujícího klíče vrátí PUT, protože databáze odmítne explicitní vložení do automaticky generovaného sloupce. Použijte POST k vytváření záznamů v tabulkách s automaticky vygenerovanými klíči, nebo použijte bezklíčové operace PUT a PATCH k automatickému přiřazení klíčů systémem DAB.

Vytvoření nového záznamu

Slouží POST k vytvoření nové položky.

POST https://localhost:5001/api/book
Content-Type: application/json

{
  "id": 2000,
  "title": "Leviathan Wakes",
  "year": 2011,
  "pages": 577
}

Aktualizovat existující záznam

Slouží PATCH k aktualizaci konkrétních polí u existující položky.

PATCH https://localhost:5001/api/book/id/2000
Content-Type: application/json

{
  "id": 2000,
  "title": "Leviathan Wakes",
  "year": 2011,
  "pages": 577
}

Odstranění záznamu

Použijte DELETE k odebrání položky podle primárního klíče.

DELETE https://localhost:5001/api/book/id/2000

Pokročilé cesty REST s podadresáři

Poznámka:

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Cesty REST pro entity mohou zahrnovat lomítka k vytvoření segmentů adres URL ve stylu podadresáře. Tato konfigurace umožňuje pro vaše rozhraní API výraznější hierarchické struktury adres URL.

Nakonfigurujte cestu podadresáře ve vlastnosti entity rest.path :

{
  "entities": {
    "ShoppingCartItem": {
      "source": "dbo.ShoppingCartItem",
      "rest": {
        "path": "shopping-cart/item"
      }
    }
  }
}

Výsledkem této konfigurace je koncový bod:

GET /api/shopping-cart/item

Jazyk DAB používá pro směrování nejdelší porovnávání předpon, takže se před kratšími cestami shodují konkrétnější cesty. Kvůli bezpečnosti, ověřování blokuje vzory procházení cest (například ..), zpětná lomítka a oddělovače s procentovým kódováním.

Další informace najdete v konfiguraci cesty REST.

PUT a PATCH bez vyžadování klíčů pro automaticky generované primární klíče

Poznámka:

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

Pokud jsou všechny sloupce primárního klíče pro entitu automaticky generované (například IDENTITY sloupce v SQL Serveru), můžete odesílat PUT a PATCH požadavky bez zadání primárního klíče v adrese URL. DAB automaticky přiřazuje klíč během vkládání.

PUT /api/Book
Content-Type: application/json

{
  "title": "My New Book",
  "publisher_id": 1234
}

Tento požadavek vytvoří nový Book záznam s automaticky vygenerovaným primárním klíčem.

Pravidla pro operace bez klíčů

  • Všechny vynechané sloupce primárního klíče musí být automaticky vygenerovány. Pokud některý vynechaný klíčový sloupec není automaticky vygenerovaný, požadavek selže.
  • U složených primárních klíčů musíte do adresy URL zadat všechny negenerované části klíče, které nejsou automaticky generovány.
  • Tato funkce nemá vliv na uložené procedury. Nadále používají vlastní zpracování parametrů.
  • Dokument OpenAPI odráží bezklíčové operace na základní cestě entity (například PUT /api/Book bez klíčových segmentů).

Komprese odpovědí HTTP

Poznámka:

Funkce tvůrce rozhraní Data API 2.0 popsané v této části jsou aktuálně ve verzi Preview a můžou se změnit před obecnou dostupností. Další informace najdete v tématu Co je nového ve verzi 2.0.

DAB podporuje kompresi odpovědí HTTP, aby se snížily velikosti datových částí a zlepšily rychlost přenosu. Konfigurace komprese v runtime.compression části konfiguračního souboru:

{
  "runtime": {
    "compression": {
      "level": "optimal"
    }
  }
}

Dostupné úrovně komprese:

Úroveň Description
optimal Vyrovnává poměr komprese a rychlost (doporučeno pro většinu scénářů)
fastest Určuje prioritu rychlosti komprese oproti poměru.
none Zakáže kompresi.

Další informace o konfiguraci komprese naleznete v tématu Konfigurace komprese modulu runtime.