Adult-Fotofilter in Ihre App integrieren
Adult-Fotofilter in ein Produkt einzubauen sieht nach einem Bildproblem aus und entpuppt sich als Infrastrukturproblem. Die eigentliche Modellarbeit kaufen Sie mit einem einzigen Call ein. Was den Sprint frisst, ist alles drumherum: Uploads, die in Timeouts laufen, Jobs, die fertig werden während niemand zuhört, Retries, die Ihnen klammheimlich doppelt in Rechnung gestellt werden, und ein Support-Ticket mit der Frage, wo ein Ergebnis geblieben ist. Dieser Guide geht die Integration von Anfang bis Ende durch und zeigt die Stellen, an denen Teams verlässlich Zeit verlieren.
Woraus die Integration tatsächlich besteht
Eine API zur Bildtransformation ist von Natur aus asynchron. Die Generierung dauert lange genug, dass es eine schlechte Idee ist, dafür eine HTTP-Verbindung offen zu halten: Mobilfunknetze brechen weg, Load Balancer kappen leerlaufende Verbindungen, und Ihre eigenen Request-Timeouts arbeiten gegen Sie. Der Ablauf ist deshalb immer derselbe — Sie geben Arbeit ab, erhalten eine Kennung und holen das Ergebnis später ab.
- Foto und gewünschtes Preset übermitteln und eine Job-ID zurückbekommen.
- Den Job verfolgen, entweder per Polling oder über Events.
- Das fertige Bild abholen, sobald der Job Erfolg meldet.
- Fehler- und Retry-Pfade behandeln — hier steckt der Großteil der eigentlichen Arbeit.
Schritt eins: den Job übermitteln
Die Übermittlung ist ein Multipart-Request mit dem Bild, der Preset-Kennung und einer Bestätigung, dass Rechte und Einwilligung zur Verarbeitung des Fotos vorliegen. Schicken Sie einen Idempotency Key mit. Dieser eine Header ist der Unterschied zwischen einer sauberen Integration und einem Support-Fall — und er kostet nichts.
curl -X POST https://api.example/api/v1/jobs \ -H "X-API-Key: $API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -F image=@photo.jpg \ -F feature=bikini \ -F consent=confirmed
Die Antwort enthält die Job-ID und deren Anfangsstatus. Speichern Sie diese Kennung sofort zum jeweiligen Nutzer- oder Session-Datensatz, bevor Sie irgendetwas anderes tun. Stirbt Ihr Prozess in der nächsten Sekunde, ist dieser Datensatz das Einzige, worüber Sie die Arbeit wiederfinden.
Schritt zwei: den Fortschritt verfolgen
Es gibt zwei Wege, einen Job zu verfolgen, und ausgereifte Integrationen nutzen beide. Eine WebSocket-Verbindung liefert Statuswechsel und Fortschritt in Echtzeit — genau das, was einen Fortschrittsbalken im Interface antreiben soll. Das Polling des Job-Endpunkts ist der Fallback, der das System korrekt und nicht bloß angenehm macht: Sockets brechen weg, Telefone gehen schlafen, und ein Poll alle paar Sekunden kostet praktisch nichts.
Behandeln Sie den WebSocket als Optimierung und das Polling als Quelle der Wahrheit. Teams, die es umgekehrt machen, landen bei Jobs, die serverseitig einwandfrei fertig wurden und im Client für immer festzuhängen scheinen — weil das eine Event, auf das es ankam, ausgerechnet während eines Reconnects eintraf.
Schritt drei: das Ergebnis abholen
Meldet der Job Erfolg, enthält er eine Liste von Ausgaben. Jede Ausgabe wird mit demselben API-Key abgerufen, der den Job erzeugt hat — Ergebnisse sind also nie öffentlich adressierbar und nie über eine URL erratbar. Laden Sie das Bild bei Empfang in Ihren eigenen Speicher, wenn Ihr Produkt es später anzeigen soll: Eine Bild-API ist ein Verarbeitungsdienst, kein Fotoarchiv, und Ergebnisse werden nicht unbegrenzt vorgehalten.
Schritt vier: Fehler, Retries und die Doppelabrechnungsfalle
Der interessante Fehlerfall ist nicht der, in dem die API einen Fehler zurückgibt. Es ist der mehrdeutige: Ihr Request ging raus, die Verbindung brach ab, und Sie wissen nicht, ob der Job angelegt wurde. Wiederholen Sie ihn naiv, haben Sie doppelt bezahlt und zwei Ergebnisse für eine Nutzeraktion erzeugt.
Genau das löst der Idempotency Key. Wiederholen Sie den Request mit demselben Key, erhalten Sie den ursprünglichen Job zurück statt eines neuen — egal, wie oft der Retry feuert. Erzeugen Sie den Key, wenn die Nutzeraktion passiert, speichern Sie ihn zum Job-Datensatz und verwenden Sie ihn bei jedem Retry derselben Aktion wieder. Nicht pro Versuch einen neuen — das hebelt den ganzen Mechanismus aus.
Wo Integrationen typischerweise hängenbleiben
- Uploads nur im Client validieren. Prüfen Sie die Datei serverseitig anhand des Inhalts, nicht der Endung, bevor Sie einen API-Call dafür ausgeben.
- Den gesamten Ablauf synchron bauen und dann feststellen, dass mobile Clients die Verbindung längst verlieren, bevor die Generierung fertig ist.
- Den WebSocket als einzigen Fortschrittskanal behandeln, ohne Polling-Fallback.
- Nichts lokal speichern, sodass ein Neustart die Zuordnung zwischen Nutzern und laufenden Jobs verliert.
- Vergessen, dass Ergebnisse flüchtig sind, und die API als dauerhaften Speicher einplanen.
Eine sinnvolle Reihenfolge
Schicken Sie ein Foto komplett per curl durch den gesamten Pfad, bevor Sie Anwendungscode schreiben — übermitteln, pollen, herunterladen. Verdrahten Sie dann dieselben vier Calls mit Persistenz in Ihrem Backend. Den WebSocket bauen Sie zuletzt ein, rein als Verbesserung des Fortschrittsbalkens auf einem System, das auch ohne ihn funktioniert. In dieser Reihenfolge ist die Integration ein Tagesprojekt; in umgekehrter Reihenfolge sind es zwei Wochen Debugging.
Häufige Fragen
Wie lange dauert eine Anfrage?
Die Generierung läuft asynchron im Hintergrund. Bauen Sie das Interface um einen Fortschrittszustand statt um einen blockierenden Call — dann spielt die exakte Dauer für Ihre Architektur keine Rolle mehr.
Brauche ich einen WebSocket, um die API zu nutzen?
Nein. Alles funktioniert allein über REST. Der WebSocket sorgt nur dafür, dass sich der Fortschritt live anfühlt; Polling des Job-Endpunkts liefert dieselben Informationen.
Was passiert, wenn ich denselben Request zweimal sende?
Mit demselben Idempotency Key erhalten Sie den ursprünglichen Job zurück; es wird keine zweite Generierung erzeugt oder abgerechnet.
Mit uncloth.app entwickeln
Ein REST-Endpunkt, elf Presets, Ergebnisse direkt an Ihr Backend. Schreiben Sie uns, was Sie bauen, und wir schicken Ihnen die Zugangsdaten.
Zugang anfragen