25.062014

Ein Echo wenn man es braucht

Vor kurzem entwickelte ich eine abstrakte Klasse, die ein paar Parameter entgegen nimmt. Aus diesen Parametern wird eine HTTP-Anfrage, diese abgesetzt und die HTTP-Antwort auf passende Bestandteile untersucht. Diese Klasse wollte ich möglichst einfach, möglichst schnell testen. Am einfachsten, so dachte ich, wäre dies mit einem Echo-Dienst machbar -- der wäre sicherlich auch schnell geschrieben. Nun ist ja aber jedes Ei bereits gelegt (so gab es lange vor Occulus Rift den VirtualBoy, aber ich schweife ab...), und die Recherche ergab, dass Brian Cantoni den Nutzen eines solchen Dienstes lange vor mir sah, ihn umsetzte und für uns alle zur Verfügung gestellt hat: scooterlabs/echo. Das Echo wird einfach unter http://scooterlabs.com/echo angesprochen. Die Antwort auf eine leere Anfrage, d.h. eine Anfrage ohne POST der GET Parameter, sieht dabei so aus:

Simple webservice echo test: make a request to this endpoint to return the HTTP request parameters and headers. Results available in plain text, JSON, or XML formats. See http://www.cantoni.org/2012/01/08/simple-webservice-echo-test for more details, or https://github.com/bcantoni/echotest for source code.

Array
(
    [method] => GET
    [headers] => Array
        (
            [Host] => scooterlabs.com
            [User-Agent] => Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
            [Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
            [Accept-Language] => en-US,en;q=0.5
            [Accept-Encoding] => gzip, deflate
            [Cookie] => __utma=124830600.1617922154.1400854591.1400854591.1403178691.2; __utmz=124830600.1400854591.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=124830600.2.10.1403178691; __utmc=124830600
            [Connection] => keep-alive
        )

    [request] => Array
        (
        )

    [client_ip] => 91.51.93.135
    [time_utc] => 2014-06-19T12:05:24+0000
    [info] => Echo service from Scooterlabs (http://www.scooterlabs.com)
)

Der Dienst gibt alle Informationen über die Anfrage strukturiert als einfachen Text, im XML- oder JSON Format zurück. Etwaige Parameter findet man unter dem key 'request'. Die Auswahl des Rückgabeformats ist denkbar einfach: Man fügt das gewünschte Format mit Punkt getrennt der URI hinzu: http://scooterlabs.com/echo.json

{

    "method": "GET",
    "headers": {
        "Host": "scooterlabs.com",
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.5",
        "Accept-Encoding": "gzip, deflate",
        "Cookie": "__utma=124830600.1617922154.1400854591.1400854591.1403178691.2; __utmz=124830600.1400854591.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=124830600.2.10.1403178691; __utmc=124830600",
        "Connection": "keep-alive"
    },
    "request": [ ],
    "client_ip": "91.51.93.135",
    "time_utc": "2014-06-19T12:08:38+0000",
    "info": "Echo service from Scooterlabs (http://www.scooterlabs.com)"

}

Ein einfacher Dienst, der vermutlich gerade wegen dieser Einfachheit vielseitig einzusetzen ist. Aber Caveat Emptor: Beim Test von Komponenten die sensitive Daten entgegennehmen sollte man natürlich keine echten Daten zum Echotest verwenden -- und wenn die Tests Teil einer Suit sind, die regelmäßig läuft, sollte man daran denken, einen eigenen Service aufzusetzen - oder vernünftiger zu testen. Aber für den kleinen Test zwischendurch, der schnell geschrieben und genutzt werden soll, ist Brians Service ein nettes Geschenk an die Entwicklergemeinde.