Vor einiger Zeit musste ich für ein Projekt eine HTTP-Nachricht an ein anderes System übermitteln. Der andere Endpunkt war noch in Entwicklung und ich hatte keinen Endpunkt, um meine Nachrichten zu prüfen. Auf der Suche nach einem "Dummy Endpunkt" bin ich über den Echoserver gestolpert.
In diesem Artikel stelle ich euch den Echoserver vor und wie ihr damit arbeiten könnt.

Funktionsweise

Dieser Server nimmt alle Anfragen an, unabhängig vom Pfad, und gibt ein OK sowie die Daten zurück. Die Daten umfassen u.a. Header, Body und den Pfad der HTTP-Anfrage.
Er eignet sich also perfekt dazu, seine Anwendung zu testen bzw. während der Entwicklung zu prüfen, ob die Pfade und Daten stimmen.
Da der Server auf alle URL-Pfade reagiert, kann jeder Endpunkt simuliert werden.

Hinweis am Rande: Ein Integrationstest mit dem richtigen System sollte trotzdem durchgeführt werden. Es hilft euch aber während der Entwicklung, wenn der Endpunkt noch nicht vorhanden ist.

Starten des Echoservers

Gefunden habe ich den Echoserver auf NPM:
https://www.npmjs.com/package/http-echo-server

Wenn ihr NodeJS installiert habt, kann der Server mit 2 einfachen Zeilen gestartet werden.

# Installation
npm i http-echo-server

# Starten des Serves mit Standardport (3000) oder
# eigenem Port (6789)
npx http-echo-server
npx http-echo-server 6789

# Ausgabe, wenn der Server läuft
> [server] event: listening (port: 3000)

Verwendung

Um die Ausgabe zu simulieren, erstelle ich einen Aufruf mit Insomnia. Insomnia ist ein REST-Client ähnlich zu Postman. Ich kann dort eine beliebige URL, Methode, Body und Header angeben.
Zudem ist Insomnia in der Lage ein Snippet für eure Programmiersprache zu erzeugen oder den cURL-Aufruf zu exportieren.

Nehmen wir an, wir möchten einen neuen Benutzer anlegen und der Endpunkt lautet https://service.example.com/api/v2/user/createNewUser. Um den Echoserver anzubinden ändern wir nur den Hostnamen, sodass wir http://localhost:3000/api/v2/user/createNewUser aufrufen.

In Insomnia sieht das folgendermaßen aus:

Screenshot von Insomnia mit dem Echoserver und Beispieldaten

In Insomnia habe ich einige Beispieldaten eingetragen und einen eigenen Header übergeben. Der cURL-Request sieht folgendermaßen aus:

curl --request POST \
  --url http://localhost:3000/api/v2/user/createNewUser \
  --header 'Content-Type: application/json' \
  --header 'MyUserId: 1234' \
  --data '{
	"user": {
		"firstName": "Max",
		"lastName": "Mustermann",
		"birthday": "2022-01-01"
	}
}'

Als Ergebnis liefert der Server die Daten aufgeschlüsselt zurück wie den Pfad, Host, Methode und Body der Anfrage.

POST /api/v2/user/createNewUser HTTP/1.1
Host: localhost:3000
User-Agent: insomnia/2022.1.1
Content-Type: application/json
MyUserId: 1234
Accept: */*
Content-Length: 94

{
	"user": {
		"firstName": "Max",
		"lastName": "Mustermann",
		"birthday": "2022-01-01"
	}
}

Parallel dazu gibt der Echoserver die Daten auch in der Konsole aus. Dadurch können die gesendeten Daten parallel ohne Debugger angeschaut und geprüft werden.

Bonus: Dockerfile

Als kleinen Bonus findet ihr hier ein kleines Dockerfile und Codebeispiel, wie ihr den Echoserver mit wenigen Zeilen via Docker betreiben könnt:

# Dockerfile für den Echoserver
FROM node:16-alpine

RUN npm install http-echo-server -g
EXPOSE 3000

CMD ["npx", "http-echo-server"]
# Konsolenbefehle zum Erstellen des Images 
# und Starten des Containers
docker build -t echoserver .
docker run -p 3000:3000 echoserver

Fazit

Der Echoserver ist eine gute Möglichkeit eurer Anwendung einen Endpunkt mitzugeben, um beispielsweise (noch) nicht vorhandene Endpunkte zu simulieren. Das Projekt ist sehr einfach gehalten und eigene Rückgabewerte sind nicht möglich.
Falls eure Anwendung bspw. nur Daten überträgt und den Http-Status prüft ist der Echo-Server gut geeignet, um als Platzhalter zu dienen.