ตามคำขอวิธีง่ายๆเหมือน REST ทำงานเกือบจะเหมือนกับวิธีการแก้ปัญหาของ Codemwncis แต่ใช้ส่วนหัวยอมรับสำหรับการเจรจาต่อรองเนื้อหา ก่อนอื่นไฟล์เส้นทาง:
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 ในส่วนหัวยอมรับ ไคลเอนต์อื่น ๆ ทั้งหมด (อาจเป็นคำขอ AJAX ที่ใช้ JavaScript) สามารถกำหนดประเภทเนื้อหาที่ต้องการได้ ใช้วิธี jQuerys ajax () คุณสามารถทำสิ่งต่อไปนี้:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
ซึ่งจะทำให้คุณได้รับรายละเอียดเกี่ยวกับ User ที่มี ID 1 ในรูปแบบ JSON เล่นขณะนี้สนับสนุน HTML, JSON และ XML โดยกำเนิด แต่คุณสามารถใช้ชนิดที่แตกต่างกันโดยทั้งต่อไปนี้เอกสารที่เป็นทางการหรือใช้โมดูลการเจรจาต่อรองเนื้อหา
หากคุณใช้ Eclipse สำหรับการพัฒนาฉันขอแนะนำให้ใช้ปลั๊กอินไคลเอ็นต์ RESTซึ่งช่วยให้คุณทดสอบเส้นทางและประเภทเนื้อหาที่เกี่ยวข้อง