Anmeldung und Konventionen

Der Adapter wird wie folgt umgesetzt:

  • JSON-basierte REST-Schnittstelle
  • Die Schnittstelle ist komplett passiv. Das Timing der Abfragen ist dem Web-Partner frei, wobei darauf zu achten ist, dass nicht unnötige Last erzeugt wird (z.B. permanente Abfrage aller Stammdaten ohne Filter).
  • Die Schnittstellendefinition kann via Swagger ausgelesen werden.
  • Alle Endpunkte können nur mit einem authentifizierten Benutzer verwendet werden
  • Innerhalb der Schnittstelle findet keine weitere Autorisierung statt.

Filtermöglichkeiten

Auf den Abfragen werden Filtermöglichkeiten nach OData angeboten, die nach folgender Syntax arbeiten:

OperatorBedeutungBeispiel
eqGleichcity eq 'Redmond' and name eq null
neUngleichcity ne 'London'
gtGrösserprice gt 20
geGrösser oder gleichprice ge 10
ltKleinerprice lt 20
leKleiner oder gleichprice le 100
andUndprice le 200 and price gt 3.5
orOderprice le 3.5 or price gt 200
notNegationnot price le 3.5
( )Priorisierung(priority eq 1 or city eq 'Redmond') and price gt 100
skip, topPaging

$top=30&$skip=220

Datumsformatierung

Datumangaben müssen nach ISO 8606 inkl. Zeitzone codiert werden. 

Beispiel in einem OData-Filter: $filter=modifiedDate gt 2021-06-14T00:00:00Z

Belastung der Schnittstelle

Die Belastung der Schnittstelle ist wie folgt vorgesehen:

  • Artikelstamm / Produktinformationen und Produzenten sollten im Web-Server gecached werden. Diese Abfragen können grosse Last und somit Zeitverlust bei der Abfrage verursachen.
  • Dort wo vorhanden wird auf den Tabellen ein Timestamp der letzten Änderung angeboten. Damit können Delta-Abfragen gemacht werden, um die Daten schneller abzugleichen.


Authentifizierung

Sämtliche REST-Endpunkte erlauben den Zugriff nur mit Authentifizierung. Einzige Ausnahme ist der folgende Token-Request. Die Antwort enthält ein Bearer-Token (access_token), das beim Zugriff auf die REST-Endpunkte im Http-Header mitgegeben werden muss.

Url: /api/Identity/Realm/RequestToken

Bsp. Demo-Server: https://vinxapi.i-ag.ch/api/Identity/Realm/RequestToken

Felder 

Feld

Typ

Info

client_id

stringKonstante "Integrated"

scope

stringKonstante "VinX.Shop"

username

stringBenutzername

password

stringPasswort

Beispiel Body:

{
  "client_id""Integrated",
  "scope""VinX.Shop",
  "username""<User>",
  "password""<Pwd>"
}

Beispiel Antwort:

{
    "access_token""eyJhbGciOiJSUzI1NiIsImtpZCI6Ijc2ODczNkI5NERFRjU1RjIxNDFBNTQ4NTJGRjM3RjlDODk3QjlBNzIiLCJ4NXQiOiJkb2MydVUzdlZmSVVHbFNGTF9OX25JbDdtbkkiLCJ0eXAiOiJKV1QifQ.eyJyb2xlIjoiQ3JlYXRlfFJlYWR8VXBkYXRlfERlbGV0ZXxFeGVjdXRlOkdlbmVyYWxAQ2FtcHVzU3Vyc2VlLlJFU1QiLCJ1bmlxdWVfbmFtZSI6IlN0dWlxIiwibmJmIjoxNTkzMDc1ODI4LCJleHAiOjE1OTMwNzc2MjgsImlhdCI6MTU5MzA3NTgyOCwiaXNzIjoiaHR0cDovL3cxMG1hcy1uZXQ6ODA4NSJ9.Q_aN6n1i0QpDbTflqafqQcLPN_Xz_Qk1FXarTLZ9T4ohhpmdL2YlH7SQR4WGKPcoJvbZeWIHBy0h4ByxB06ILKL2pFypUpWobGKfp8C4gEBgqi1xfRtvMgUPR3JUhmFTJhpijGD0lbJJ7SpPCydgyCwufyVmfgX_U308CQY40fuDtEA6xNs-wZpGGd0a0WygFf1xqmbaz3TdptqNGddl22GsJscuvkbSrrf572Ke3Hfn_bj7KXk-5FB06dkb-0tAwvnXf7PTY_Xgc1Unm04AiwRb5kL1SsfPWjH9LCdn4sJuw1pUQev1dcj9tHtQ",
    "token_type""Bearer",
    "user""<User>",
    "userRole""Create|Read|Update|Delete|Execute:General@VinX.Shop",
    "userShouldChangePassword"false
}