Welche Scriptsprache nutzen für REST (Rest, JSON, CSV, Windows)

Hi,

Ích will ein kleines script programmieren bei dem ich:

  • einen REST service anspreche
  • JSON daten verarbeite
  • und CSV daten in ein file ausgebe

Jetzt suche ich eine Script Sprache die mir dabei hilft das einfach um zu setzten, so das ich nicht alles von Hand neu schreiben muss ( REST Request mit Authentifizierung, parsen und einfaches bearbeiten von JSON & CSV).

Das ganze soll dann auch auf Windows ohne große Installation (am besten mit einer portablen Installation für den sprach paser) laufen.

Welche Script Sprache würdet ihr empfehlen, und habt ihr ggf auch ein Tutorial das ihr gut findet und die Themen (REST requests, JSON, CSV) abdeckt?

LG & Danke,
Paul

Hallo,

ich würde das mit Go lösen.

Großer Vorteil ist hier, das es statische Binaries für alle wichtigen Plattformen (Windows, Linux, Mac) produzieren kann.

JSON Parsing ist einfach und extrem flott.
Passende Module findest du auf awesome-go.com

Gruß,
Steve

Hi!
ich würde Python nehmen.
Es ist eine der am weitesten verbreiteten Scriptsprachen überhaupt, daher gibt es tonnenweise Informationen dazu im Netz, und für eigentlich alles gibt es bereits Module (Libraries)

JSON ist mit einer Zeile in einen eingebauten Datentypen konvertiert, der 1:1 wie das JSON aussieht, und umgekehrt.

Für REST gibt es auch nen fertigen Client.

Und CSV ist Letztlich ne Textdatei. Die Ausgabe ist schnell zusammen geschrieben, es gibt aber auch dafür ein Modul

Unter Linux dürfte standardmäßig alles da sein, was du brauchst. Und unter Win lässt sich ne Exe erstellen.

Hey, Danke.

GO hatte ich eigentlich gar nicht am Radar.
Gibt es eine Seite/Tutorial die du für den schnellen Einstieg (prinzipiell kann ich ja imperativ / OOP programmieren (bin aber sicher bisschen aus der Übung)) empfehlen kannst oder wo ein sample mit REST+JSON gebaut wird?

LG,
Paul

Hallo,

grundsätzlich kann man hier gut einsteigen:

https://gobyexample.com/

Dort gibt es Beispiele für JSON und HTTP Client. Wenn du die zusammenfügst solltest du schon fast startklar sein.

Natürlich musst du noch die Datenstrukturen anlegen. Dabei kann dir diese Seite helfen. Sie nimmt JSON und konstruiert ein passendes struct für Go:

https://mholt.github.io/json-to-go/

Es gibt auch einen „Playground“, auf dem man Go schreiben kann. Gewisse Funktionen wie Netzwerk sind da natürlich gesperrt, kann aber trotzdem hilfreich sein.

https://play.golang.org/

Vermutlich wirst du am Anfang in ein paar Schwierigkeiten rennen. Go ist sehr strikt.

  • Variablen müssen immer definiert werden
  • Variablen sind strikt typisiert
  • Es darf keine ungenutzten Variablen geben
  • Es dürfen keine Module (Imports) geladen werden, die nicht verwendet werden

Das nervt am Anfang, aber wenn der Compiler erstmal ein Binary produziert tut das dann auch meistens was man erwartet. Ich habe mich da mittlerweile eingearbeitet und mag Go sehr.

Gruß,
Steve

Hi!
Hmmm, ich bin immernoch für Python.

JSON:

Der Datentyp dict ist JSON sehr ähnlich:

# Elemente hardcoded angeben:
myDict={"FirstName": "John", 
        "LastName":"Doe", 
        "Age":27,
        "IsAlive":True,
        "PhoneNumbers": [
                        {"type": "home","number": "212 555-1234"},
                        {"type": "office","number": "646 555-4567"}
                        ]
        }

#Elemente programmatisch hinzufügen:
myDict["Spouse"]=None

#Elemente lesen:
print("Last year, %s %s was %d years old"%(myDict["FirstName"], 
                                           myDict["LastName"], 
                                           myDict["Age"]-1))

print("His numbers:")
for i in myDict["PhoneNumbers"]:
    print(i["number"])

#Ausgabe:
#Last year, John Doe was 26 years old
#His numbers:
#212 555-1234
#646 555-4567

und lässt sich fix nach JSON konvertieren:

import json
#myDict=...Wie oben...
myJsonString=json.dumps(myDict)
print(myJsonString)

#Ausgabe:
#{"FirstName": "John", "LastName": "Doe", "Age": 27, "IsAlive": true, "PhoneNumbers": [{"type": "home", "number": "212 555-1234"}, {"type": "office", "number": "646 555-4567"}], "Spouse": null}

Zurückkonvertieren:

myDictFromJson=json.loads(myJsonString)
print("Today, %s is %d years old"%(myDictFromJson["FirstName"], myDictFromJson["Age"]))
#Ausgabe:
#Today, John is 27 years old

REST

Im Prinzip ist das Http(s), das mit den Methoden GET, POST, DELETE, … arbeitet.

Der folgende Code ruft ne URL mit Parametern auf, erledigt ne einfache Authentifizierung, schickt nen Header und platziert Daten per PUT. (Testen konnte ich das aber nicht)

topLevelUrl = "https://www.example.de"

headers={
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0',
'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
'Accept-Encoding':'gzip, deflate, br',
'DNT':'1'}

URLparameters={"Name": "Strauß&Söhne", "Status": "Veräußert/verkauft"} 


# Authentifizerung
pwManager = urllib.request.HTTPBasicAuthHandler()
pwManager.add_password(realm=None, uri=topLevelUrl, user="JohnDoe", passwd="test123456")
opener = urllib.request.build_opener(pwManager)
urllib.request.install_opener(opener)  

# URL mit Parametern basteln
url=topLevelUrl + "/cgi/?"+ urllib.parse.urlencode(URLparameters)
print (url)
#Ausgabe: 
#https://www.example.de/cgi/?Name=Strau%C3%9F%26S%C3%B6hne&Status=Ver%C3%A4u%C3%9Fert%2Fverkauft

# url öffnen, und PUT absetzen
request=urllib.request.Request(url, data=myJsonString, headers=headers, method='PUT')
f=urllib.request.urlopen(request)

print(f.getheaders())
print(f.read())       # body
print(f.status())     # status code vom Server