Open Source im professionellen Einsatz
Linux-Magazin 06/2017
557

Allesfänger Ruby

Auch Ruby kommt mit einem eingebauten HTTP-Modul namens »net/http« daher, allerdings muss es vor dem Absetzen des Requests die URL noch mit einer weiteren Klasse »URL« analysieren. Das ist für die Ruby-on-Rails-Hüpfer bereits zu viel Arbeit, die Entwickler haben deshalb schon einige Ruby-Gems geschaffen, die das Ganze in einem Aufwasch erledigen. Wie Python wirft Ruby Exceptions aus den Untiefen des Codes, deshalb kann der Entwickler auftretende Fehler zentral abfangen.

Listing 3 zeigt ab der Zeile 6 den Abfang-Block, der mit »begin« beginnt, ab »rescue« Fehler abfängt und schließlich mit »end« endet. Redirects folgt die Standardbibliothek in ihrer Grundeinstellung nicht. Die Webseite von Google.de interpretiert sie dann als »ASCII-8BIT« , was in diesem Fall wohl der von Python erkannten ISO-8859-1-Kodierung entsprechen dürfte.

Listing 3

http-get.rb

01 #!/usr/bin/ruby
02 require 'net/http'
03
04 url = URI.parse('http://www.google.com')
05
06 begin
07   rsp = Net::HTTP.get(url)
08   puts rsp
09 rescue Exception => e
10   puts "Error: " + e.message
11 end

Funktionales Node.js

Wer in einem Javascript-Snippet im Browser eine URL einholen oder Ähnliches im Node.js-Code auf der Server-Seite bewerkstelligen möchte, zum Beispiel auf einem Amazon-Lamda-Server [2], der muss sein Gehirn auf funktionalen Programmierstil umstellen. Denn Event-basierte Systeme ticken ja nicht nach dem Motto "Mach dies, warte bis es fertig ist, dann mach das", sondern wollen ihre Instruktionen in der Form "Mach dies, dann das, dann das … und los geht's" erhalten.

Der Grund dafür ist die Eventschleife, die immer nur kurze Callbacks ausführen kann, die Kontrolle zurück will und dann wieder vorbeischneit, falls langsam eintrudelnde Daten endlich von externen Schnittstellen eingetroffen sind. Diese Struktur erschwert die Lesbarkeit des Codes und erfordert viel Erfahrung beim Design von Softwarekomponenten, damit diese dann auch gut wartbar zusammenspielen.

Die gefürchtete Pyramide der Verdammnis [3] von verschachtelten Callbacks lässt sich mit einigen Konstrukten aufdröseln. Node 7.6 bringt neuerdings sogar Support für die Schlüsselwörter »async« und »await« mit, die asynchronen Code zur optischen Aufhübschung in ein synchrones Korsett pressen [4].

Listing 4 zeigt einen »get« -Call des HTTP-Moduls in Node.js. Neben der URL auf das gewünschte Webdokument nimmt es eine Funktion entgegen. Diese wird später mit einem Response-Objekt aufgerufen und definiert eine Closure mit einer Variable (»content« ) und drei Callbacks auf die Events »data« , »error« und »end« .

Listing 4

http-get.js

01 var http = require('http');
02
03 http.get("http://google.com", function(res) {
04     var content = '';
05
06     res.on('data', function(data) {
07       content += data;
08     });
09
10     request.on('error', function(err) {
11         console.log( err );
12     });
13
14     res.on('end', function() {
15       console.log( content );
16     });
17   });
18 }

Ersteren springt die Eventschleife jedes Mal an, wenn ein Schub Daten vom Server zurückkommt. Er sammelt die Datenpakete der Reihe nach ein und hängt sie in der Variablen »content« aneinander. Im Falle eines Fehlers kommt der »error« -Callback an die Reihe und schreibt in Zeile 11 die Ursache ins Log. Signalisiert der Server das Ende der Übertragung, springt die Eventschleife den »end« -Callback an, der den Inhalt von »content« ausgibt, wo sich zu diesem Zeitpunkt die gesamten Body-Daten der HTTP-Antwort befinden. Redirects folgt die Node.js-Bibliothek »/http« automatisch.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Perl-Snapshot

    Der Musikstreaming-Service Spotify pumpt gegen eine monatliche Gebühr Musik auf den Desktop und aufs Smartphone. Noch mehr Groove hat, dass Perl-Hacker Michael Schilli per Oauth-geschütztem Web-API seine Spotify-Playlisten für die Ewigkeit archiviert.

  • Perl-Snapshot

    Ist Perlmeister Schilli unterwegs, weiß er gern, was daheim abgeht. Mit zwei Skripten bekommt er es hin, dass die angeschaffte Billigkamera über das Tumblr-API zyklisch Schnappschüsse auf der Micro-Blogplattform ablegt. Tierisch schick, diese Überwachung.

  • Perl-Snapshot

    Ein Screenscraper und eine Applikation für das offizielle Ebay-API lösen Alarm bei neu eingegangenem Kunden-Feedback aus und spüren Fehler in der monatlichen Ebay-Abrechnung auf.

  • Perl-Snapshot

    Mit einer chinesischen Guillotine und einem Einzugsscanner bewaffnet geht Perlmeister Michael Schilli diesmal seinen Büchern an den Leim. Die Grundlage seiner bibliophoben Tat liefert Google Drive, das mit 5 GByte genug Speicherplatz für ein Online-PDF-Lager mit eingescannten Büchern bietet.

  • IRC-Bots

    Warum sollten Chaträume nur für Menschen da sein? Dominik Honnef zeigt, wie sich spezialisierte Bots in Wissensdatenbanken oder Ticketsysteme einbinden lassen und so die Arbeit erleichtern.

comments powered by Disqus

Ausgabe 06/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.