Für meinen letzten Hacktoberfest-Beitrag habe ich an einem Projekt namens Bytechef gearbeitet. Bytechef ist eine Low-Code-API-Integrations- und Workflow-Automatisierungsplattform. Sie können mit einer großen Liste unterstützter Dienste über deren APIs interagieren, indem Sie verschiedene Komponenten hinzufügen und verbinden, um Kontrollflüsse zu erstellen, die die Antworten der APIs verwenden können.
Website – Dokumentation – Discord – Twitter
UPDATE: ByteChef befindet sich in der aktiven Entwicklung. Wir befinden uns in der Alpha-Phase und einige Funktionen fehlen möglicherweise oder sind deaktiviert.
ByteChef ist eine Open-Source-, Low-Code- und erweiterbare API-Integrations- und Workflow-Automatisierungsplattform. ByteChef kann Ihnen helfen als:
Meine Aufgabe bestand darin, einer Komponente für einen Datenbankdienst namens Baserow eine neue Funktion hinzuzufügen. Die Funktion, an der ich arbeiten musste, war eine „Aktion“ (d. h. eine Funktion der Komponente), die es der Komponente ermöglichte, eine Zeile in der Datenbank zu aktualisieren.
Implementieren Sie die Aktion „Zeile aktualisieren“ für die Baserow-Komponente, um Benutzern das Ändern bestimmter Zeilen innerhalb einer Tabelle in ihrer Baserow-Datenbank zu ermöglichen.
Aktionseigenschaften:
Ausgabe:
Dokumentationsreferenz: https://baserow.io/api-docs
</div> <div class="gh-btn-container"><a class="gh-btn" href="https://github.com/bytechefhq/bytechef/issues/1645">View on GitHub</a></div>
Ich habe Java nur sehr wenig verwendet, bevor ich mich für dieses Problem angemeldet habe. Ich habe im Rahmen eines Schulkurses bisher nur kleine JavaFX-Programme erstellt, wollte aber schon immer mehr lernen. Ich hatte in meiner Freizeit ein wenig davon gelernt, sodass ich mit Konzepten wie Paketen, Zugriffsmodifikatoren, Abhängigkeiten und Gradle, dem vom Projekt verwendeten Build-Tool, einigermaßen vertraut war. Das Wissen darüber machte es definitiv viel weniger einschüchternd, in dieses Projekt einzusteigen. Ich habe die Projektstruktur verstanden, weil ich gelernt hatte, wie Gradle-Projekte aus Unterprojekten und Unterpaketen mit jeweils unterschiedlichen Build-Konfigurationen bestehen.
Meine Klassenkameradin Arina bemerkte, dass wir beide am selben Projekt arbeiteten, und sie war so freundlich, mir einige Hinweise zu geben, indem sie auf die Entwicklerdokumentation zum Hinzufügen einer Komponente und auf eine Aktion verlinkte, die bereits für die Komponente definiert worden war. Das bedeutete, dass ich das Repository nicht selbst durchsuchen musste, um die relevanten Dateien/Verzeichnisse zu finden. Aber wenn ich müsste, hätte ich Git Grep, die Codesuche von GitHub oder die Suche von IntelliJ verwendet. Ich habe Git Blame verwendet, um den Verlauf der Komponente zu überprüfen, an der ich arbeiten wollte, und habe festgestellt, dass alles in einem Commit entwickelt wurde.
Die beitragenden Dokumente des Projekts waren sehr einfach zu befolgen und enthielten detaillierte Schritt-für-Schritt-Anweisungen. Aber das Projekt schien noch sehr jung zu sein – mir sind ein paar README-Dateien aufgefallen, in denen nur //TODO.
standIch habe versucht, das Programm zu kompilieren und auszuführen, bevor ich meine Änderungen vorgenommen habe, um zu sehen, wie es funktioniert, aber es war ein schwieriger Prozess. Hier ist ein Blick auf die Notizen, die ich gemacht habe:
Nachdem die Kompilierung abgeschlossen war (was über eine Stunde gedauert hat), habe ich sie ausgeführt, damit ich die vorhandene Komponente überprüfen konnte. Ich habe versucht, ein Konto für die Verwendung des Clients zu erstellen, aber das ließ sich nicht zulassen. Also ging ich zurück zum beitragenden Dokument und stellte fest, dass es ein Administratorkonto enthält, das für die Entwicklung verwendet werden kann und das meiner Meinung nach erstellt wird, wenn Sie Docker ausführen -komponieren.
Sobald ich angemeldet war, habe ich versucht, eine Baserow-Komponente zu erstellen, aber der Client war etwas langsam, sodass ich versehentlich ein Duplikat erstellt habe. Als ich versuchte, es zu löschen, fror der Client ein, also klickte ich auf „Aktualisieren“ und bekam Serverfehler und eine Zeitüberschreitung des Clients. Ich habe versucht, den Server und den Client neu zu starten, aber es hat lange gedauert – es schien mir, als würde es wieder eine Stunde dauern. Nachdem ich ungefähr 16 Minuten gewartet hatte, gab ich Schluss und beschloss, später daran zu arbeiten.
Ich fürchtete mich davor, zu diesem Projekt zurückzukehren und mich mit der einstündigen Kompilierungszeit auseinandersetzen zu müssen, aber da sich das Hacktoberfest seinem Ende näherte, hatte ich keine große Wahl. Stellen Sie sich also meine Überraschung vor, als das Projekt ohne Fehler erstellt wurde und in weniger als fünf Minuten betriebsbereit war. Was hat sich geändert? Ich habe keine Ahnung.
Also bin ich auf den Client gesprungen und habe die Baserow-Komponente gefunden.
Abbildung – Die Baserow-Komponente und die darauf vorhandenen Aktionen
Um die Aktion „Zeile erstellen“ hinzuzufügen, musste ich mir die Baserow-API-Dokumentation ansehen, die mir vom Betreuer verlinkt wurde. Ich musste ein Baserow-Konto erstellen, um die Dokumente anzuzeigen, was ich etwas seltsam fand, aber es war auch keine große Sache.
Also habe ich die vorhandene Aktion „Zeile erstellen“ getestet und bin auf einen Fehler gestoßen, bei dem auf der gesamten Seite eine Fehlermeldung angezeigt wurde. Ich dachte, ich hätte einen unerwarteten Wert eingegeben, aber später stellte ich fest, dass dieser Fehler bereits von einem separaten Problem verfolgt wurde, das nichts mit meinem zu tun hatte.
Bei einem anschließenden Testversuch war die Aktion „Zeile erstellen“ erfolgreich, daher entschied ich, dass es sich gut eignet, sie zu untersuchen, um zu verstehen, wie Aktionen erstellt werden. Anschließend habe ich Querverweise auf das Problem, die bestehende Maßnahme und die beitragenden Dokumente erstellt.
Ich habe gelernt, dass Aktionen durch die Definition der erforderlichen Eingabeparameter, des Ausgabeschemas und einer Methode erstellt werden, die den tatsächlichen Prozess definiert, den die Aktion ausführt.
In der Aktion „Zeile erstellen“ habe ich gesehen, dass es eine Methode zum Abrufen der Felder für eine Zeile der Tabelle gibt, die zum Definieren der Eingabeparameter verwendet wurde. Mir wurde klar, dass ich dies in meiner Aktion verwenden könnte, aber der Name war so, als ob er nur für die Aktion „Zeile erstellen“ gedacht wäre. Ich hielt es für sinnvoll, es zu verwenden, also nutzte ich es und beschloss, es den Betreuern mitzuteilen.
Beim Lesen der Baserow-API-Dokumente habe ich erfahren, dass man zum Aktualisieren einer Zeile eine HTTP-Methode namens „PATCH“ verwendet, von der ich nicht einmal wusste, dass sie existiert. Ein PATCH ist wie ein PUT, aber anstatt die Ressource zu ersetzen, verändert er sie teilweise. Interessantes Zeug.
Also begann ich tatsächlich, meine Aktion zu schreiben, und konnte so ziemlich den gesamten Code aus der vorhandenen Aktion übernehmen. Ich musste nur geringfügige Anpassungen an den akzeptierten Parametern vornehmen (ich habe eine Zeilen-ID hinzugefügt, um die zu aktualisierende Zeile zu identifizieren), dem Ausgabeschema und der aufgerufenen Methode (Endpunkt und HTTP-Methode geändert). Um die Zeilen-ID zu berücksichtigen, musste ich einer Datei im Unterverzeichnis „constant/“ eine Konstante hinzufügen, die alle mit der Baserow-Komponente verbundenen Konstanten enthielt.
Mir ist aufgefallen, dass alle vorhandenen Quellcodedateien einen Lizenzheader hatten, also habe ich ihn auch in meine kopiert. Ich habe meine Importe organisiert, meinen Code formatiert und es war Zeit, ihn manuell zu testen.
An diesem Punkt ist mir aufgefallen, dass die Beschreibung für die Aktion „Zeile erstellen“ (die bereits existierte) falsch war – es hieß, sie erstelle eine Zeile in einer Beispieldatenbank in Baserow, auf die sie namentlich verwies, anstatt nur zu sagen, dass man sie erstellen könne eine Reihe. Ich habe mir vorgenommen, dies auch den Betreuern mitzuteilen:
Abbildung – Falsche Beschreibung für die Komponente „Zeile erstellen“
Meine Aktion wurde im Client angezeigt und optisch sah alles gut aus:
Der Titel und die Beschreibung wurden angezeigt:
Die Eigenschaften (d. h. Eingabeparameter) wurden angezeigt:
Der Workflow wurde erfolgreich ausgeführt und ich habe eine erfolgreiche Antwort erhalten:
Und die Tabelle wurde in meinem Baserow-Konto aktualisiert:
Ich war mit meinen Änderungen zufrieden, also habe ich das Formatierungsprogramm und die Tests ausgeführt, aber die Tests schlugen fehl, weil bei einem der Tests erwartet wurde, dass die Baserow-Komponente nur eine Aktion ausführen würde. Ich habe den Test aktualisiert, um ihn an meine neue Aktion anzupassen, und ein Skript ausgeführt, das automatisch eine Dokumentation für die Komponente generierte. Als ich die Tests erneut durchführte, wurden sie bestanden, ich musste jedoch noch einen Komponententest für meine Aktion hinzufügen. Ich habe mir den Komponententest für die vorhandene Komponente angesehen und war ratlos. Ich kam zu dem Schluss, dass ich gute Fortschritte gemacht hatte, also machte ich Schluss, erstellte einen PR-Entwurf und informierte den Betreuer über die Probleme, die mir aufgefallen waren.
Obwohl der vorhandene Test beängstigend aussah, blieb mir nicht viel anderes übrig, als auch einen für meine Aktion hinzuzufügen, also ging ich zurück und versuchte zu verstehen, was im vorhandenen Test vor sich ging. Ich habe mir die verwendeten Testbibliotheken ein wenig angesehen – JUnit Jupiter und Mockito. Ich habe versucht, es Stück für Stück aufzuschlüsseln, und habe ein LLM verwendet, um zu verstehen, was in jeder Zeile vor sich ging. Aber um ehrlich zu sein, hatte ich immer noch nur eine vage Vorstellung davon, was vor sich ging. Ich wusste, dass ich mich über die Baserow-API lustig machte und die Methode meiner Aktion darauf aufrief, aber das war auch schon der Rahmen meines Verständnisses.
Anscheinend war es aber gut genug. Ich habe meine PR als zur Überprüfung bereit markiert und der Betreuer hat meine Änderungen akzeptiert! Sie gaben einige Rückmeldungen – ich habe einige Teile des Beitragsflusses vergessen, obwohl ich sie gelesen hatte. Beim nächsten Mal sollte ich die beitragenden Dokumente überprüfen, bevor ich die Pull-Anfrage erstelle.
Behebt #1645
Ich empfand die anfängliche Einrichtung und das Schreiben des Tests als die einschüchterndsten Teile dieses Problems. Das Hinzufügen der Funktion war im Vergleich dazu ein Kinderspiel. Aber was ich an diesem Problem wirklich cool fand, war, dass ich dank der gut gepflegten Dokumentation und des leicht verständlichen Codes zu einem Projekt in einer Sprache beitragen konnte, die ich nicht so gut kannte.
Und das war meine letzte PR für das Hacktoberfest 2024! Zusammenfassungsbeitrag folgt bald!
Das obige ist der detaillierte Inhalt vonEintauchen in ein Java-Projekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!