HttpDataProvider
Mit dem HttpDataProvider
können Sie auf beliebig konfigurierbare HTTP/HTTPS-Endpunkte zugreifen. In der einfachsten Konfigurationsart gibt man eine Zieladresse an und wandelt dann die resultierenden Daten in Kontakte um. Da viele Dienste eine Authentifizierung voraussetzen, ist es über den Provider möglich, eine Schrittfolge von HTTP-Anfragen zu definieren, um so z. B. "Access-Tokens" oder andere Daten zu holen und diese für weitere HTTP-Anfragen weiterzuverwenden.
Konfiguration
Neben der Mapping
- und SearchParameters
-Konfiguration, welche alle DataProvider
der Datenschnittstelle benötigen, kann der HttpDataProvider
über das Configuration
-Element konfiguriert werden:
<HttpDataProvider DisplayName="Kundenadressen">
<Configuration>
...
</Configuration>
...
</HttpDataProvider>
Configuration Unter diesem Punkt wird die Abfolge an HTTP Anfragen definiert.
Secret Um Klartextpasswörter in Konfigurationen zu vermeiden, können Secrets als
<Secret Name="..." Value="{c[...]}" />
erfasst werden. Zur Laufzeit wird das Passwort entschlüsselt und kann als Platzhalter fürRequests
verwendet werden.Step Ein Step umfasst jeweils
Request
undResponse
. Es können bliebig viele "Steps" definiert werden. Während jedes Schrittes könnenProperties
oderContacts
in die Resultatliste aufgenommen werden.Request Über dieses Element wird die HTTP Anfrage gebaut.
Method (Attribut) HTTP Methode, welche genutzt werden soll (
GET
,POST
, ...)Url Ziel URL des Aufrufs. In der URL können Platzhalter über diese Schreibweise genutzt werden:
{Placeholder}
. Platzhalter werden stets URL-Encoded.Header Es können beliebig viele HTTP Header angegeben werden. Es können ebenfalls Platzhalter über den
{Placeholder}
-Syntax genutzt werden.Body Es kann ein Body definiert werden. Es können ebenfalls Platzhalter über den
{Placeholder}
-Syntax genutzt werden. Es findet hierbei kein Encoding statt.FakeResponse Um einen Endpunkt zu testen, kann das Element
FakeResponse
genutzt werden um einen konfigurierbaren Rückgabewert zu definieren.Polling Über diese Funktion kann der Request angewiesen werden mehrfach auf die URL in einem
Interval
zuzugreifen bis ein bestimmter Zielwert mittels einesJsonPath
bzw.XPath
gefunden wurde oder die Maximalzeit (MaxDuration
) erreicht wurde.
Response Über die
Response
kann auf die HTTP Antwort zugegriffen werden. EinResponse
kann entweder eine oder mehrereProperty
-Elemente erzeugen oder ein Mapping auf die Daten vornehmen.Hinweis: Dieses Element ist optional, falls nur ein
Request
ausgelöst werden soll.Property Über dieses Element kann man mittels eines
JsonPath
oder einXPath
einen bestimmten Wert aus der HTTP Antwort herauslesen. Der Wert steht dann über die{Placeholder}
für weitere Anfragen unter dem konfigurierten Namen zur Verfügung.Data Die eigentlichen Daten werden über dieses Element gesucht. Hierbei muss ein
JsonPath
oder einXPath
angegeben werden. Die Daten werden dann über das Mapping für dasSchema
desObject
/ObjectCollection
umgewandelt.
Polling
Der HttpDataProvider
kann mehrere Schritte (Step
) beinhalten. Theoretisch ist es z.B. möglich mit einem Step
einen Aufruf zu starten und im nächsten Step
auf das Ergebnis zuzugreifen.
Falls das Ergebnis aber nicht direkt zur Verfügung steht, muss auf das Ergebnis gewartet werden.
Hierfür kann das Polling
-Feature genutzt werden:
...
<Step>
<Request Method="Get">
<Url><![CDATA[https://sampleservice.local/api/reports/status/{ReportId}]]></Url>
<Polling Interval="500" MaxDuration="30000" JsonPath="$.status" SuccessValue="Completed"/>
<!-- Interval in ms / MaxDuration in ms -->
</Request>
<Response>
<Data JsonPath="$">
<Mapping>
<Map Source="id" Target="FirstName"/>
</Mapping>
</Data>
</Response>
</Step>
...
Die Ziel URL muss auch beim Polling erreichbar sein und kein HTTP Fehler zurückliefern.
Interval Definiert die Zeitabstände in der der
Request
auf dieUrl
ausgeführt wird.MaxDuration Definiert die maximale Zeit, danach wird der Request abgebrochen und ein Fehler wird zurück gegeben.
JsonPath und XPath Angabe eines JsonPath bzw. XPath um die Erfolgsbedingung zu finden.
SuccessValue Angabe der erfolgreichen Wertes, welches das Polling beendet.
Beispiel-XML-Konfiguration
“Tel-Search”-Beispiel:
<HttpDataProvider DisplayName="TelSearch">
<SearchParameters>
<Text Id="What" Label="Suchbegriff" />
</SearchParameters>
<Configuration>
<Step>
<Request Method="Get">
<Url><![CDATA[https://tel.search.ch/api/?was={What}&key=[Key]&maxnum=100]]></Url>
</Request>
<Response>
<Data XPath="*[local-name()='feed']/*[local-name()='entry']">
<Mapping>
<Map Source="*[local-name()='name']" Target="CompanyName" />
<Map Target="Street">
<Map.SourceExpression><![CDATA[
function main()
{
const street = source("*[local-name()='street']");
const streetno = source("*[local-name()='streetno']");
return street + " " + streetno;
}
]]></Map.SourceExpression>
</Map>
<Map Source="*[local-name()='zip']" Target="PostalCode" />
<Map Source="*[local-name()='city']" Target="City" />
<Map SourceValue="CH" Target="Country" />
</Mapping>
</Data>
</Response>
</Step>
</Configuration>
</HttpDataProvider>
PrimeSoft AG, Bahnhofstrasse 4, 8360 Eschlikon, Switzerland