Sesuai permintaan, pendekatan seperti REST sederhana. Ini bekerja hampir sama dengan cara kerja solusi Codemwncis tetapi menggunakan header Terima untuk negosiasi konten. Pertama file rute:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
Anda tidak menentukan tipe konten apa pun di sini. IMHO hanya diperlukan jika Anda ingin memiliki URI "khusus" untuk sumber daya tertentu. Seperti mendeklarasikan rute /users/feed/
untuk selalu kembali di Atom / RSS.
Pengontrol Aplikasi terlihat seperti ini:
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);
}
Seperti yang Anda lihat, saya hanya menghapus metode getUserJSON dan mengganti nama metode getUser. Untuk tipe konten yang berbeda untuk bekerja, Anda sekarang harus membuat beberapa templat. Satu untuk setiap jenis konten yang diinginkan. Sebagai contoh:
user.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
user.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
user.html:
<html>...</html>
Pendekatan ini memberikan browser selalu tampilan HTML, karena semua browser mengirim jenis konten teks / html di header Terima mereka. Semua klien lain (mungkin beberapa permintaan AJAX berbasis JavaScript) dapat menentukan jenis konten yang mereka inginkan. Menggunakan metode jQuerys ajax () Anda dapat melakukan hal berikut:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
Yang akan memberi Anda detail tentang Pengguna dengan ID 1 dalam format JSON. Play saat ini mendukung HTML, JSON dan XML secara native, tetapi Anda dapat dengan mudah menggunakan jenis yang berbeda dengan mengikuti dokumentasi resmi atau menggunakan modul negosiasi konten .
Jika Anda menggunakan Eclipse untuk pengembangan, saya sarankan menggunakan plugin klien REST yang memungkinkan Anda menguji rute dan jenis konten yang sesuai.