Eintauchen in ein Java-Projekt
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.
bytechefhq
/
Bytechef
Open-Source-Plattform für erweiterbare API-Integration und Workflow-Automatisierung mit geringem Codeaufwand. Integrieren Sie Ihre Organisationen oder Ihr SaaS-Produkt mit einer beliebigen Drittanbieter-API
API-Integrations- und Workflow-Automatisierungsplattform
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.
Was ist ByteChef?
ByteChef ist eine Open-Source-, Low-Code- und erweiterbare API-Integrations- und Workflow-Automatisierungsplattform. ByteChef kann Ihnen helfen als:
- Eine Automatisierungslösung, mit der Sie Automatisierungsworkflows in Ihre SaaS-Apps, internen APIs und Datenbanken integrieren und erstellen können.
- Eine eingebettete Lösung, die speziell auf SaaS-Produkte ausgerichtet ist und es Ihren Kunden ermöglicht, von ihnen verwendete Anwendungen in Ihr Produkt zu integrieren.
Hauptfunktionen
- Intuitiver UI-Workflow-Editor: Erstellen und visualisieren Sie Workflows über den UI-Editor, indem Sie Komponenten per Drag-and-Drop verschieben und ihre Beziehungen definieren.
- Ereignisgesteuerte und geplante Arbeitsabläufe: Automatisieren Sie geplante und ereignisgesteuerte Arbeitsabläufe in Echtzeit über eine einfache Triggerdefinition.
- Mehrere Flusskontrollen: Nutzen Sie die Palette verschiedener Flusskontrollen wie Bedingung, Schalter, Schleife, jeweils, parallel usw.
- Eingebauter Code…
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.
Baserow – Aktion „Zeile aktualisieren“.
#1645

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:
- Tabellen-ID – ID der Tabelle, für die Sie eine Zeile aktualisieren möchten
- Zeilen-ID – ID der Zeile, die Sie aktualisieren möchten
- user_field_names – Ein boolescher Wert, der angibt, ob die von diesem Endpunkt zurückgegebenen Feldnamen die tatsächlichen Namen der Felder sein sollen
- Felder – eine Karte der Felder und ihrer neuen Werte für die Tabelle. Diese Eigenschaft gibt die in der Zeile zu aktualisierenden Daten an, sodass Benutzer mehrere Felder in einem einzigen Vorgang ändern können.
Ausgabe:
- Zeile – aktualisiertes Zeilenobjekt, das alle Datenfelder und Werte enthält, die der Zeile in der angegebenen Tabelle zugeordnet sind
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.
4 Tage später
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.
Am nächsten Tag
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.
Erstellen Sie die Aktion „Zeile aktualisieren“ für die Baserow-Komponente
#1656

Beschreibung
Behebt #1645
Art der Änderung
- Neue Funktion (nicht unterbrechende Änderung, die Funktionalität hinzufügt)
- Diese Änderung erfordert eine Aktualisierung der Dokumentation
Wie wurde das getestet?
- Getestet mit dem BaserowComponentHandler-Definitionstest, der aktualisiert wurde, um die neue Aktion zu berücksichtigen.
- Manuell getestete Aktion durch den Kunden:
Checkliste:
- [x] Mein Code folgt den Stilrichtlinien dieses Projekts
- [x] Ich habe eine Selbstüberprüfung meines eigenen Codes durchgeführt
- [ ] Ich habe meinen Code kommentiert, insbesondere in schwer verständlichen Bereichen
- Keine Kommentare als notwendig erachtet, da die bestehende Aktion auch keine Kommentare enthält
- [x] Ich habe entsprechende Änderungen an der Dokumentation vorgenommen
- [x] Meine Änderungen generieren keine neuen Warnungen
- [x] Ich habe Tests hinzugefügt, die beweisen, dass mein Fix effektiv ist oder dass meine Funktion funktioniert
- [x] Neue und bestehende Unit-Tests werden lokal mit meinen Änderungen bestanden
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...

Wie erkennt die Redis -Caching -Lösung die Anforderungen der Produktranking -Liste? Während des Entwicklungsprozesses müssen wir uns häufig mit den Anforderungen der Ranglisten befassen, z. B. das Anzeigen eines ...
