Auf Anfrage ein einfacher REST-ähnlicher Ansatz. Es funktioniert fast genauso wie die Lösung von Codemwncis, verwendet jedoch den Accept-Header für die Inhaltsverhandlung. Zuerst die Routendatei:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Sie geben hier keinen Inhaltstyp an. Dies ist meiner Meinung nach nur erforderlich, wenn Sie "spezielle" URIs für bestimmte Ressourcen haben möchten. Als würde man eine Route deklarieren, /users/feed/
um immer in Atom / RSS zurückzukehren.
Der Anwendungscontroller sieht folgendermaßen aus:
public static void createUser(User newUser) {
newUser.save();
user(newUser.id);
}
public static void updateUser(Long id, User user) {
User dbUser = User.findById(id);
dbUser.updateDetails(user); // some model logic you would write to do a safe merge
dbUser.save();
user(id);
}
public static void deleteUser(Long id) {
User.findById(id).delete();
renderText("success");
}
public static void user(Long id) {
User user = User.findById(id)
render(user);
}
Wie Sie sehen, habe ich nur die Methode getUserJSON entfernt und die Methode getUser umbenannt. Damit verschiedene Inhaltstypen funktionieren, müssen Sie jetzt mehrere Vorlagen erstellen. Eine für jeden gewünschten Inhaltstyp. Beispielsweise:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Dieser Ansatz gibt Browsern immer die HTML-Ansicht, da alle Browser einen Text- / HTML-Inhaltstyp in ihrem Accept-Header senden. Alle anderen Clients (möglicherweise einige JavaScript-basierte AJAX-Anforderungen) können ihren eigenen gewünschten Inhaltstyp definieren. Mit der Methode jQuerys ajax () können Sie Folgendes tun:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Damit sollten Sie die Details zu Benutzer mit der ID 1 im JSON-Format erhalten. Play unterstützt derzeit HTML, JSON und XML nativ. Sie können jedoch problemlos einen anderen Typ verwenden, indem Sie entweder der offiziellen Dokumentation folgen oder das Modul für die Inhaltsverhandlung verwenden .
Wenn Sie Eclipse für die Entwicklung verwenden, empfehle ich die Verwendung des REST-Client-Plugins, mit dem Sie Ihre Routen und den entsprechenden Inhaltstyp testen können.
Dies ist immer noch eine beliebte Frage, aber die Antworten mit den höchsten Stimmen sind mit der aktuellen Version des Spiels nicht auf dem neuesten Stand. Hier ist ein funktionierendes REST-Beispiel mit Play 2.2.1:
conf / route:
app / controller / UserController.java:
quelle
Verwenden Sie Play! alles zu tun. Das Schreiben von REST-Diensten in Play ist sehr, sehr einfach.
Erstens macht es die Routendatei einfach, Routen zu schreiben, die dem REST-Ansatz entsprechen.
Anschließend schreiben Sie Ihre Aktionen für jede API-Methode, die Sie erstellen möchten, in den Controller.
Abhängig davon, wie Sie das Ergebnis zurückgeben möchten (XML, JSON usw.), können Sie einige Methoden verwenden. Mit der renderJSON-Methode können die Ergebnisse beispielsweise sehr einfach gerendert werden. Wenn Sie XML rendern möchten, können Sie dies genauso tun, wie Sie ein HTML-Dokument in Ihrer Ansicht erstellen würden.
Hier ist ein gutes Beispiel.
Routendatei
Anwendungsdatei
getUser.xml Datei
quelle
Die Integration in eine JAX-RS-Implementierung ist ein möglicher alternativer Ansatz zur Verwendung des integrierten HTTP-Routings von Play. Ein RESTEasy-Beispiel finden Sie im RESTEasy Play! Modul .
Dieser Ansatz ist sinnvoll, wenn Sie bereits in JAX-RS investiert sind oder wenn Sie einige der erweiterten Funktionen von REST benötigen, die JAX-RS bietet, z. B. die Aushandlung von Inhalten. Wenn nicht, wäre es einfacher, Play direkt zu verwenden, um JSON oder XML als Antwort auf HTTP-Anforderungen bereitzustellen.
quelle
du solltest einen Blick darauf werfen
http://www.lunatech-labs.com/open-source/resteasy-crud-play-module
Es ist ein Modul zum Spielen, das automatisch eine Rest-Schnittstelle erstellt, genau wie das Crud-Modul automatisch einen Administrationsbereich erstellt ...
quelle
Es scheint, dass dieser Ansatz in Play Version 1.2.3 gebrochen ist. Wenn Sie die von @seb erstellte und zuvor erwähnte Quelle https://github.com/sebhoss/play-user-sample herunterladen , ist die Erstellung eines neuen Benutzerobjekts mithilfe von POST mit einem JSON-Objekt nicht mehr möglich.
Sie müssen bestimmte Methoden für die Erstellung mit json- und xml-POSTs durchführen lassen. Hier beschrieben: https://groups.google.com/forum/#!topic/play-framework/huwtC3YZDlU
quelle