[AEM Forms]{class="badge positive" title="Gilt für AEM Forms)."}

Integrieren der API im Regeleditor

Die Integration der API im Regeleditor erfolgt im Rahmen des Early-Adopter-Programms. Sie können von Ihrer offiziellen E-Mail-ID an aem-forms-ea@adobe.com schreiben, um dem Early-Adopter-Programm beizutreten und Zugriff auf die Funktion anzufordern.

NOTE
Der Visual Rule Editor unterstützt die API-Integration in adaptiven Forms auf der Grundlage von Kernkomponenten und Edge Delivery Services Forms, die im universellen Editor erstellt wurden.

Der Visual Rule Editor in Adaptive Forms unterstützt die direkte API-Integration ohne Erstellen eines Formulardatenmodells. Sie können eine Verbindung zu einem API-Endpunkt herstellen, indem Sie entweder die API-URL (im JSON-Format) eingeben oder die Konfiguration über einen cURL-Befehl importieren. Nach der Integration kann Aktion „Service" verwendet werden, um die API aufzurufen.

Formularfelder können direkt den Eingabeparametern zugeordnet werden, die in der API-Konfiguration definiert sind. Ebenso können Ausgabeparameter mithilfe der Option Ereignis-Payload“ für die entsprechende API-Antwort Formularfeldern werden.

Darüber hinaus können Sie mit dem visuellen Regeleditor beim Aufrufen Services Erfolgs und Fehlerhandler“ definieren. Erfolgs-Handler geben die Aktionen an, die nach einem erfolgreichen API-Aufruf ausgeführt werden sollen, während Fehler-Handler definieren, wie das Formular auf einen Fehler reagieren soll.

Vergleich: API-Integrationsmethoden

Aspekt
API-Integration mit dem Formulardatenmodell (FDM)
Direkte API-Integration (über API-Integration erstellen)
Zweck
Zentralisierte, wiederverwendbare API-Integration über mehrere Formulare hinweg
Schnelle, formularspezifische API-Integration
Setup-Speicherort
Im Formulardatenmodell-Editor (AEM-Konsole) erstellt und bearbeitet
Direkt im Regeleditor für adaptive Formulare erstellt und bearbeitet
Komplexität
Höherer Setup-Aufwand (Zuordnung und Konfiguration erforderlich)
Einfach und leicht
Am besten geeignet für
Anwendungsfälle für Unternehmen oder großen Umfang mit mehreren Formularen
Kleine Formulare, Prototypen oder einmalige API-Aufrufe

Konfiguration der API-Integration

Im folgenden Screenshot sehen Sie das Konfigurationsfenster für die API-Integration:

API-Integrationskonfiguration

Wichtige Konfigurationsoptionen

API-Integrationskonfiguration

  • Import aus cURL: Konfigurieren Sie Ihre API-Integration, indem Sie einen vorgefertigten cURL-Befehl einfügen, anstatt Details wie API-URL, HTTP-Methode, Kopfzeilen und Parameter manuell einzugeben.
  • Anzeigename: Benutzerdefinierter Name für den API-Service.
  • API URL: Endpunkt des API-Services.
  • HTTP-Methode auswählen: Die HTTP-Anfragemethode, die zum Aufrufen der API verwendet wird.
  • Content-: Definiert das Anfrage- und Antwortformat.
  • Verschlüsselung erforderlich (Optional) Wenn diese Option aktiviert ist, können Anfrage- und Antwort-Payloads mit benutzerdefinierten Funktionen in „function." werden. Ein Feld Öffentlicher Schlüssel wird angezeigt. Fügen Sie Ihren öffentlichen Schlüssel in dieses Feld ein, bevor Sie die API-Integrationskonfiguration speichern.
  • Auf Client ausführen: Wenn diese Option aktiviert ist, erfolgt der API-Aufruf vom Client (Browser) anstelle vom Server.
NOTE
Schritte und Beispielfunktionen verschlüsseln und entschlüsseln finden Sie unter Verschlüsselung und Entschlüsselung.

Authentifizierungstyp

  • options: Keine, Standard, API-Schlüssel.

Eingabeparameter

  • JSON für Eingabe hochladen: Laden Sie eine JSON-Beispieldatei hoch, um Eingabezuordnungen automatisch auszufüllen.

    • Name: Name des Eingabeparameters, der für die API erforderlich ist.
    • Type: Datentyp der Eingabe (Zeichenfolge, Zahl, Boolesch usw.).
    • In: Speicherort des Parameters (Abfrage, Kopfzeile oder Hauptteil).
    • Standardwert: Vorausgefüllter Wert, wenn er nicht vom Benutzer angegeben wird.
    • Hinzufügen: Option zum Hinzufügen zusätzlicher Eingabeparameter.

Ausgabeparameter

  • JSON für Ausgabe hochladen: Laden Sie eine Beispiel-API-Antwort hoch, um Zuordnungen automatisch zu generieren.

    • Name: Name des Ausgabeparameters aus der API-Antwort.
    • Type: Erwarteter Datentyp des Ausgabeparameters (Zeichenfolge, Zahl usw.).
    • In: Definiert, wo der zugeordnete Wert erwartet wird.
    • Hinzufügen/Löschen: Hinzufügen neuer Zuordnungen oder Entfernen vorhandener Zuordnungen.

Anwendungsfall: Ausfüllen von Länderfeldern in einem Visumantragsformular

Szenario: Eine Regierungsbehörde stellt ein Online-Antragsformular für ein Visum mit den folgenden Feldern bereit:

  1. Vollständiger Name (Text)
  2. Geburtsdatum (Datum)
  3. Land der Staatsbürgerschaft (Dropdown)
  4. Passnummer (Text)
  5. Ausstellungsland des Passes (Dropdown)
  6. Zielland (Dropdown)
  7. Vorgesehenes Anreisedatum (Datum)

Anstatt eine statische Liste von Ländern zu verwalten, ruft das Formular dynamisch Länderinformationen ab (Kontinent, Hauptstadt, ISO-Alpha-Codes usw.) mithilfe der getCountryName-API:

https://secure.geonames.org/countryInfoJSON?username=aemforms

Dadurch wird sichergestellt, dass Antragsteller beim Ausfüllen des Formulars stets eine aktuelle und genaue Liste der Länder erhalten.

Implementierung mithilfe der API-Integration im Regeleditor

Sie können eine API integrieren, ohne ein Formulardatenmodell zu erstellen, indem Sie im Regeleditor auf API-Integration erstellen klicken.

API-Integration erstellen

Ein API-Service mit dem getCountryName wird unter API-Integrationskonfiguration im Regeleditor konfiguriert:

API-REST-Endpunktkonfiguration

  • API-Endpunkt-URLhttps://secure.geonames.org/countryInfoJSON?username=aemforms
  • HTTP-Methode → GET
  • Content-Typ → JSON
  • Eingabeusername als Abfrageparameter (aemforms) übergeben.
  • Ausgabe → Antwortfelder wie continent, capital, countrynames, isoAlpha3 und languages werden Formularfeldern zugeordnet.

Im Visumantragsformular sind die drei Dropdown-Felder Land der, Land der Passausstellung und Zielland an die Aktion Dienst aufrufen gebunden.

Beim Laden des Formulars ruft Dienst aufrufen die Liste der Länder aus der API ab. Die Antwort wird dann zugeordnet, um die Dropdown-Optionen automatisch auszufüllen.

Wenn der/die Benutzende beispielsweise Land der Staatsangehörigkeit öffnet, wird die Liste der Länder dynamisch aus der API-Antwort angezeigt.

invoke-service-api-integration

API-Integrationsausgabe

Ebenso verwenden Land der Passausstellung und Zielland denselben API-Aufruf, um konsistente und aktuelle Daten in allen drei Feldern sicherzustellen.

NOTE
Sie können Eigenschaftswerte aus einem JSON-Array abrufen, indem Sie eine API aufrufen und eine benutzerdefinierte Funktion ​. Mit diesem Ansatz können Sie Werte extrahieren und direkt an Formularfelder binden.

Bearbeiten einer vorhandenen API-Integration

Nachdem Sie eine API-Integration erstellt haben, können Sie sie über den Regeleditor aktualisieren, ohne eine neue Integration zu erstellen. Wenn eine Invoke Service-Anweisung auf eine API-Integration verweist ist für diese Integration eine Bearbeiten“ verfügbar.

So bearbeiten Sie eine vorhandene API-Integration:

  1. Öffnen Sie die Regel im Regeleditor, der eine Anweisung Dienst aufrufen enthält.
  2. Wählen Sie in Anweisung „Service aufrufen die API-Integration aus, die Sie aktualisieren möchten.
  3. Klicken Sie auf Bearbeiten, um das Fenster API-Integrationskonfiguration zu öffnen.
  4. Aktualisieren Sie die API-URL, Authentifizierungs-, Eingabe- und Ausgabeparameter oder andere Einstellungen und speichern Sie Ihre Änderungen.

API-Integration bearbeiten

Verschlüsselung und Entschlüsselung

Wenn Verschlüsselung erforderlich für eine API-Integration ausgewählt ist, fügen Sie Ihren öffentlichen Schlüssel in das Feld Öffentlicher Schlüssel im Konfigurationsfenster der API-Integration ein. Der Regeleditor ruft vor jeder ausgehenden Anfrage verschlüsseln auf und nach Antwort „entschlüsseln“. Wenn Sie in „function.js“ keine benutzerdefinierte Logik , beide Funktionen die Payload unverändert zurück.

Um Anfrage- und Antwortdaten zu ver- und entschlüsseln, fügen Sie "" "" Funktionen zu function.js:

  1. Öffnen Sie die Datei function.js für Ihr adaptives Formular.
  2. Fügen Sie eine encrypt-Funktion hinzu, um die Anfrage (Hauptteil, Kopfzeilen und zugehörige Optionen) vor dem API-Aufruf umzuwandeln.
  3. Fügen Sie eine Funktion decrypt hinzu, um die Antwort nach einem erfolgreichen API-Aufruf umzuwandeln. Die Funktion decrypt empfängt die verschlüsselte Antwort und originalRequest, die alle cryptoMetadata enthält, die während der Verschlüsselung festgelegt wurden.
  4. Speichern Sie function.js und testen Sie dann die Integration mithilfe von Invoke Service im Regeleditor.

Im folgenden Beispielcode wird veranschaulicht, wie die Funktion encrypt in ".js“ hinzugefügt:

function encrypt(payload) {
    const { body, headers, options } = payload;
    const { encryptedBody, encryptedKey } = await myRsaEncrypt(body);
    return {
        body: encryptedBody,
        headers: { ...headers, 'X-Encrypted-Key': encryptedKey },
        cryptoMetadata: { keyId: 'rsa-2048-v1' },
        options
    };
}

Verschlüsseln (Payload-Hook für die Anfrage)

Die encrypt-Funktion empfängt ein Payload-Objekt mit body, headers und optional cryptoMetadata und options. Gibt eine geänderte Version derselben Form zurück. Das options-Feld übernimmt Abrufen von API-Einstellungen (z. B. credentials: 'include') über die Anfrage-Pipeline. Werte in options werden auf den zugrunde liegenden fetch() angewendet. Das cryptoMetadata-Feld speichert Daten für die Verwendung während der Entschlüsselung. Was Sie in cryptoMetadata während der Verschlüsselung festlegen, wird in originalRequest.cryptoMetadata beibehalten und später für die decrypt-Funktion verfügbar gemacht. Trotz des Namens encrypt ein allgemeiner Pre-Request-Transformator. Sie können damit Kopfzeilen oder den Anfragetext ändern, nicht nur zur kryptografischen Verschlüsselung. Die Standardimplementierung gibt die Payload unverändert zurück.
​>>

Der folgende Beispiel-Code veranschaulicht eine ""-:

function decrypt(encryptedData, originalRequest) {
    const { keyId } = originalRequest?.cryptoMetadata || {};
    return await myRsaDecrypt(encryptedData, keyId);
}

Entschlüsseln (Hook für POST-Anforderungsantwort)

Die Funktion decrypt wird nach einer erfolgreichen Antwort ausgeführt. Sie erhält den Antworttext und originalRequest. Das originalRequest-Objekt enthält cryptoMetadata aus Ihrer encrypt-Funktion zusammen mit url, method und anderen Anfragemetadaten. Er muss den entschlüsselten Text synchron oder asynchron zurückgeben. Die Standardimplementierung gibt die Daten unverändert zurück. Die Funktion decrypt wird nur bei erfolgreichen Antworten ausgeführt. Fehlerantworten rufen nicht auf decrypt.

NOTE
Ersetzen Sie in den obigen Beispielen myRsaEncrypt und myRsaDecrypt durch Ihre Verschlüsselungsfunktionen.

Implementieren des Wiederholungsmechanismus bei API-Fehlern

Wenn eine API-Anfrage fehlschlägt, ist es oft nützlich, die Anfrage erneut auszuführen, bevor dem Benutzer ein Fehler gemeldet wird. Sie können einen Abruf- und Wiederholungsmechanismus implementieren, indem Sie benutzerdefinierten Code in die Datei function.js schreiben.

Das folgende Beispiel zeigt, wie API-Fehler mit bis zu zwei Wiederholungsversuchen und einem exponentiellen Backoff zwischen Wiederholungsversuchen gehandhabt werden:

/**
 * Handles request retries with up to 2 retry attempts
 * @param {function} requestFn - The request function to execute
 * @return {Promise} A promise that resolves with the response or rejects after all retries
 */
function retryHandler(requestFn) {
    const MAX_RETRIES = 2;

    /**
     * Attempts the request with retry metadata
     * @param {number} retryCount - Current retry attempt count
     * @return {Promise} The request promise
     */
    function attemptRequest(retryCount = 0) {
        // Include retry metadata if this is a retry
        const requestOptions = retryCount > 0 ? {
            headers: {
                'X-Retry': 'true',
                'X-Retry-Count': retryCount.toString(),
                'X-Retry-Time': new Date().toISOString()
            },
            body: {
                retry: true,
                retryCount: retryCount,
                timestamp: Date.now()
            }
        } : undefined;

        return requestFn(requestOptions)
            .then(function(response) {
                if (response && response.status >= 400) {
                    console.warn('Request failed with status ' + response.status);
                    throw new Error('Request failed with status ' + response.status);
                }
                return response;
            })
            .catch(function(error) {
                console.warn('Request attempt ' + (retryCount + 1) + ' failed:', error.message);

                // Retry if max attempts not reached
                if (retryCount < MAX_RETRIES) {
                    console.log('Retrying request, attempt ' + (retryCount + 2) + ' of ' + (MAX_RETRIES + 1));

                    // Exponential backoff delay: 1s, 2s, 4s...
                    const delay = Math.pow(2, retryCount) * 1000;

                    return new Promise(function(resolve) {
                        setTimeout(resolve, delay);
                    }).then(function() {
                        return attemptRequest(retryCount + 1);
                    });
                } else {
                    // All retries exhausted
                    console.error('All retry attempts failed. Final error:', error.message);
                    throw new Error('Request failed after ' + (MAX_RETRIES + 1) + ' attempts: ' + error.message);
                }
            });
    }

    // Start the first attempt
    return attemptRequest(0);
}

Im obigen Code verwaltet die Funktion retryHandler API-Anfragen mit automatischen Wiederholungsversuchen im Falle eines Fehlers. Es dauert eine Anfragefunktion (requestFn) und versucht die Anfrage bis zu zweimal, wobei für jeden erneuten Versuch Metadaten hinzugefügt werden.

Häufig gestellte Fragen

  • Muss ich ein Formulardatenmodell erstellen, um eine API in adaptive Forms zu integrieren?
    Nein. Mit dem visuellen Regeleditor können Sie APIs direkt mit der Option API-Integration erstellen integrieren, ohne ein Formulardatenmodell zu erstellen. Dieser Ansatz eignet sich am besten für einfache oder formularspezifische Anwendungsfälle.

  • Kann ich API-Aufrufe über den Regeleditor sichern?
    Ja. Die Konfiguration der API-Integration bietet Authentifizierungsoptionen wie Standard und API-Schlüssel. Sie können auch Verschlüsselung erforderlich auswählen und benutzerdefinierte Logik ​und entschlüsseln in function.js. Konfigurationsschritte und Beispiele finden Sie unter Verschlüsselung und Entschlüsselung.

recommendation-more-help
experience-manager-cloud-service-help-main-toc