3.5. Steuerung der Anfrage
- 1 Http-Header
- 2 Query-Parameter
- 2.1 Filterung von Daten
- 2.1.1 Operatoren
- 2.1.2 Literale
- 2.1.3 Funktionen
- 2.2 Sortierung bei Queries
- 2.3 Steuerung der Nutzlast
- 2.3.1 Paging
- 2.3.2 Felder beschränken
- 2.1 Filterung von Daten
Neben Url und Payload spielen Http-Header und Query-Parameter eine wichtige Rolle in der Sage 100 API. Insbesondere Query-Parameter bieten die Möglichkeit, die zu lesenden Daten einzugrenzen.
Je weniger Daten zwischen Client und Provider übertragen werden, desto besser wird die Performance einer Abfrage sein.
Http-Header
Die in der Sage 100 API verwendeten Http-Header, die Client bei einer Anfrage angeben muss oder kann, sind der nachfolgenden Tabelle mit ihrer Bedeutung aufgelistet.
Header | Pflicht | Bedeutung | Beispielwert |
---|---|---|---|
Authorization | Authorization Bearer Token ausgestellt von Sage Konto | Bearer HHNE8589... | |
Accept | Die externe API unterstützt ausschließlich Json formatierte Inhalte. Es muss in allen Requests "application/json" gesetzt werden. | application/json | |
Content-Type | Bei Aktionen, bei denen der Client einen Body überträgt (PUT/PATCH/POST), muss dies im JSON Format erfolgen. | application/json | |
Accept-encoding |
| Über den Accept-Encoding Header kann der Client gepackten Payload anfordern. Es werden sowohl gzip als auch deflate unterstützt. | gzip,deflate |
Prefer |
|
| compact,shrinked |
| lowercasenaming | ||
| return=minimal | ||
If-Match |
| Bei einer Update-Operation muss der ETag des zu ändernden Datensatz in diesem Header vorhanden sein. Der Etag ist ein Base64 encodierter Hashwert des Datensatzes. | STFtZgHEkPz7TyH98YEmWA== |
X-ApiEndpoint |
| Für Abfragen gegen Datareferenzen (dtr..) muss der Name des zugehörigen Datensatz (ept..) mitgegeben werden. | eptKunden.Sage.API |
X-Sage-ConnectivityVersion | Muss immer mit dem Wert “1.3” gefüllt sein! | 1.3 |
Query-Parameter
Query-Parameter können Bestandteil einer Url sein. Sie folgen auf das letzte Segment und beginnen mit dem Zeichen ‘?'. Sie bestehen aus Name-Wert Paaren, wiederum getrennt durch das Zeichen '&’. Query-Parameter werden hauptsächlich zum Sortieren und Filtern verwendet. Zusätzlich kann noch der Inhalt des Payloads der Nutzdaten gesteuert werden.
Regeln der Abfragesprache
String-Literale müssen mit einfachen Hochkommata umschlossen sein; numerische Werte dagegen nicht.
Feldnamen sind nicht Case-sensitiv
Ausdrücke können mit Klammern versehen werden.
System-Properties (solche, die mit '$' beginnen) können nicht in Ausdrücken verwendet werden
Folgendes Beispiel verwendet sämtliche zur Verfügung stehende Optionen zur Steuerung des Payload einer Query.
Die Url (zu Veranschaulichung jede Anweisung in einer eigenen Zeile)
https://[baseurl]/sdata/ol/apiArtikel.Sage.API/OLDemoReweAbfD;123/eptArtikel.Sage.API
?where=Basismengeneinheit eq 'Stk'
&startindex=2
&count=2
&select=Artikelnummer,Matchcode,KalkulatorischerEK,Basismengeneinheit
&orderby=Matchcode ASC
führt zur folgenden Abfrage:
Lese die Datensätze der Ressource ‘eptArtikel.Sage.API’
deren Feld ‘Basismengeneinheit' gleich 'Stk’ ist (where=Basismengeneinheit eq 'Stk')
liefere ab dem 2ten Satz die folgenden 2 Sätze zurück (startindex=2&count=2)
aber nur die Felder “Artikelnummer,Matchcode,KalkulatorischerEK,Basismengeneinheit” (select=Artikelnummer,Matchcode,KalkulatorischerEK,Basismengeneinheit)
aufsteigend sortiert nach dem Inhalt des Feldes 'Matchcode' (orderby=Matchcode ASC)
Filterung von Daten
Queries, also Abfragen von einer Liste von Ressourcen, erfolgen über eine Url auf den Ressourcentyp. Zur Einschränkung der gefunden Sätze dient der “where”-Parameter.
where=[Audruck]
Dabei muss der Ausdruck ein boolsches Ergebnis liefern. Zur Definition des Ausdrucks dienen die im Folgenden beschriebenen Operatoren und Funktionen.
Operatoren
X und y können Feldnamen oder Literale sein.
Typ | Operator | Erklärung | Beispiel |
---|---|---|---|
Vergleich | x eq y | Gleich | Menge eq 1 |
x ne y | Ungleich | Menge neq 1 | |
x lt y | Kleiner als | Menge lt 5 | |
x le y | Kleiner oder gleich | Menge le 5 | |
x gt y | Größer als | Menge gt 5 | |
x ge y | Größer oder gleich | Menge ge 5 | |
x between y and z | Zwischen | Menge between 1 and 10 | |
x in (y, z) | Enthalten in | Einheit in ('Stk','m') | |
x like y | Wie, ähnlich einem Sql-Like. Der in einem Feld zu suchende Ausdruck kann mit '%' Zeichen für eine beliebige Zeichenfolge umschlossen sein. Bitte beachten Sie, dass das Zeichen ‘%' im Like-Operator in der Url encodiert als '%25’ anzugeben ist. | Ort like ‘%stadt’ Name like ‘%grau%' | |
Logisch | x and y | Logisches und | Menge gt 1 and Menge lt 5 |
x or y | Logisches oder | Menge gt 1 or Einheit eq 'm' | |
not x | Unäres not | not (Menge gt 1) |
Literale
Datums-Literale in der Form mit Maskierung über das ‘@'-Zeichen (Z.B. '@2023-05-12T07:30:00+01:00@' oder '@2023-05-12T07:30:00@'), werden Server-seitig immer in das Datum mit der Uhrzeit 0:00 Uhr umgewandelt. Das heißt, dass beide Werte des Beispiels als '2023-05-12T00:00:00’ interpretiert werden.
Um z.B. nach einem Zeitpunkt in einer Where-Anweisung zu filtern, muss dies mit der String-Repräsentation im ISO 8601 Standard erfolgen ('YYYY-MM-DDThh:mm:ss'). D.h. um nach dem Zeitpunkt “31.01.2024 15.00 Uhr“ zu filtern, ist dieser Wert in '2024-01-31T15:00:00' umzuwandeln. Die Angabe einer Zeitzone ist nicht zulässig.
Funktionen
Die folgenden verfügbaren Funktionen beziehen sich alle auf Felder vom Typ 'String', also Textfelder des Payloads.
Als Beispiel wird das Feld ‘Ort’ verwendet. Sein Inhalt ist 'Frankfurt'.
Funktion | Beschreibung | Beispiel |
---|---|---|
left(Feldname,Länge) | Liefert die linken ‘Länge’ Zeichen des Inhalts des Felds ‘Feldname’ | left(Ort,5) ergibt 'Frank' |
right(Feldname,Länge) | Liefert die rechten ‘Länge’ Zeichen des Inhalts des Felds ‘Feldname’ | right(Ort,4) ergibt 'furt' |
substring(Feldname,Start,Länge) | Liefert einen Teilstring ab der Position ‘Start' die folgenden ‘Länge’ Zeichen. 1-basiert, d.h. das erste Zeichen steht an Position 1. | substring(Ort,2,3) ergibt ‘ran’ |
length(Feldname) | Liefert die Anzahl der Zeichen des Inhalts des Felds 'Feldname' | length(Ort) ergibt 9 |
Sortierung bei Queries
Die Sortieranweisung als Queryparameter hat folgende Syntax
orderby=Feld1 ASC|DESC[,Feld2 ASC|DESC]
ASC - Aufsteigende Sortierung
DESC - Absteigende Sortierung
Steuerung der Nutzlast
Paging
Paging ist ein Mechanismus um Chunk-weise Daten zu lesen. Paging ist nur auf Queries möglich.
Die oben definierten Parameter werden folgendermaßen interpretiert
Ab dem Datensatz 1 (startindex=1)
gib die folgende 10 Datensätze zurück (count=10)
Folgende Regeln sind zu beachten:
Der Parameter “startindex” ist 1-basiert. D.h. 1 = der erste Satz.
“count” ohne gleichzeitige Verwendung von “startindex” ist nicht erlaubt
Es ist nicht sichergestellt, dass bei fortlaufendem Paging alle Sätze genau einmal geliefert werden.
Felder beschränken
Über die “select”-Anweisung können die vom Provider zurück zuliefernden Felder eingeschränkt werden. Die Anweisung kann bei Queries aber auch beim Lesen einer einzelnen Ressource angewendet werden.
Mehrere Felder sind mit Kommata zu trennen.
Hat eine Ressource Unterressourcen (z.B. Beleg mit Positionen), so kann dieser Mechanismus auch für Unterressourcen verwendet werden. Z.B.
Die Einschränkung liefert aus der Ressource das Feld ‘A0Konto' und aus Positionen jeweils das Feld 'Gesamtpreis’.
Benutzer-definierte Felder können nur als Einheit bei einer “select”-Anweisung ausgewählt werden.
Bei dieser Anweisung sind alle Benutzer-definierten Felder im Ergebnis der Anfrage enthalten. Eine Einschränkung auf einzelne Benutzer-definierte Felder ist nicht möglich.