Zapier -> wie werden Objekte gespeichert?

internet

Top Contributor
Hallo,

ich versuche zu verstehen, wie Zapier (Zapier.com) im Hintergrund funktioniert.
Primär geht es darum, wie die durchgereichten Objekte gespeichert werden in der Datenbank, sodass zu einem späteren Zeitpunkt wieder darauf zugegriffen werden kann.

Nehmen wir das Beispiel mit dem Video:

1) Eine neue Datei wird in einen bestimmten Ordner bei Dropbox hochgeladen
2) Die Datei wird in Google Drive hochgeladen

Was ich nun gerne verstehen würde, wie das Objekt durchgereicht wird.
Wenn der ganze Ablauf in einer Transaktion abläuft, würde ich es ja noch verstehen.

Dann habe ich einfach ein Objekt:
Java:
private Object object;
Nun kann es aber ja sein, dass der nächste Step in dem Workflow erst nach Tagen durchgeführt wird.
Dann werde ich
Java:
private Object object;
nicht mehr im Speicher haben.

Daher frage ich mich, wie wird später wieder auf das Objekt zugegriffen, primär auch: wie wird das in der Datenbank gespeichert?

Ich könnte mir vorstellen, dass ich eine Datenbanktabelle haben:

AutomationRelatedObject
  • ID
  • uniqueName
  • ObjectType
  • ObjectId
  • AutomationCreatedId (ID des Workflows, in der das Objekt zum ersten Mal genutzt wurde).

Prinzipiell könnte ich mir das so vorstellen.
Aber dann braucht es ja einige Funktionen um immer wieder auf das Objekt zugreifen zu können.
In dem Beispiel oben, brauche ich ja dann wiederum einen Aufruf auf die Dropbox API um das entsprechende Objekt zu laden, denn ich denke nicht, dass Zapier das File in deren App wiederum persistiert?

Vielleicht hat jemand ein paar Ideen Anregungen :)
 

LimDul

Top Contributor
Im Detail gibt es zig Möglichkeiten. Es wird nicht "das Objekt" gespeichert. Sondern es werden die notwendigen Informationen gespeichert. Das wird zum großen Teil über API-Callbacks laufen, z.B. in dem Beispiel das Dropbox sich bei Zafier meldet es wurde was hochgeladen. Und daraufhin läuft eine Logik, das nach Google Drive transferiert.

Der Fokus auf die Datenbank ist meines Erachtens vollkommen falsch. Es geht hier um Prozess-Automatisierung. Das heißt der Fokus muss auf dem Prozess liegen (der wird gespeichert) nicht irgendwelche Dateien. Und was da persistiert wird ist stark abhängig was an Informationen die jeweiligen APIs brauchen/liefern. Das heißt man muss sich sowas hier anschauen: https://www.dropbox.com/developers/documentation/http/documentation und vor allem hier: https://www.dropbox.com/developers/reference/webhooks
 

internet

Top Contributor
Ich glaube dann hast du mich falsch verstanden.
Mir geht es nicht darum das Objekt physikalisch zu speichern, sondern wie du selbst sagtest die Infos zum Objekt zu speichern.
Wie könnte das in der Datenbank dann aussehen? Wie sollte die Tabelle aussehen…?
Sodass ich von jedem Prozess des Workflow entsprechend zugreifen kann.
Wie weiß mein aktueller Prozess auf welches Objekt er zugreifen muss?

Mir ist quasi nicht klar, wie die Beziehung in der Datenbank hier modelliert wird zu dem Prozess zu diesem Objekt.
 

internet

Top Contributor
Ok, allgemein gefragt:
Die Frage ist wie Zapier oder ein anderes Automatisierungstool für SQL Tabellen hat um die Infos zu den einzelnen Workflows zu speichern.

Dass die Objekte (wie Videodatei) etc. nicht gespeichert werden, sondern immer dann per API (zB von Dropbox) abgerufen werden, ist mir klar :)
 

LimDul

Top Contributor
Allgemeine Antwort: So wie notwendig. Es gibt 1000 und eine Möglichkeit. Man modelliert sein Datenmodell - daraus ergeben sich die Tabellen.

Ich gehe davon aus, dass so ein Tool wie Zafir vermutlich über 100 Tabellen hat, wenn nicht deutlich mehr.

Es gibt eine Prozess-Definition, die auf beliebig viele Tabelle aufgeteilt ist, vermutlich mit einer Root Tabelle und zig Assoziationen/Kompositionen dran.
 

LimDul

Top Contributor
Genau das meine ich mit zig Möglichkeiten. Ich kann es rein SQL ausmodellieren, dann habe ich viele Tabellen und ein strukturiertes SQL Modell. Ich kann auf nosql setzen. Oder auf was beliebiges dazwischen. Das sind alles valide Ansätze, die auf DB Ebene komplett unterschiedlich aussehen. Deswegen ist die Frage in der Form nicht zu beantworten
 

mihe7

Top Contributor
@internet Du brauchst Dir doch bloß mal so ein Tool gedanklich modellieren. Machen wir es uns mal einfach: das Ding stellt einen Endpoint für Webhooks zur Verfügung, dabei muss der Workflow identifiziert werden. Die URLs könnten dann z. B. so aussehen: http://localhost/wh/<workflow-id> (localhost ist hier natürlich nur ein Stellvertreter)

Wie funktioniert so ein Tool? Letztlich ist es ein Sammelsurium aus Plugins. Ein Workflow ist nun einfach eine Abfolge von Schritten, wobei jeder Schritt von einem Plugin bearbeitet wird.

Heißt: Du brauchst im Endeffekt nur eine plugin-unabhängige Möglichkeit, den Workflow, die Schritte und das zuständige Plugin zu identifizieren, das könnte z. B. eine Workflow-ID + Schritt-ID + Plugin-ID sein.

Nehmen wir mal an, die Dropbox meldet ein Ereignis auf http://localhost/wh/421. Dann wird der Workflow 421 geladen, der aus, sagen wir mal, drei Schritten besteht: für Schritt 1 ist das Dropbox-Plugin zuständig, das ist der Trigger. Dieses Plugin könnte aus dem JSON, das Dropbox übermittelt, z. B. die URIs der neuen Dateien auslesen. Die Info geht nun an Schritt 2. Dort ist es z. B. das Google Drive Plugin. Ein Upload usw. Und Schritt 3 gibt dann eine Meldung an einen Instant Messenger aus, z. B. Whatsapp.

Das Plugin bekommt natürlich mit, um welchen Workflow und Schritt es sich kümmern soll. Wie das Plugin die Konfiguration speichert, muss die Anwendung im Prinzip nicht interessieren. D. h. das Plugin kann die Konfiguration so speichern, wie es für das Plugin am geschicktesten ist. So kann das Google Drive Plugin für den Worfklow 421, Schritt 2 speichern, dass die Datei bei mihe7s Google Drive im Verzeichnis backup abgelegt werden soll. Für Workflow 421, Schritt 3 wird das Whatsapp-Plugin verwendet, dort wird eine schöne Nachricht konfiguriert.

Das ist natürlich nur sehr schemenhaft, aber es zeigt, dass man es im Prinzip so weit abstrahieren könnte, dass man die Datenhaltung der Konfiguration der einzelnen Workflow-Schritte den Plugins überlassen werden kann.

Ganz so einfach wie dargestellt ist es natürlich nicht, denn man muss sich Gedanken machen, wie Informationen von einem Schritt an den nächsten weitergegeben werden. Wenn man sichs einfach machen will, dann könnte ein Plugin zum Beispiel Key-Value-Paare zur Verfügung stellen. Dann muss der folgende Schritt ggf. mappen.

Wenn beispielsweise der Trigger etwas wie "file_id": "28022309280929" liefert, bringt das dem Folgeschritt relativ wenig (kann man natürlich für Loggin-Zwecke verwenden). Der Trigger müsste dann schon auch etwas wie "file_url" liefern (das wäre eben die Aufgabe des Trigger-Plugins). Das Plugin im Folgeschritt muss dann mit URLs umgehen können, ansonsten muss man ggf. noch ein Plugin dazwischenpacken. Jedenfalls könnte das Plugin im Folgeschritt nun konfigurieren, dass die URL-Datei unter dem Key "file_url" des vorangegangenen Schrittes zu finden ist.

Das mal kurz überschlagen. Kann natürlich sein, dass ich hier essentielle Dinge übersehen habe.
 

internet

Top Contributor
Vielen Dank für deinen ausführlichen Post. Das zeigt mir, dass ich nicht so ganz falsch in meiner aktuellen Implementierung liege.
Ich habe aktuell diese Datenbank - Tabellen:
  • Automation
  • AutomationTask
  • AutomationTrigger

In Automation lege ich den ganzen Workflow inkl. Steps in einem JSON Format ab. Hierbei habe ich jedoch zwei Typen:
- Template und Execution.
-> Template ist quasi die Vorlage für einen Worklow
-> Execution ist die Kopie eines Templates, welches dann eben mit aktuellen Aktionsdurchführungen gespeichert wird (welcher Step wird gerade durchgeführt etc.)

AutomationTask habe ich eig. auch nur, dass ich diesen durch einen Schedule antriggern kann und dann in der Datenbank speichern kann (wann lief dieser Step etc.). Die Information könnte ich auch im JSON speichern, wäre dann aber nicht wirklich strukturiert in der DB.

AutomationTrigger dient mir die Trigger in einer Datenbank zu haben. Somit kann ich zB beim Anlegen eines Kunden meine Automation suchen, die daraufhin angestartet werden sollen.

Und Schritt 3 gibt dann eine Meldung an einen Instant Messenger aus, z. B. Whatsapp.
Offtopic: aber gibt es hier eine API? Das suche ich tatsächlich noch
Edit gibt es wohl wirklich: https://github.com/Bindambc/whatsapp-business-java-api#maven

Ganz so einfach wie dargestellt ist es natürlich nicht, denn man muss sich Gedanken machen, wie Informationen von einem Schritt an den nächsten weitergegeben werden. Wenn man sichs einfach machen will, dann könnte ein Plugin zum Beispiel Key-Value-Paare zur Verfügung stellen. Dann muss der folgende Schritt ggf. mappen.
Korrekt, das ist so quasi meine Eingangsfrage auch gewesen bzw. wie ich von einem anderen Schritt dann auf das Objekt vom vorherigen Schritt zugreifen kann.

So ähnlich habe ich es mir nun auch überlegt, dass ich dies zusätzlich als Array im JSON von "Automation" ablege.
Also ein Objekt wie:
Java:
public MyWorkflowObject{
   
    private String key; // eindeutiger Name, zB DROPBOX_FILE
    private Object value; // Wert, zB als JSON dann auch Informationen zum DropboxFile mit uniqueID etc.
    private String objectType; // ggf. Datentyp etc. speichern
    private String workflowId; // Workflow ID, in welchem das erste mal das Objekt erstellt / geladen wurde
}
In diesem Array liegen dann sämtliche Objekte, die innerhalb des Workflows aufgerufen werden.
Ggf. kann dieses Array zur Laufzeit auch erweitert werden.
Beispielsweise habe ich einen Workflow, der immer angestoßen (erstellt) wird, wenn ein Kunde erstellt wird.
Beim Anlegen des Workflow hatte ich noch kein Kundenobjekt im Array gespeichert. Dies füge ich nun hinzu oder update es (mit einer entsprechenden ID).

Zur Laufzeit und Abrufen des Objekts, kann ich ja dann einfach die Informationen nutzen, also:
  • Ich suche ein Dropbox File -> Call an Dropbox API
  • In "value" habe ich die FileId
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
L Datum - Monat und Jahr werden falsch angezeigt Java Basics - Anfänger-Themen 4
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
O HashTable kann ohne Performance-Verlust in Multithreaded-Anwendungen eingesetzt werden. Java Basics - Anfänger-Themen 6
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
R Audio kann nur zum Teil gestoppt werden Java Basics - Anfänger-Themen 1
berserkerdq2 sqllite in Java, wenn ich mache select count(*) ..., erhalte ich dann nur die gezählte Anzahl oder werden auch die Tabellen ausgegeben? Java Basics - Anfänger-Themen 2
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
docmas 2DArray Werte werden nur untereinander ausgegeben Java Basics - Anfänger-Themen 1
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
U Hauptklasse kann nicht gefunden werden Java Basics - Anfänger-Themen 8
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
C java.sql Statement kann nicht geschlossen werden Java Basics - Anfänger-Themen 9
LetsSebi Dateien werden nicht in Zip gespeichert Java Basics - Anfänger-Themen 1
D Codeblöcke, die immer wieder im Programmverlauf benötigt werden Java Basics - Anfänger-Themen 5
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
Zrebna Programm kann aus der Konsole nicht gestartet werden (in der IDE läuft es) Java Basics - Anfänger-Themen 2
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
H Eclipse kann nicht gestartet werden .... Java Basics - Anfänger-Themen 15
R Warum werden hier nur die grün und orangen Linien ausgegeben und der Rest unten nicht? Java Basics - Anfänger-Themen 5
J Eckige Klammern werden nicht erkannt Java Basics - Anfänger-Themen 1
J Klammern werden fälschlicherweise eingelesen Java Basics - Anfänger-Themen 2
Elyt Bei Monopoly werden Felder übersprungen Java Basics - Anfänger-Themen 2
Kirby.exe Hauptklasse konnte nicht gefunden werden.... Java Basics - Anfänger-Themen 27
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
L Muss eine HttpURLConnection geschlossen werden? Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
D java main methode kann nicht kompiliert werden (Erstellen eines Objekts) Java Basics - Anfänger-Themen 6
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
V Array, Symbol kann nicht gefunden werden Java Basics - Anfänger-Themen 2
S TableView Items werden nicht angezeigt (+Verständnisfragen) Java Basics - Anfänger-Themen 15
O Apache: Log-Settings werden nicht gezogen Java Basics - Anfänger-Themen 0
H LayoutRes, Nullable und SystemServices werden in LayoutInflater nicht importiert Java Basics - Anfänger-Themen 9
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
L Input/Output AudioInputStream kann nicht erstellt werden. Java Basics - Anfänger-Themen 3
E Die Hauptklasse konnte nicht gefunden werden. Java Basics - Anfänger-Themen 12
H Hauptklasse ... konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 8
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
S Hauptklasse konnte nicht gefunden werden Java Basics - Anfänger-Themen 0
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
A Harshad Zahlen sollen in einem Intervall ausgegeben werden Java Basics - Anfänger-Themen 8
M GUI Startbutton und Titel werden nicht angezeigt Java Basics - Anfänger-Themen 1
F Variablen JTextField-Inhalt kann nicht mit String abgeglichen werden Java Basics - Anfänger-Themen 2
F Interface JButtons werden nicht angezeigt... Java Basics - Anfänger-Themen 5
DaCrazyJavaExpert Bilder werden nicht angezeigt! Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert JLabels werden nicht angezeigt Java Basics - Anfänger-Themen 4
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
S Fehler: Hauptklasse bin.demo.Start konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 2
M Klassen Fehler: Hauptklasse konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 17
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
S Classpath "Hauptklasse konnte nicht gefunden oder geladen werden" Java Basics - Anfänger-Themen 6
T In Konsole darf nichts falsches eingetippt werden?! Java Basics - Anfänger-Themen 7
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
C AppletViewer-Eigenschaftendatei kann nicht gelesen werden Java Basics - Anfänger-Themen 0
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
H überprüfen ob in Array gleiche int-Zahlen gespeichert werden. Java Basics - Anfänger-Themen 7
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8
D Prozente werden falsch berechnet Java Basics - Anfänger-Themen 8
H javac.exe konnte nicht gefunden werden Java Basics - Anfänger-Themen 2
H Methoden können nicht verwendet werden Java Basics - Anfänger-Themen 10
P Programm kann über CMD nicht ausgeführt werden Java Basics - Anfänger-Themen 2
C Java Hauptklasse konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 14
J Kann der Typ eines Objekts ausgegeben werden? Java Basics - Anfänger-Themen 11
K Hauptklasse konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 3
N String kann nicht in Wochentag konvertiert werden Java Basics - Anfänger-Themen 6
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
B PATH kann nicht geändert werden Java Basics - Anfänger-Themen 2
J JDK installieren Hauptklasse .... konnte nicht geladen werden. Java Basics - Anfänger-Themen 4
K Klassen Hilfe - Hauptklasse kann nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 5
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
E Shell: Hauptklasse konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben