Según la solicitud, un enfoque simple similar a REST. Funciona casi de la misma manera que la solución de Codemwncis, pero usa el encabezado Accept para la negociación de contenido. Primero el archivo de rutas:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Aquí no especificas ningún tipo de contenido. En mi humilde opinión, hacerlo solo es necesario cuando desea tener URI "especiales" para ciertos recursos. Como declarar una ruta para /users/feed/
regresar siempre en Atom / RSS.
El controlador de la aplicación tiene este aspecto:
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);
}
Como puede ver, solo eliminé el método getUserJSON y cambié el nombre del método getUser. Para que funcionen diferentes tipos de contenido, ahora debe crear varias plantillas. Uno para cada tipo de contenido deseado. Por ejemplo:
usuario.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Este enfoque proporciona a los navegadores siempre la vista HTML, ya que todos los navegadores envían un tipo de contenido de texto / html en su encabezado Aceptar. Todos los demás clientes (posiblemente algunas solicitudes AJAX basadas en JavaScript) pueden definir su propio tipo de contenido deseado. Usando el método jQuerys ajax (), puede hacer lo siguiente:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Lo que debería brindarle los detalles sobre el usuario con el ID 1 en formato JSON. Actualmente, Play admite HTML, JSON y XML de forma nativa, pero puede usar fácilmente un tipo diferente siguiendo la documentación oficial o utilizando el módulo de negociación de contenido .
Si está utilizando Eclipse para el desarrollo, le sugiero que use el complemento de cliente REST que le permite probar sus rutas y su tipo de contenido correspondiente.