Blog

Einfacher Server-Mock für REST-Dienste

Michaël van Leeuwen

Aktualisiert Oktober 22, 2025
4 Minuten

Bei der Arbeit an einer mobilen Android-Anwendung war ich mit der Tatsache konfrontiert, dass der Backend-Server noch nicht verfügbar war, um den REST-Dienst bereitzustellen. Ich brauchte aber einen Server oder eine gute Attrappe, um den Android-Client mit den REST-Diensten zu testen. Also machte ich mich auf die Suche nach einem REST-Mock-Server.

Ich habe zunächst die SoapUI REST-Funktionalität verwendet, aber für meinen Zweck, auf REST-Aufrufe zu reagieren, fehlt noch eine gute Implementierung. Am Ende habe ich einen 10-minütigen REST-Mock mit dem Play-Framework selbst erstellt. In diesem Blog wird beschrieben, wie ich das geschafft habe.

Das Play-Framework ist mir vorhin über den Weg gelaufen. Es ist ein sehr einfaches und dennoch leistungsstarkes Anwendungsframework für Webanwendungen. Es ist fast trivial, es für das Mocking von REST-Diensten einzurichten. Stellen Sie zunächst sicher, dass Sie das Framework herunterladen und entpacken. Führen Sie dann die folgenden Befehle aus, um ein neues Projekt zu erstellen:

play new RestMockServer play eclipsify RestMockServer play run RestMockServer

Das Projekt wird ausgeführt und kann nun in Eclipse bearbeitet werden (siehe 'play help' für andere IDEs). Änderungen am Code und an der Konfiguration werden vom Framework automatisch aufgegriffen. Rufen Sie in Ihrem Browser einfach xebia.com/blog:9000/ auf, um die Anwendung laufen zu sehen.

Der nächste Schritt besteht darin, die REST-URLs in die Routing-Tabelle aufzunehmen. Nehmen wir an, ich erstelle ein System zum Speichern von Fotos mit Metadaten und der Bild-URL. Öffnen Sie die Datei 'conf/routes' und fügen Sie die folgenden Zeilen vor dem Eintrag 'Catch all' ein:

PUT /photo PhotoController.create POST /photo PhotoController.update GET /photo/{id} PhotoController.read DELETE /photo/{id} PhotoController.delete

Dies definiert die CRUD-Aktionen für ein Fotoobjekt. In der ersten Zeile steht die http-Methode, auf die das Framework reagieren soll. Der zweite Teil ist die URL mit optionalen Parametern, die auf die im ersten Teil angegebene Methode abgebildet werden.

Mit der folgenden Aktion definieren Sie einen Controller, der die Aufrufe verarbeitet. Die Implementierung verwendet eine sehr einfache Antworttechnik, die auf Text basiert. Die Zuordnung der ID zur eigentlichen Antwort wird dem Leser überlassen. Sie könnten z.B. eine Datei auf der Grundlage des URL-Parameters lesen und den Inhalt dieser Datei zurückgeben. Im Moment geben wir nur den in der URL angegebenen Bezeichner zurück.

Speichern Sie die folgende Datei als 'PhotoController.java' und rufen Sie

https://xebia.com/blog:9000/photo/123

und sehen Sie, wie Ihre Lieblingszahl auf dem Bildschirm angezeigt wird. Beachten Sie, dass der Name zwischen geschweiften Klammern mit dem Namen des Parameters übereinstimmen sollte. Die Zuordnung zum Typ wird vom Framework automatisch vorgenommen.

[java title="controllers/PhotoController.java"]
package controllers;
import java.util.Random;
import com.google.gson.JsonObject;
import play.mvc.Controller;
public class PhotoController extends Controller {
public static void read(int id) {
try {
response.contentType = "application/json";
renderText(id);
} catch (Exception e) {
notFound(e.getMessage());
}
}
}
[/java]

Der nächste Schritt ist die Implementierung der anderen Methoden. Da ich JSON als Datenformat verwende, muss ich einen speziellen Binder für den Typ JsonObject hinzufügen, der sowohl von der create- als auch von der update-Methode verwendet wird. Die 'ok'-Methode gibt lediglich einen 200-Statuscode zurück. Bei der Erstellung eines Objekts benötige ich den Bezeichner des neu gespeicherten Datenobjekts, also gebe ich zu Testzwecken eine zufällige Ganzzahl zurück.

Fügen Sie die folgenden Methodenimplementierungen zu PhotoController.java hinzu:

[java title="snippet"]
public static void delete(int id) {
ok();
}
public static void update(JsonObject body) {
ok();
}
public static void create(JsonObject body) {
response.contentType = "application/json";
renderText(""id":"+Math.abs(new Random().nextInt()));
}
[/java]

Der Binder wird auch automatisch vom Framework gefunden. Ich habe ein neues Paket 'util' erstellt, in das ich die folgende Klasse eingefügt habe:

[java title="util/GsonBinder.java"]
package util;
import java.lang.annotation.*;
import java.lang.reflect.Type;
import com.google.gson.*;
import play.data.binding.*;
@Global
public class GsonBinder implements TypeBinder<jsonobject> {
@Override
public Object bind(String name, Annotation[] a, String value, Class c, Type t) throws Exception
{
return new JsonParser().parse(value);
}
}
[/java]

Und das ist im Grunde alles, um Ihren Mock-Server für REST-Dienste mit dem Play-Framework einzurichten! Rufen Sie von Ihrem bevorzugten REST-Client die URL auf:

https://xebia.com/blog:9000/photo

mit einer PUT-Anfrage und setzen die Entität der Anfrage auf einen JSON-Inhalt.

Frohes Schaffen!

Verfasst von

Michaël van Leeuwen

Contact

Let’s discuss how we can support your journey.