İsteğe göre, basit bir REST benzeri yaklaşım. Codemwncis'in çözümünün çalıştığı şekilde hemen hemen aynı şekilde çalışır, ancak içerik anlaşması için Accept başlığını kullanır. Önce rotalar dosyası:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Burada herhangi bir içerik türü belirtmiyorsunuz. Bunu yapmak, IMHO yalnızca belirli kaynaklar için "özel" URI'lara sahip olmak istediğinizde gereklidir. /users/feed/
Her zaman Atom / RSS'de geri dönmek için bir rota bildirmek gibi .
Uygulama denetleyicisi şuna benzer:
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);
}
Gördüğünüz gibi sadece getUserJSON yöntemini kaldırdım ve getUser yöntemini yeniden adlandırdım. Farklı içerik türlerinin çalışması için artık birkaç şablon oluşturmanız gerekir. İstenen her içerik türü için bir tane. Örneğin:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Bu yaklaşım, tarayıcılara her zaman HTML görünümünü verir, çünkü tüm tarayıcılar Accept başlıklarında bir metin / html içerik türü gönderir. Diğer tüm istemciler (muhtemelen bazı JavaScript tabanlı AJAX istekleri) kendi istedikleri içerik türlerini tanımlayabilir. JQuerys ajax () yöntemini kullanarak şunları yapabilirsiniz:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Bu, JSON biçiminde ID 1'e sahip Kullanıcı hakkındaki ayrıntıları size sağlamalıdır. Play şu anda HTML, JSON ve XML'yi yerel olarak desteklemektedir, ancak resmi belgeleri izleyerek veya içerik görüşme modülünü kullanarak farklı bir türü kolayca kullanabilirsiniz .
Geliştirme için Eclipse kullanıyorsanız , rotalarınızı ve ilgili içerik türlerini test etmenizi sağlayan REST istemci eklentisini kullanmanızı öneririm .