Zum Inhalt springen
NimbusNexus

Referenz für Transforms

Die API unter https://transforms.nimbusnexus.net/v1 legt Pipelines an, versioniert, testet und führt sie aus, nur für Ihren Workspace. Requests und Antworten sind JSON. Senden Sie einen Key als Authorization: Bearer <key> oder X-API-Key: <key> (Zugang erhalten). Timestamps sind ISO 8601 in UTC. Der Überblick erklärt das Produkt und Pipelines das Dokument.

Routen

RouteWas sie tutBenötigt
POST /v1/pipelinesEine Pipeline und ihre Version 1 anlegen; 201 mit der Pipelinewrite; mit einem Credential-Schritt admin
GET /v1/pipelinesDie Pipelines des Workspaces, neueste zuerst, jede ohne ihr Dokumentread
GET /v1/pipelines/{id}Eine Pipeline, mit ihrem aktuellen Dokument und der Angabe, wo sie läuftread
PATCH /v1/pipelines/{id}Sie umbenennen, ein- oder ausschalten oder eine neue Version speichernwrite; mit einem neuen Credential-Schritt admin
DELETE /v1/pipelines/{id}Eine Pipeline und ihre Versionen endgültig löschen; 204admin
GET /v1/pipelines/{id}/versionsDie aufbewahrten Versionen, neueste zuerst, jede ohne ihr Dokumentread
GET /v1/pipelines/{id}/versions/{version}Eine Version, mit ihrem Dokumentread
POST /v1/pipelines/{id}/runEine gespeicherte Pipeline mit einem Request ausführenread
POST /v1/pipelines/testEin Dokument mit einem Request testen, ohne etwas zu speichern oder zu zählenwrite
GET /v1/pipelines/templatesDie Vorlagen als Ausgangspunktread
POST /v1/slotsEinen Credential-Slot hinzufügen; 201 mit dem Slotadmin
GET /v1/slots, GET /v1/slots/{id}Die Slots des Workspaces, neueste zuerst, oder ein einzelnerread
PATCH /v1/slots/{id}Einen Slot umbenennenadmin
DELETE /v1/slots/{id}Einen Slot löschen; 204admin
GET /v1/planDer Tarif des Workspaces und seine Limitsread
GET /v1/usageDie Ausführungen dieses Monats und was der Workspace hatread

read, write und admin sind unter Wer was darf erklärt.

Listen werden mit limit (1 bis 200, Standard 50) und offset (0 bis 10,000) paginiert. Die Antwort ist {"items": [...], "next_offset": <offset>}: Übergeben Sie next_offset als offset, um die nächste Seite zu erhalten. Auf der letzten Seite ist der Wert null. GET /v1/pipelines/templates ist die Ausnahme: Die Route nimmt weder limit noch offset entgegen und liefert alle Vorlagen auf einmal als einfaches Array.

Das Pipeline-Objekt

FeldBedeutung
idpipe_ und 24 Hexadezimalzeichen. Jede Route erwartet sie, und ein Produkt verweist darüber auf die Pipeline.
nameIhr Name für die Pipeline, bis zu 200 Zeichen.
statusenabled oder disabled: Ihr Schalter. Eine deaktivierte Pipeline läuft nicht, weder hier noch in einem Produkt, das auf sie verweist.
current_versionDie Version, die läuft.
pipelineDas Dokument der aktuellen Version; null in der Liste.
destinationsDie Dienste, die sie per Referenz ausführen, jeder einmal; null in der Liste (Wer eine Pipeline ausführt).
consumersWas jeder von ihnen ausführt: service, version, last_seen_at, der letzte Abruf dieser Version, und pinned, true, wenn eine Referenz diese Version festhält; null in der Liste.
created_at, updated_atWann sie angelegt und wann sie zuletzt geändert wurde.

POST /v1/pipelines erwartet name und pipeline. Ein Dokument, das nie laufen könnte, wird mit 422 invalid_pipeline abgewiesen. Hat der Workspace bereits so viele Pipelines, wie sein Tarif erlaubt, lautet die Antwort 402 quota_exceeded, mit details.metric pipelines, details.limit und details.current.

Versionen

PATCH /v1/pipelines/{id} erwartet name, status, pipeline oder eine beliebige Kombination davon. Eine neue pipeline wird so geprüft wie beim Anlegen und als nächste Version gespeichert.

  • Eine Version ändert sich nie, sodass ein Produkt seine Kopie anhand von ID und Version behalten kann.
  • Wird derselbe Inhalt gespeichert, entsteht keine neue Version.
  • Eine alte Version wiederherzustellen heißt, ihren Inhalt erneut zu speichern; sie wird damit zur neuesten.
  • Aufbewahrt werden so viele Versionen, wie der Tarif vorsieht, die neuesten zuerst, und ein Speichern entfernt die ältesten darüber hinaus. Auch eine Version, die ein Produkt festschreibt, wird aufbewahrt, ebenso die fünf älteren Versionen, die wir in den letzten 30 Tagen zuletzt bei einem Produkt im Einsatz gesehen haben.

Jede Version in GET /v1/pipelines/{id}/versions hat version, created_by und created_at; GET /v1/pipelines/{id}/versions/{version} liefert zusätzlich ihre pipeline. Eine Version, die nicht mehr aufbewahrt wird, antwortet mit 404 not_found, pipeline_version.

Pipeline ausführen

POST /v1/pipelines/{id}/run wendet die aktuelle Version oder die aufbewahrte, die version nennt, auf das an, was Sie senden:

FeldBedeutung
bodyEin beliebiger JSON-Wert, bis zu 256 KiB als kompaktes JSON und höchstens 32 Ebenen tief verschachtelt.
headersEin Wert pro Name, höchstens 256. Ein Name hat bis zu 256 Zeichen, ein Wert bis zu 8,192. Darüber antwortet die API mit 422 validation_error.
metaSchreibgeschützter Kontext für $meta: ein beliebiger JSON-Wert, höchstens 32 Ebenen tief verschachtelt.
versionDie aufbewahrte Version, die laufen soll. Ohne das Feld die aktuelle.

Vom Request wird nichts behalten, und die Ausführung wird gezählt. Die Antwort ist ein 200, gleich, was die Pipeline getan hat:

FeldBedeutung
statusok, senden Sie body und headers; dropped, ein Filter hat den Request verworfen, senden Sie also nichts; failed, die Pipeline kann bei diesem Request nicht laufen.
versionDie Version, die gelaufen ist; null bei einem Test.
body, body_changedDer Body, der gesendet werden soll, und true, wenn ein Schritt ihn umgeschrieben hat. null, außer bei ok.
headersDie Header, die gesendet werden sollen, der Wert eines Credentials maskiert als Bearer ••••.
queryWas ein auth-Schritt an die URL anfügt, auf dieselbe Weise maskiert.
stepDer Schritt, der den Request verworfen hat oder an dem die Ausführung fehlgeschlagen ist, ab 0 gezählt; sonst null.
noteDie Notiz eines verwerfenden Schritts.
reasonno_match bei einem Filter, auf den der Request nicht gepasst hat, matched bei einem verwerfenden Filter, auf den er gepasst hat, oder warum die Ausführung fehlgeschlagen ist, etwa set_conflict oder too_many_nodes. Behandeln Sie das Feld als offenen String.
errorDasselbe in Worten, etwa step 2: set_conflict: ….
duration_msWie lange die Ausführung gedauert hat.

Dieselbe Pipeline schlägt beim selben Request auf dieselbe Weise fehl; wiederholen Sie ein failed daher nicht. Eine deaktivierte Pipeline antwortet mit 409 conflict, pipeline_disabled, und über der Rate des Tarifs oder bei zu vielen gleichzeitig laufenden Ausführungen oder Tests des Workspaces antwortet eine Ausführung mit 429 rate_limited, mit details.retry_after.

Dokument testen

POST /v1/pipelines/test erwartet pipeline, ein Dokument, das nicht gespeichert sein muss, mit body, headers und meta. Es wird so geprüft wie beim Speichern, läuft einmal und speichert und zählt nichts, teilt sich aber die Rate des Tarifs. Ein Verwerfen oder ein Fehlschlag ist ein 200, das genau das sagt.

Credential-Slots

Ein Slot ist das, was ein auth-Schritt nennt: eine ID und eine Bezeichnung, ohne Wert. Transforms speichert kein Credential, und keine Route nimmt eines entgegen. Ein Produkt, das die Pipeline per Referenz ausführt, ordnet dem Slot ein eigenes Secret zu (Credentials). POST /v1/slots erwartet label, bis zu 200 Zeichen, und antwortet mit 201:

FeldBedeutung
idsec_ und Buchstaben und Ziffern: das, was ein auth-Schritt nennt; sie ändert sich nie.
labelWofür das Credential ist. Produkte sehen die Bezeichnung, wenn sie dem Slot ein Secret zuordnen.
pipeline_countBei wie vielen Pipelines die aktuelle Version den Slot nennt.
created_at, updated_atWann er hinzugefügt und wann er zuletzt umbenannt wurde.

PATCH /v1/slots/{id} erwartet label. DELETE /v1/slots/{id} antwortet mit 204 oder, solange die aktuelle Version einer Pipeline den Slot nennt, mit 409 conflict und details.reason slot_in_use, details.id und details.pipelines, der Anzahl der Pipelines. Hat der Workspace bereits so viele Slots, wie sein Tarif erlaubt, antwortet das Hinzufügen mit 402 quota_exceeded, mit details.metric slots.

Wer eine Pipeline ausführt

Ein Produkt verweist über die ID auf eine Pipeline und führt sie in seinem eigenen Prozess aus, mit seinen eigenen Secrets. Webhooks ist das erste: Transformationen. Jeder Abruf hält den Dienst und die Version fest, sodass eine gelesene Pipeline destinations und consumers zeigt.

Eine neue Version mit einem auth-Schritt erreicht beim Speichern jedes Produkt, das die Pipeline ausführt, und das Löschen der Pipeline ebenso. Jeder dieser Aufrufe muss in confirm_destinations jeden Dienst nennen, der eine Referenz hält oder den wir in den letzten 30 Tagen gesehen haben, im Body eines PATCH und in der Query eines DELETE. Andernfalls lautet die Antwort 409 conflict mit details.reason destinations_unconfirmed und details.destinations, und nichts ändert sich. Die eigenen URLs eines Dienstes stehen hier nie: Dieses Produkt verlangt für sie selbst dieselbe Bestätigung.

Wer was darf

Pipelines, Versionen, Vorlagen, Slots, Tarif und Verbrauch lesen; ausführenPipelines anlegen, ändern und testenEine Pipeline löschen, einen Credential-Schritt speichern oder einen Slot hinzufügen, umbenennen oder löschen
Owner oder Admin des Workspacesjajaja
Memberjajanein
Viewer oder jede andere Rollejaneinnein
Key mit Read & write (Scope admin)jajaja
Key mit Read (Scope read)janeinnein

Eine abgewiesene Aktion antwortet mit 403 forbidden und details.reason role, und details.required nennt die nötige Rolle. Ein Member darf eine Pipeline mit einem Credential-Schritt weiterhin umbenennen, ausführen und testen und den Schritt entfernen. Die Kontokonsole erstellt Keys mit Read und Read & write, und ein Key mit einem anderen Scope, etwa write, wird wie Read behandelt.

Transforms bedient ganze Workspaces. Ein Gastzugang oder ein Key, der auf ein Projekt beschränkt ist, wird mit 403 project_confined abgewiesen. Ein Workspace hat Transforms, sobald ein Owner oder Admin die Konsole geöffnet oder das Produkt über Add a product hinzugefügt hat. Bis dahin werden andere Mitglieder mit 403 product_not_enabled abgewiesen.

Tarife und Limits

GET /v1/plan gibt an, welche Limits gelten: plan, der hinterlegte Tarif; enforced_as, der Tarif, dessen Limits gelten, free, wenn es keinen gibt; ceilings, die Limits nach Namen; past_due, suspended und system.

Feld in ceilingsBedeutungFreeStarterProCustom
max_pipelinesPipelines, die ein Workspace haben darf5251001,000
max_secret_slotsCredential-Slots, die ein Workspace haben darf5251001,000
max_versionsAufbewahrte Versionen pro Pipeline102550100
run_rate_per_minAusführungen und Tests pro Minute, pro Workspace606003,00012,000

Kurz nacheinander dürfen so viele Ausführungen eintreffen, wie in zehn Sekunden erlaubt sind, mindestens aber 10. Außerdem laufen für einen Workspace in jedem Serverprozess höchstens zwei Ausführungen oder Tests gleichzeitig, und was darüber hinaus eintrifft, wird nicht in eine Warteschlange gestellt, sondern mit 429 rate_limited und details.retry_after 1 abgewiesen. GET /v1/usage gibt an, wie viel verbraucht ist: period, der Monat, angegeben als sein erster Tag; runs, failures und dropped dieses Monats, über die Ausführungs-API; pipelines, gemessen an max_pipelines; und slots, die vorhandenen Slots, gemessen an max_secret_slots. Ausführungen werden gezählt, nicht abgerechnet, und eine Ausführung in einem Produkt, das auf die Pipeline verweist, zählt zum Verbrauch dieses Produkts.

Solange eine Zahlung offen ist, werden Änderungen mit 402 workspace_frozen abgewiesen, und Ausführungen und Tests laufen weiter. Endet die Nachfrist, werden auch Ausführungen und Tests abgewiesen, mit 402 workspace_suspended. Lesen und Löschen bleiben möglich.

Fehler

Die Fehler der API verwenden das unter Fehler beschriebene Format.

StatuscodeWann
400bad_requestEin JSON-Body, der kein gültiges UTF-8 ist.
401unauthorizedKein Credential, ein widerrufenes oder eine beendete Anmeldung in der Konsole; details.reason nennt den Fall.
401invalid_credentialEin Key, der sich nicht verifizieren lässt, abgelaufen ist oder für ein anderes Produkt erstellt wurde.
402quota_exceededEine Pipeline anlegen oder einen Slot hinzufügen, während alle des Tarifs belegt sind; details.metric ist pipelines oder slots.
402workspace_frozen, workspace_suspendedEine Änderung, während eine Zahlung offen ist, oder alles außer Lesen und Löschen, nachdem der Dienst eingestellt wurde.
403forbiddendetails.reason ist role, project_confined, product_not_enabled, csrf oder no_workspace.
404not_foundDie Pipeline, die Version oder der Slot existiert in Ihrem Workspace nicht; details.reason ist pipeline, pipeline_version oder slot.
405method_not_allowedDer Pfad existiert, aber nicht für diese Methode.
409conflictdetails.reason ist pipeline_disabled (Pipeline ausführen), destinations_unconfirmed (Wer eine Pipeline ausführt) oder slot_in_use (Credential-Slots).
413payload_too_largeEin Request-Body über 1 MiB.
422invalid_pipelineEine Pipeline, die nie laufen könnte, beim Speichern oder Testen.
422validation_errorEin Parameter oder Feld hat die Validierung nicht bestanden. Ein NUL-Zeichen im Pfad, in der Query oder in einem JSON-Body ergibt den Eintragstyp transforms.nul_character.
429rate_limitedMehr Ausführungen pro Minute, als der Tarif erlaubt, oder zu viele gleichzeitig laufende Ausführungen oder Tests des Workspaces (Tarife und Limits); details.retry_after gibt an, wann Sie es erneut versuchen können.
500internal_errorAuf unserer Seite ist etwas kaputtgegangen.

Ungültige Pipelines

Die Ablehnung nennt das erste Problem: details.reason, details.path (ein JSON Pointer darauf) und details.step (ab 0 gezählt), jeweils sofern zutreffend.

JSON
{ "error": { "code": "invalid_pipeline", "message": "…", "details": { "reason": "credential_header", "path": "/steps/0/headers/set/Authorization", "step": 0 }, "request_id": "…" } }
reasonWas nicht stimmt
invalid_documentEs ist kein Objekt mit einer version und einer Liste von steps.
unsupported_versionversion ist nicht 1.
no_stepsEs gibt keine Schritte.
too_many_stepsEs gibt mehr als 20 Schritte.
invalid_stepEin Schritt ist kein Objekt mit genau einem Schritt-Schlüssel, neben dem höchstens eine note und bei einem Filter eine action stehen.
unknown_stepEin Schritt-Schlüssel ist nicht filter, drop, set, map, headers oder auth.
invalid_valueEine Einstellung passt nicht zu ihrem Schritt, etwa ein leeres drop oder eine Notiz mit mehr als 200 Zeichen.
invalid_pathEin Pfad lässt sich nicht lesen oder enthält eine Wildcard, wo sein Schritt keine erlaubt.
invalid_templateEin Ausdruck lässt sich nicht lesen oder nennt einen Filter, den es nicht gibt.
invalid_filterEin Filter ist ungültig, etwa einer mit einem unbekannten Operator.
invalid_headerEin Header-Name ist ungültig oder gehört zur Verbindung, oder ein Wert ist kein druckbares ASCII in einer Zeile.
invalid_secretDas secret eines Auth-Schritts ist nicht die ID eines Slots. Ein dort eingefügter Wert wird in keiner Meldung wiederholt.
auth_not_lastEin Schritt steht nach einem Auth-Schritt.
too_deepEtwas ist tiefer als 32 Ebenen verschachtelt.
too_largeDie Einstellungen eines Schritts sind größer als 16 KiB, oder das Dokument ist größer als 64 KiB.
not_jsonEs enthält einen Wert, der kein JSON ist.
forbidden_headerEin Schritt setzt Set-Cookie, einen Header, den kein Request trägt.
credential_headerEin Header-Schritt setzt Authorization, Cookie oder X-Api-Key, wodurch das Credential in der Pipeline gespeichert würde. Fügen Sie es stattdessen mit einem Auth-Schritt hinzu.
unknown_slotEin Auth-Schritt nennt einen Slot, den der Workspace nicht hat.

Behandeln Sie reason als offenen String und sehen Sie einen Standardfall für Werte vor, die Sie nicht kennen.

Nächste Schritte

  • Schnellstart — eine Pipeline testen, speichern und ausführen.
  • Pipelines — jeder Schritt, Pfad und Filter und jede Vorlage.
  • Transforms-API — jede Operation, mit dem Request in curl, TypeScript, Python oder Go.
  • Fehler — das Fehlerformat, jedes Feld in details und ein Muster für den Umgang damit.