Come da richiesta, un semplice approccio simile a REST. Funziona quasi allo stesso modo della soluzione di Codemwncis, ma utilizza l'intestazione Accept per la negoziazione del contenuto. Prima il file delle rotte:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Non specifichi alcun tipo di contenuto qui. In questo modo IMHO è necessario solo quando si desidera avere URI "speciali" per determinate risorse. Come dichiarare una rotta per /users/feed/
tornare sempre in Atom / RSS.
Il controller dell'applicazione ha questo aspetto:
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);
}
Come puoi vedere, ho rimosso solo il metodo getUserJSON e rinominato il metodo getUser. Affinché diversi tipi di contenuto funzionino, ora è necessario creare diversi modelli. Uno per ogni tipo di contenuto desiderato. Per esempio:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Questo approccio offre ai browser sempre la visualizzazione HTML, poiché tutti i browser inviano un tipo di contenuto testo / html nell'intestazione Accept. Tutti gli altri client (possibilmente alcune richieste AJAX basate su JavaScript) possono definire il proprio tipo di contenuto desiderato. Usando il metodo jQuerys ajax () puoi fare quanto segue:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Che dovrebbe fornirti i dettagli sull'utente con ID 1 in formato JSON. Play attualmente supporta HTML, JSON e XML in modo nativo, ma puoi facilmente utilizzare un tipo diverso seguendo la documentazione ufficiale o utilizzando il modulo di negoziazione del contenuto .
Se stai usando Eclipse per lo sviluppo ti suggerisco di usare il plugin client REST che ti permette di testare i tuoi percorsi e il loro tipo di contenuto corrispondente.