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.
Esta sigue siendo una pregunta popular, pero las respuestas más votadas no están actualizadas con la versión actual del juego. Aquí hay un ejemplo de REST funcional con play 2.2.1:
conf / rutas:
app / controllers / UserController.java:
fuente
Utilice Play! para hacerlo todo. Escribir servicios REST en Play es muy, muy fácil.
En primer lugar, el archivo de rutas facilita la escritura de rutas que se ajustan al enfoque REST.
Luego, escribe sus acciones, en el controlador, para cada método de API que desea crear.
Dependiendo de cómo desee devolver el resultado (XML, JSON, etc.), existen algunos métodos que puede utilizar. Por ejemplo, el uso del método renderJSON permite que los resultados se rendericen con mucha facilidad. Si desea representar XML, puede hacerlo de la misma manera que crearía un documento HTML en su Vista.
He aquí un buen ejemplo.
archivo de rutas
Archivo de aplicación
archivo getUser.xml
fuente
La integración con una implementación de JAX-RS es un posible enfoque alternativo al uso del enrutamiento HTTP integrado de Play. Para ver un ejemplo de RESTEasy, consulte RESTEasy Play! módulo .
Este enfoque tiene sentido si ya ha invertido en JAX-RS, o si necesita algunas de las funciones avanzadas REST que JAX-RS proporciona, como la negociación de contenido. De lo contrario, sería más sencillo utilizar Play directamente para servir JSON o XML en respuesta a las solicitudes HTTP.
fuente
deberías echar un vistazo a
http://www.lunatech-labs.com/open-source/resteasy-crud-play-module
es un módulo para jugar que crea automáticamente una interfaz de descanso, al igual que el módulo crud crea automáticamente un área de administración ...
fuente
Parece que este enfoque no funciona en la versión 1.2.3 de Play. Si descarga la fuente realizada por @seb y mencionada anteriormente https://github.com/sebhoss/play-user-sample , la creación de un nuevo objeto de usuario usando POST con un objeto JSON ya no es posible.
Debe tener métodos específicos para la creación realizados con json y xml POST. Se describe aquí: https://groups.google.com/forum/#!topic/play-framework/huwtC3YZDlU
fuente