Zum Testen/Debuggen der API verwenden die meisten Entwickler Postman, wobei ich hingegen curl bevorzuge. Da sich bei mir in den letzten anderthalb Jahren ein Repository mit verschiedensten Skripten angesammelt hat (Access-Token holen, abspeichern, Endpoint X/Y/Z damit aufrufen, etwas auswerten, usw.), und es den anderen Entwicklern mit ihren Postman-Sammlungen nicht anders geht, bin ich mit folgendem Vorschlag zur Geschäftsleitung gegangen: Wir schreiben einen Command Line Client für unsere API, der diesen ganzen Wildwuchs vereinheitlicht. Obendrein wird das als OpenSource-Projekt auf GitHub gemacht, sodass technisch versierte Kunden erstens sehen, wie man unsere API verwendet (Dokumentation ist schön und, Demonstration aber noch besser), und zweitens auch Prozesse damit automatisieren können. Obwohl da kein einziger Informatiker in diesem Gremium sitzt, konnte ich die Geschäftsleitung von dem Unterfangen überzeugen. Ich darf im Sommer einen Prototypen dafür bauen Wenn der dann gut ankommt, kann ich den im Herbst im Rahmen eines Studienprojektes weiterentwickeln. (Bis zum ersten Release soll also ich komplett alleine daran arbeiten.)
Nun ist die Frage, in welcher Programmiersprache ich das machen soll. Ich neige stark zu Go, könnte mir aber auch eine Umsetzung in Rust vorstellen. Meine Befürchtung ist aber, dass die anderen von mir eine Implementierung in Java erwarten, da dies bei uns schliesslich alle Backend-Entwickler können. (Ich wollte den Punkt noch nicht thematisieren, bevor ich mir eine Strategie zurechtgelegt habe.) Nun sehe ich folgende Argumente:
- Go ist offenbar für Kommandozeilenprogramme sehr gut geeignet, sonst wären docker (das CLI) und oc (OpenShift CLI), die bei uns im Einsatz sind, nicht damit geschrieben worden.
- Java erfordert die Installation einer JVM in der richtigen Major-Version. (Nicht alle unsere Entwickler sind Backend-Entwickler und haben das also nicht unbedingt installiert.) Go (oder Rust) erfordert nur ein einziges Binary und kein weiteres Setup.
- Niemand schreibt java -jar cli.jar ..., es bräuchte also Wrapper-Skripte (für Windows/macOS/Linux separat), damit die Parameter richtig gehandhabt werden.
- Go hat alles in der Standard Library, um damit einen REST-Client bauen zu können (http-Library, json-Marshalling, Library zum Parsen von Kommandozeilenargumenten). Bei Java ist man stärker auf externe Libraries angewiesen.
- Eine Java-Applikation dauert länger zum Starten. Wenn man längere Befehlsketten (über Pipes) mit mehreren iterativen Aufrufen (Listen abarbeiten) macht, könnte das schon träge werden.
- Für Java spricht, dass es andere Entwickler in der Firma schon kennen.
- Mache ich es in Go, könnte es so ausgelegt werden, dass ich die Firma von mir abhängig machen will. (Solche Andeutungen habe ich schon gehört.)
- EDIT: Bei einem Projekt, das auf GitHub gehostet wird, sollte man auch an die Aussenwirkung denken: Ich denke, dass man mit Go ein anderes Publikum anspricht als mit Java.
Was meint ihr dazu? Hattet ihr schon ähnliche Projekte? Oder musstet ihr schon einmal eine solche Entscheidung vor einem nicht-technischen Gremium begründen? Oder wäre vielleicht der Weg über meine Entwicklerkollegen der Richtige (Absprache, Umfrage)?