Host-REST-Endpunkte im Daten-API-Generator
Der Daten-API-Generator bietet eine RESTful-Web-API, mit der Sie auf Tabellen, Ansichten und gespeicherte Prozeduren aus einer verbundenen Datenbank zugreifen können. Entitäten stellen ein Datenbankobjekt in der Laufzeitkonfiguration des Daten-API-Generators dar. Eine Entität muss in der Laufzeitkonfiguration festgelegt werden, damit sie auf dem REST-API-Endpunkt verfügbar ist.
Aufrufen einer REST-API-Methode
Um aus einer Ressource (oder Entität) zu lesen oder in eine Entität zu schreiben, erstellen Sie eine Anforderung mit dem folgenden Muster:
{HTTP method} https://{base_url}/{rest-path}/{entity}
Anmerkung
Bei allen Komponenten des URL-Pfads, einschließlich Entitäten und Abfrageparametern, wird die Groß-/Kleinschreibung beachtet.
Zu den Komponenten einer Anforderung gehören:
Beschreibung | |
---|---|
{HTTP method} |
Die HTTP-Methode, die für die Anforderung an den Daten-API-Generator verwendet wird |
{base_url} |
Die Domäne (oder localhost-Server und -Port), die eine Instanz des Daten-API-Generators hosten |
{rest-path} |
Der Basispfad des REST-API-Endpunktsatzes in der Laufzeitkonfiguration |
{entity} |
Der Name des Datenbankobjekts gemäß definition in der Laufzeitkonfiguration |
Hier ist eine Beispiel-GET-Anforderung für die book
Entität, die sich unter der REST-Endpunktbasis befindet, /api
in einer lokalen Entwicklungsumgebung localhost
:
GET https:/localhost:5001/api/Book
HTTP-Methoden
Der Daten-API-Generator verwendet die HTTP-Methode für Ihre Anforderung, um zu bestimmen, welche Aktion für die angegebene Entität der Anforderung ausgeführt werden soll. Die folgenden HTTP-Verben sind verfügbar, abhängig von den Berechtigungen, die für eine bestimmte Entität festgelegt sind.
Methode | Beschreibung |
---|---|
GET |
Abrufen von Null, mindestens einem Element |
POST |
Erstellen eines neuen Elements |
PATCH |
Aktualisieren Sie ein Element mit neuen Werten, falls vorhanden. Andernfalls erstellen Sie ein neues Element |
PUT |
Ersetzen Sie ein Element durch ein neues Element, falls vorhanden. Andernfalls erstellen Sie ein neues Element |
DELETE |
Löschen eines Elements |
Restpfad
Der Restpfad bestimmt den Speicherort der REST-API des Daten-API-Generators. Der Pfad ist in der Laufzeitkonfiguration konfigurierbar und standardmäßig auf /apifestgelegt. Weitere Informationen finden Sie unter REST-Pfadkonfiguration.
Entität
Entity ist die Terminologie, die verwendet wird, um auf eine REST-API-Ressource im Data-API-Builder zu verweisen. Standardmäßig ist der URL-Routenwert für eine Entität der in der Laufzeitkonfiguration definierte Entitätsname. Der REST-URL-Pfadwert einer Entität kann innerhalb der REST-Einstellungen der Entität konfiguriert werden. Weitere Informationen finden Sie unter Entitätskonfiguration.
Resultsetformat
Das zurückgegebene Ergebnis ist ein JSON-Objekt mit diesem Format:
{
"value": []
}
Die Elemente im Zusammenhang mit der angeforderten Entität sind im value
Array verfügbar. Zum Beispiel:
{
"value": [
{
"id": 1000,
"title": "Foundation"
},
{
"id": 1001,
"title": "Foundation and Empire"
}
]
}
Anmerkung
Standardmäßig werden nur die ersten 100 Elemente zurückgegeben.
ERHALTEN
Mit der GET-Methode können Sie ein oder mehrere Elemente der gewünschten Entität abrufen.
URL-Parameter
REST-Endpunkte ermöglichen es Ihnen, ein Element anhand von URL-Parametern anhand seines Primärschlüssels abzurufen. Für Entitäten mit einem einzelnen Primärschlüssel ist das Format einfach:
GET /api/{entity}/{primary-key-column}/{primary-key-value}
Um ein Buch mit einer ID von 1001
abzurufen, verwenden Sie Folgendes:
GET /api/book/id/1001
Bei Entitäten mit zusammengesetzten Primärschlüsseln, bei denen mehrere Spalten verwendet werden, um einen Datensatz eindeutig zu identifizieren, enthält das URL-Format alle Schlüsselspalten in Sequenz:
GET /api/{entity}/{primary-key-column1}/{primary-key-value1}/{primary-key-column2}/{primary-key-value2}
Wenn eine books
Entität einen zusammengesetzten Schlüssel aufweist, der aus id1
und id2
besteht, würden Sie ein bestimmtes Buch wie folgt abrufen:
GET /api/books/id1/123/id2/abc
Zum Beispiel:
So sieht ein Anruf aus:
### Retrieve a book by a single primary key
GET /api/book/id/1001
### Retrieve an author by a single primary key
GET /api/author/id/501
### Retrieve a book by compound primary keys (id1 and id2)
GET /api/books/id1/123/id2/abc
### Retrieve an order by compound primary keys (orderId and customerId)
GET /api/orders/orderId/789/customerId/456
### Retrieve a product by compound primary keys (categoryId and productId)
GET /api/products/categoryId/electronics/productId/987
### Retrieve a course by compound primary keys (departmentCode and courseNumber)
GET /api/courses/departmentCode/CS/courseNumber/101
Abfrageparameter
REST-Endpunkte unterstützen die folgenden Abfrageparameter (Groß-/Kleinschreibung beachten), um die zurückgegebenen Elemente zu steuern:
-
$select
: Gibt nur die ausgewählten Spalten zurück. -
$filter
: filtert die zurückgegebenen Elemente. -
$orderby
: definiert, wie die zurückgegebenen Daten sortiert werden -
$first
und$after
: Gibt nur die oberstenn
Elemente zurück.
Abfrageparameter können zusammen verwendet werden.
$select
Der Abfrageparameter $select
ermöglicht es, die Felder zu spezifizieren, die zurückgegeben werden müssen. Zum Beispiel:
### Get all fields
GET /api/author
### Get only first_name field
GET /api/author?$select=first_name
### Get only first_name and last_name fields
GET /api/author?$select=first_name,last_name
Anmerkung
Wenn eines der angeforderten Felder nicht vorhanden ist oder aufgrund von konfigurierten Berechtigungen nicht darauf zugegriffen werden kann, wird eine 400 - Bad Request
zurückgegeben.
Der $select
Abfrageparameter, auch als "Projektion" bezeichnet, wird verwendet, um die Größe der in einer API-Antwort zurückgegebenen Daten zu steuern. Mit nur benötigten Spalten reduziert $select
die Nutzlastgröße, wodurch die Leistung verbessert werden kann, indem die Analysezeit minimiert, die Bandbreitennutzung reduziert und die Datenverarbeitung beschleunigt wird. Diese Optimierung erstreckt sich auf die Datenbank. Dort werden nur die angeforderten Spalten abgerufen.
$filter
Der Wert der Option $filter
ist ein Prädikatausdruck (ein Ausdruck, der ein boolesches Ergebnis zurückgibt) mithilfe der Felder der Entität. Nur Elemente, bei denen der Ausdruck als "True" ausgewertet wird, werden in der Antwort enthalten. Zum Beispiel:
### Get books titled "Hyperion" (Equal to)
GET /api/book?$filter=title eq 'Hyperion'
### Get books not titled "Hyperion" (Not equal to)
GET /api/book?$filter=title ne 'Hyperion'
### Get books published after 1990 (Greater than)
GET /api/book?$filter=year gt 1990
### Get books published in or after 1990 (Greater than or equal to)
GET /api/book?$filter=year ge 1990
### Get books published before 1991 (Less than)
GET /api/book?$filter=year lt 1991
### Get books published in or before 1990 (Less than or equal to)
GET /api/book?$filter=year le 1990
### Get books published between 1980 and 1990 (Logical and)
GET /api/book?$filter=year ge 1980 and year le 1990
### Get books published before 1960 or titled "Hyperion" (Logical or)
GET /api/book?$filter=year le 1960 or title eq 'Hyperion'
### Get books not published before 1960 (Logical negation)
GET /api/book?$filter=not (year le 1960)
### Get books published in 1970 or later, and either titled "Foundation" or with more than 400 pages (Grouping)
GET /api/book?$filter=(year ge 1970 or title eq 'Foundation') and pages gt 400
Die von der Option "$filter
" unterstützten Operatoren sind:
Operator | Art | Beschreibung | Beispiel |
---|---|---|---|
eq |
Vergleich | Gleich | title eq 'Hyperion' |
ne |
Vergleich | Ungleich | title ne 'Hyperion' |
gt |
Vergleich | Größer als | year gt 1990 |
ge |
Vergleich | Größer oder gleich | year ge 1990 |
lt |
Vergleich | Weniger als | year lt 1990 |
le |
Vergleich | Kleiner oder gleich | year le 1990 |
and |
Logisch | Logisch und | year ge 1980 and year lt 1990 |
or |
Logisch | Logisch oder | year le 1960 or title eq 'Hyperion' |
not |
Logisch | Logische Negation | not (year le 1960) |
( ) |
Gruppierung | Rangfolgegruppierung | (year ge 1970 or title eq 'Foundation') and pages gt 400 |
Anmerkung
$filter
ist ein groß- und kleinschreibungssensitives Argument.
Der $filter
Abfrageparameter im Azure Data API Builder erinnert möglicherweise einige Benutzer an OData, und das liegt daran, dass er direkt von den Filterfunktionen von OData inspiriert wurde. Die Syntax ist nahezu identisch, sodass Entwickler, die bereits mit OData vertraut sind, die Verwendung erleichtern. Diese Ähnlichkeit war beabsichtigt, um eine vertraute und leistungsstarke Möglichkeit zum Filtern von Daten über verschiedene APIs zu bieten.
$orderby
Der Wert des orderby
-Parameters ist eine durch Trennzeichen getrennte Liste von Ausdrücken, die zum Sortieren der Elemente verwendet werden.
Jeder Ausdruck im Wert des orderby
-Parameters kann, um eine absteigende Reihenfolge anzufordern, das Suffix desc
enthalten, mit einem oder mehreren Leerzeichen vom Ausdruck getrennt.
Zum Beispiel:
### Order books by title in ascending order
GET /api/book?$orderby=title
### Order books by title in ascending order
GET /api/book?$orderby=title asc
### Order books by title in descending order
GET /api/book?$orderby=title desc
### Order books by year of publication in ascending order, then by title in ascending order
GET /api/book?$orderby=year asc, title asc
### Order books by year of publication in descending order, then by title in ascending order
GET /api/book?$orderby=year desc, title asc
### Order books by number of pages in ascending order, then by title in descending order
GET /api/book?$orderby=pages asc, title desc
### Order books by title in ascending order, then by year of publication in descending order
GET /api/book?$orderby=title asc, year desc
Anmerkung
$orderBy
ist ein schreibungsabhängiges Argument.
Der $orderby
Abfrageparameter ist nützlich, um Daten direkt auf dem Server zu sortieren, die auch auf clientseitiger Seite problemlos verarbeitet werden können. Es wird jedoch nützlich, wenn es mit anderen Abfrageparametern kombiniert wird, z. B. $filter
und $first
. Mit dem Parameter kann die Paginierung ein stabiles und vorhersagbares Dataset beibehalten, während Sie durch große Auflistungen paginieren.
$first
und $after
Der $first
Abfrageparameter beschränkt die Anzahl der in einer einzelnen Anforderung zurückgegebenen Elemente. Zum Beispiel:
GET /api/book?$first=5
Diese Anforderung gibt die ersten fünf Bücher zurück. Der $first
Abfrageparameter im Azure Data API Builder ähnelt der TOP
-Klausel in SQL. Beide werden verwendet, um die Anzahl der von einer Abfrage zurückgegebenen Datensätze einzuschränken. Genau wie TOP
in SQL es Ihnen ermöglicht, die Anzahl der abzurufenden Zeilen anzugeben, können Sie mit $first
die Anzahl der von der API zurückgegebenen Elemente steuern.
$first
ist nützlich, wenn Sie eine kleine Teilmenge von Daten abrufen möchten, z. B. die ersten 10 Ergebnisse, ohne das gesamte Dataset abzurufen. Der Hauptvorteil ist die Effizienz, da sie die Menge der übertragenen und verarbeiteten Daten reduziert.
Anmerkung
Im Azure Data API Builder ist die Anzahl der standardmäßig zurückgegebenen Zeilen durch eine Einstellung in der Konfigurationsdatei beschränkt. Benutzer können diesen Grenzwert mithilfe des $first
Parameters außer Kraft setzen, um weitere Zeilen anzufordern, aber es gibt weiterhin eine konfigurierte maximale Anzahl von Zeilen, die insgesamt zurückgegeben werden können. Darüber hinaus gibt es ein Limit für die Gesamten Megabytes, die in einer einzigen Antwort zurückgegeben werden können, die auch konfigurierbar ist.
Wenn mehr Elemente über den angegebenen Grenzwert hinaus verfügbar sind, enthält die Antwort eine nextLink
Eigenschaft:
{
"value": [],
"nextLink": "dab-will-generate-this-continuation-url"
}
Die nextLink
kann mit dem $after
-Abfrageparameter verwendet werden, um die nächste Gruppe von Elementen abzurufen.
GET /api/book?$first={n}&$after={continuation-data}
Bei diesem Fortsetzungsansatz wird die cursorbasierte Paginierung verwendet. Ein eindeutiger Cursor ist ein Verweis auf ein bestimmtes Element im Dataset, das bestimmt, wo die Daten im nächsten Satz weiterhin abgerufen werden sollen. Im Gegensatz zur Index-Paginierung, die Offsets oder Indizes verwendet, basiert die Cursor-basierte Paginierung nicht auf dem Überspringen von Datensätzen. Die Cursorfortsetzung macht sie mit großen Datasets oder häufig geänderten Daten zuverlässiger. Stattdessen wird ein reibungsloser und konsistenter Datenabruf sichergestellt, indem die letzte Abfrage basierend auf dem bereitgestellten Cursor genau dort gestartet wird, wo die letzte Abfrage unterbrochen wurde.
Zum Beispiel:
### Get the first 5 books explicitly
GET /api/book?$first=5
### Get the next set of 5 books using the continuation token
GET /api/book?$first=5&$after={continuation-token}
### Get the first 10 books, ordered by title
GET /api/book?$first=10&$orderby=title asc
### Get the next set of 10 books after the first set, ordered by title
GET /api/book?$first=10&$after={continuation-token}&$orderby=title asc
### Get books without specifying $first (automatic pagination limit)
GET /api/book
### Get the next set of books using the continuation token without specifying $first
GET /api/book?$after={continuation-token}
BEREITSTELLEN
Erstellen Sie ein neues Element für die angegebene Entität. Zum Beispiel:
POST /api/book
Content-type: application/json
{
"id": 2000,
"title": "Do Androids Dream of Electric Sheep?"
}
Die POST-Anforderung erstellt ein neues Buch. Alle Felder, die nicht nullfähig sein können, müssen angegeben werden. Bei erfolgreicher Ausführung des vollständigen Entitätsobjekts, einschließlich aller NULL-Felder, wird Folgendes zurückgegeben:
{
"value": [
{
"id": 2000,
"title": "Do Androids Dream of Electric Sheep?",
"year": null,
"pages": null
}
]
}
STELLEN
PUT erstellt oder ersetzt ein Element der angegebenen Entität. Das Abfragemuster lautet:
PUT /api/{entity}/{primary-key-column}/{primary-key-value}
Zum Beispiel:
PUT /api/book/id/2001
Content-type: application/json
{
"title": "Stranger in a Strange Land",
"pages": 525
}
Wenn ein Element mit dem angegebenen Primärschlüssel 2001
vorhanden ist, werden die bereitgestellten Daten dieses Element vollständig ersetzt. Wenn stattdessen ein Element mit diesem Primärschlüssel nicht vorhanden ist, wird ein neues Element erstellt.
In beiden Fällen ist das Ergebnis etwa wie folgt:
{
"value": [
{
"id": 2001,
"title": "Stranger in a Strange Land",
"year": null,
"pages": 525
}
]
}
Der If-Match: *
HTTP-Anforderungsheader
Der HTTP-Header If-Match: *
stellt sicher, dass ein Aktualisierungsvorgang ausgeführt wird,nur ausgeführt wird, wenn die Ressourcevorhanden ist. Wenn die Ressource nicht vorhanden ist, schlägt der Vorgang mit HTTP-Statuscode fehl: 404 Not Found
. Wenn der If-Match
-Header weggelassen wird, besteht das Standardverhalten darin, einen Upsertauszuführen, der die Ressource erstellt, wenn sie noch nicht vorhanden ist.
Beispiel:
PUT /api/Books/2001 HTTP/1.1
If-Match: *
Content-Type: application/json
{
"title": "Stranger in a Strange Land",
"pages": 525
}
Anmerkung
Wenn Sie einen anderen Wert als *
im If-Match
-Header angeben, gibt der Daten-API-Generator einen 400 Bad Request
Fehler zurück, da der ETag-basierte Abgleich nicht unterstützt wird.
FLICKEN
PATCH erstellt oder aktualisiert das Element der angegebenen Entität. Nur die angegebenen Felder sind betroffen. Alle im Anforderungstext nicht angegebenen Felder sind nicht betroffen. Wenn ein Element mit dem angegebenen Primärschlüssel nicht vorhanden ist, wird ein neues Element erstellt.
Das Abfragemuster lautet:
PATCH /api/{entity}/{primary-key-column}/{primary-key-value}
Zum Beispiel:
PATCH /api/book/id/2001
Content-type: application/json
{
"year": 1991
}
Das Ergebnis sieht ungefähr so aus:
{
"value": [
{
"id": 2001,
"title": "Stranger in a Strange Land",
"year": 1991,
"pages": 525
}
]
}
Der If-Match: *
HTTP-Anforderungsheader
Der HTTP-Header If-Match: *
stellt sicher, dass ein Aktualisierungsvorgang ausgeführt wird,nur ausgeführt wird, wenn die Ressourcevorhanden ist. Wenn die Ressource nicht vorhanden ist, schlägt der Vorgang mit HTTP-Statuscode fehl: 404 Not Found
. Wenn der If-Match
-Header weggelassen wird, besteht das Standardverhalten darin, einen Upsertauszuführen, der die Ressource erstellt, wenn sie noch nicht vorhanden ist.
Beispiel:
PATCH /api/Books/2001 HTTP/1.1
If-Match: *
Content-Type: application/json
{
"year": 1991
}
Anmerkung
Wenn Sie einen anderen Wert als *
im If-Match
-Header angeben, gibt der Daten-API-Generator einen 400 Bad Request
Fehler zurück, da der ETag-basierte Abgleich nicht unterstützt wird.
LÖSCHEN
DELETE löscht das Element der angegebenen Entität. Das Abfragemuster lautet:
DELETE /api/{entity}/{primary-key-column}/{primary-key-value}
Zum Beispiel:
DELETE /api/book/id/2001
Bei erfolgreicher Ausführung ist das Ergebnis eine leere Antwort mit Statuscode 204.
Datenbanktransaktionen für REST-API-Anforderungen
Um POST-, PUT-, PATCH- und DELETE-API-Anforderungen zu verarbeiten; Der Daten-API-Generator erstellt und führt die Datenbankabfragen in einer Transaktion aus.
In der folgenden Tabelle sind die Isolationsebenen aufgeführt, mit denen die Transaktionen für jeden Datenbanktyp erstellt werden.
Datenbanktyp | Isolationsstufe | Weitere Informationen |
---|---|---|
Azure SQL (oder) SQL Server | Zugesichert lesen | Azure SQL |
MySQL | Wiederholbares Lesen | MySQL |
PostgreSQL | Zugesichert lesen | PostgreSQL |