Zgodnie z żądaniem proste podejście podobne do REST. Działa prawie tak samo, jak rozwiązanie Codemwncis, ale używa nagłówka Accept do negocjacji zawartości. Najpierw plik tras:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Nie określasz tutaj żadnego typu treści. Takie postępowanie jest konieczne tylko wtedy, gdy chcesz mieć „specjalne” identyfikatory URI dla określonych zasobów. Podobnie jak deklarowanie trasy do, /users/feed/
aby zawsze powracała w Atom / RSS.
Kontroler aplikacji wygląda następująco:
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);
}
Jak widać, usunąłem tylko metodę getUserJSON i zmieniłem nazwę metody getUser. Aby różne typy treści działały, musisz teraz utworzyć kilka szablonów. Po jednym dla każdego typu treści. Na przykład:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Takie podejście zapewnia przeglądarkom zawsze widok HTML, ponieważ wszystkie przeglądarki wysyłają tekst / html typu treści w nagłówku Accept. Wszyscy inni klienci (prawdopodobnie niektóre żądania AJAX oparte na JavaScript) mogą definiować własne pożądane typy zawartości. Używając metody jQuerys ajax (), możesz wykonać następujące czynności:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Który powinien dostarczyć Ci szczegółowych informacji o użytkowniku o identyfikatorze 1 w formacie JSON. Play obsługuje obecnie natywnie HTML, JSON i XML, ale możesz łatwo użyć innego typu, postępując zgodnie z oficjalną dokumentacją lub korzystając z modułu negocjacji treści .
Jeśli używasz Eclipse do programowania, sugeruję użycie wtyczki klienta REST, która pozwala przetestować trasy i odpowiadający im typ zawartości.