Відповідно до запиту, простий REST-подібний підхід. Це працює майже так само, як працює рішення Codemwncis, але використовує заголовок Accept для узгодження вмісту. Спочатку файл маршрутів:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Тут ви не вказуєте жодного типу вмісту. Для цього IMHO необхідний лише тоді, коли ви хочете мати "спеціальні" URI для певних ресурсів. Як і оголосити маршрут, щоб /users/feed/
завжди повертатися в Atom / RSS.
Контролер програми виглядає приблизно так:
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);
}
Як ви бачите, я лише видалив метод getUserJSON і перейменував метод getUser. Для роботи різних типів вмісту вам доведеться створити кілька шаблонів. По одному для кожного бажаного типу вмісту. Наприклад:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Цей підхід дає браузерам завжди перегляд HTML, оскільки всі браузери надсилають тип вмісту тексту / html у своєму заголовку Accept. Усі інші клієнти (можливо, деякі запити AJAX на основі JavaScript) можуть визначити власний бажаний тип вмісту. Використовуючи метод jQuerys ajax (), ви можете зробити наступне:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Що має отримати детальну інформацію про Користувача з ідентифікатором 1 у форматі JSON. Play в даний час підтримує HTML, JSON та XML, але ви можете легко використовувати інший тип, дотримуючись офіційної документації або використовуючи модуль узгодження вмісту .
Якщо ви використовуєте Eclipse для розробки, я пропоную використовувати плагін клієнта REST, який дозволяє перевірити свої маршрути та відповідний тип вмісту.