มะ ไม่ต้องเสียเวลา เริ่มกันเลย
จากที่ค้างไว้คราวที่แล้วเกี่ยวกับ RESTful มันมีความหมายว่า ระบบที่รองรับหลักของ REST แต่จะมีอีกคำนึงซึ่งพวกคลั่งไคล้พวกนี้จะเรียกตัวเองว่า RESTafarians (ขอแปลขำๆ ว่า ชนเผ่า REST ละกัน)
แล้วระบบที่รองรับ REST ต้องมีสภาพเป็นอย่างไร ?? ผมเองบอกได้ไม่หมดครับ จริงๆ ก็ยังไม่รู้แจ้งเห็นจริงเท่าไหร่ และตัว simply_restful ชื่อมันก็บอกแต่แรกแล้วว่า simply มันง่ายๆ มันจะไม่เป็น REST 100% เหมือนที่ใช้กับ WS แต่ที่แน่ๆ มีอยู่ข้อนึงที่ผมน่าจะพอถูไถไปได้คือ มีหลักการพื้นฐานอยู่ข้อนึงที่ว่า มันจะมีการจัดการ resources ต่างๆ ผ่านทาง verb ซึ่ง verb หรือคำกริยาพวกนี้ ในที่นี้ จะหมายถึง method ของ HTTP คือ get, post, put และ delete
มาดูตารางความสัมพันธ์ของสิ่งต่างๆ ว่ามันจะสัมพันธ์กันยังไง ถ้าใช้ simply_restful โดย resource ที่จะพิจารณา ผมจะติ๊งต่างให้เป็น products ละกันครับ ซึ่งจะแสดงผ่านทาง URL
| URL structure | Verb | Method |
|---|---|---|
| /products | get | index |
| /products/1 | get | show |
| /products/new | get | new |
| /products/1 | post | create |
| /products/1;edit | get | edit |
| /products/1 | put(post) | update |
| /products/1;delete | delete(post) | destroy |
สำหรับ get ก็มีหน้าที่ที่จะไว้ดู(Read) หรือเอามันออกมาดู ใน Rails method ก็จะใช้กับ index, show, edit, new ส่วน post ก็มีหน้าที่สำหรับการสร้าง(Create) ก็คือการ create method แล้ว put ทำหน้าที่สำหรับการปรับปรุงหรือเปลี่ยนแปลง(Update) ก็คือ update method แต่แล้วก็มีข้อสงสัย แล้วทำไมเราไม่เราไปใช้กับ post ล่ะ ก็เพราะว่าเรากำลังพิจารณาในแง่ของ resource(Noun) แล้วมันจะกระทำการใดๆ โดยผ่าน verb ตามเงื่อนไขของ REST จึงใช้ put เป็นตัวแทนของกริยานี้(ผมคิดเอาเอง แต่มันก็ match กันพอดี ทำให้ดูสวยไปด้วย) สุดท้าย delete ไว้สำหรับลบ(Delete) ก็คือ destroy method
โอ๊ะโอ๋....... เฮ้ย ในความเป็นจริง มันใช้ put กับ delete ไม่ได้นี่หว่า!!!!! เพราะ web browser ไม่รองรับ
จริงๆ 2 ตัวนี้ มันใช้ post ละครับ ใน url เราเลยต้องมีการระบุ _method เพิ่มเข้าไป เพื่อเป็นการบอก verb ให้กับมัน ซึ่งในการใช้งาน simply_restful จริงๆ ขั้นตอนพวกนี้ จะมี code ส่วนหนึ่ง(hidden tag)ไปจัดการให้ โดยจะเพ่ิม ?_method=put หรือ delete ให้โดยอัตโนมัติ แล้วมันจะไปจัดการพิจารณาแยกกับ post กันอีกที ไว้คราวหน้าครับ จะมาแสดงให้ดูสำหรับการใช้งาน simply_restful
เรามาเรียงใหม่ตามหน้าที่คือ Create Read Update Delete ก็ย่อมันเป็น CRUD ซะเลย ซึ่ง CRUD เป็น function พื้นฐานสำหรับเว็บทั่วๆ ไปที่ต้องต่อกับ database ซึ่ง CRUD กับ verb 4 ตัวนี้ ช่างลงตัวได้อย่างพอดี จากการทำงานมา 3-4 ชิ้นกับ Rails รู้สึกว่าชีวิตง่ายขึ้นเยอะ เมื่อใช้ simply_helpful ในการจัดการกับ CRUD
แล้วเราจะได้อะไรจากตัว RESTful ??? จากที่อ่านๆ มา และศึกษามา มันมีอะไรเยอะแยะไปหมด แต่เนื่ององค์ความรู้ที่มีอยู่ ยังไปไม่ถึง เลยเอาแค่ที่เจอมากับตัวละกันครับ
นอกเหนือจากสิ่งที่ได้จากการเป็น REST แล้ว อย่างแรกเลยคือ เราจะได้ URL ที่ดูเท่ อย่างที่สอง ลด url mapping ใน route.rb ได้เยอะเลย ดูในตัวอย่างนี้ได้ อย่างที่สาม สำหรับ get เราแน่ใจได้แน่นอน ว่า get ของเรา ทำหน้าที่ไว้แค่ดู จะไปเปลี่ยนแปลงอะไรไม่ได้ เพราะจะไม่มีการใช้ get ในการเปลี่ียนแปลงข้อมูล ปลอดภัยขึ้นมาหน่อย อย่างที่สี่ ทำงานร่วมกับ CRUD ได้อย่างง่ายดาย อย่างที่ห้า ไว้คิดออกแล้วจะมาเพิ่มทีหลังครับ
ก็อย่างที่ว่าไปตั้งแต่แรก มันเป็นแค่แนวคิด โชคดีที่ Rails มีเจ้า plugin ตัวนี้(จริงๆ มันไม่ใช่ plugin แล้วครับ มันถูกเพิ่มเข้าไปแล้วใน edge rails) เลยทำให้ชีวิตนี้ง่ายขึ้นมาอีกหน่อย
ข้อมูลจาก http://microformats.org/wiki/rest/rails http://cfis.savagexi.com/articles/2006/03/26/rest-controller-for-rails
ปล. มีตัวอย่างอีกอันครับ สำหรับผู้ที่สนใจ REST ผมว่าเขาอธิบายได้เข้าท่าเลยทีเดียว คุณ Ryan Tomayko เขาอธิบาย REST ให้เมียเขาฟัง ลองอ่านดูครับ
ปอ. ได้คุยกับพี่ patrickz เกี่ยวกับ REST ที่ใช้งานจริงๆ กับ WS น่าสนุกมากครับ ไว้จะมาว่าให้ฟังทีหลัง
แก้ไขล่าสุด วันที่ 23 กรกฏาคม 2550 เวลา 1.50 น.