Selon la demande, une approche simple de type REST. Cela fonctionne presque de la même manière que la solution de Codemwncis, mais utilise l'en-tête Accept pour la négociation de contenu. D'abord le fichier des routes:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Vous ne spécifiez aucun type de contenu ici. Cela n'est à mon humble avis nécessaire que lorsque vous souhaitez avoir des URI "spéciaux" pour certaines ressources. Comme déclarer une route vers /users/feed/
pour toujours revenir dans Atom / RSS.
Le contrôleur d'application ressemble à ceci:
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);
}
Comme vous pouvez le voir, j'ai seulement supprimé la méthode getUserJSON et renommé la méthode getUser. Pour que différents types de contenu fonctionnent, vous devez maintenant créer plusieurs modèles. Un pour chaque type de contenu souhaité. Par exemple:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Cette approche donne aux navigateurs toujours la vue HTML, puisque tous les navigateurs envoient un type de contenu texte / html dans leur en-tête Accept. Tous les autres clients (éventuellement certaines requêtes AJAX basées sur JavaScript) peuvent définir leur propre type de contenu souhaité. En utilisant la méthode jQuerys ajax (), vous pouvez effectuer les opérations suivantes:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Ce qui devrait vous donner les détails sur l'utilisateur avec l'ID 1 au format JSON. Play prend actuellement en charge HTML, JSON et XML de manière native, mais vous pouvez facilement utiliser un type différent en suivant la documentation officielle ou en utilisant le module de négociation de contenu .
Si vous utilisez Eclipse pour le développement, je suggère d'utiliser le plugin client REST qui vous permet de tester vos routes et leur type de contenu correspondant.