มีหลายวิธีในการเรียนรู้วิธีสร้างแอปพลิเคชันเว็บสงบและไม่ไม่มีวิธีที่ไม่ซ้ำกัน RESTful ไม่ใช่มาตรฐาน แต่ใช้ชุดของมาตรฐาน (HTTP, URI, Mime Type, ... )
เริ่มต้นด้วยสิ่งนี้: ฉันอธิบายได้อย่างไรกับภรรยาของฉัน
จากนั้นดำเนินการดังนี้: RESTful Web Services Cookbook
จากนั้นใช้ความพยายามทั้งหมดในการพัฒนาเว็บแอปพลิเคชันเพราะวิธีที่ดีที่สุดในการเรียนรู้คือทำการทดลองและคุณสามารถเรียนรู้มากมายจากความผิดพลาดของคุณ;)
ไม่ต้องกังวลถ้าเว็บแอปแรกของคุณจะไม่สงบอย่างสมบูรณ์: คุณจะพบวิธีที่จะทำ!
ดังนั้นการอ้างถึงโอบิวันเคโนบีว่า "พลังอาจอยู่กับคุณ!" ;)
แก้ไข
ตกลงให้ฉันเจาะจงมากขึ้น
คุณต้องการสร้าง webapp ที่สงบแล้วใช่ไหม อย่างที่ฉันบอกว่ามีหลายวิธีที่จะทำ แต่นี่คือแนวทางหลัก
คำนิยาม
REST (Representational State Transfer)เป็นรูปแบบสถาปัตยกรรมซอฟต์แวร์สำหรับระบบแบบกระจาย (เช่น WWW) ไม่ใช่มาตรฐาน แต่ใช้ชุดของมาตรฐาน: HTTP, AJAX, HTML, URI, Mime Type เป็นต้นเรากำลังพูดถึงการเป็นตัวแทนของทรัพยากรไม่ใช่เกี่ยวกับทรัพยากรเอง นำมาจาก 'วิธีที่ฉันอธิบายส่วนที่เหลือกับภรรยาของฉัน':
ภรรยา : หน้าเว็บเป็นแหล่งข้อมูลใช่ไหม
ไรอัน : ชนิดของ หน้าเว็บเป็นตัวแทนของทรัพยากร ทรัพยากรเป็นเพียงแนวคิด
ข้อ จำกัด ของสถาปัตยกรรม
- ไคลเอนต์เซิร์ฟเวอร์ : ไคลเอนต์และเซิร์ฟเวอร์ถูกคั่นด้วย Uniform Interface (อธิบายด้านล่าง)
- ไร้สัญชาติ : การสื่อสารเซิร์ฟเวอร์ - ไคลเอ็นต์ทำได้โดยไม่บันทึกสถานะไคลเอ็นต์เฉพาะบนเซิร์ฟเวอร์
- Cachable : ไคลเอ็นต์อาจมีแคชของการตอบกลับคำขอที่ทำไปแล้ว
- ระบบเลเยอร์ : ลูกค้าไม่รู้ว่ามันเชื่อมต่อโดยตรงกับเซิร์ฟเวอร์ปลายทางหรือถ้าการสื่อสารนั้นทำผ่านตัวกลาง
ชุดอินเตอร์เฟส
- การระบุทรัพยากร ' : แต่ละทรัพยากรจะต้องมีการระบุโดย URI
- โพรโทคอล : เพื่อที่จะได้รับในไคลเอนต์การสื่อสารและเซิร์ฟเวอร์โปรโตคอลจะต้องทำก่อน แต่ละคำขออาจมีประเภท MIME ที่เหมาะสม (แอปพลิเคชัน / xml, ข้อความ / html, แอปพลิเคชัน / rdf + xml, ฯลฯ ) ส่วนหัวด้านขวาและวิธี HTTP ที่ถูกต้อง (ดูคำอธิบาย CRUD ด้านล่าง)
CRUD
ตกลงเราเห็นว่าในการระบุทรัพยากรที่เราสามารถใช้ URI แต่เราต้องการสิ่งอื่นสำหรับการกระทำ (เพิ่มแก้ไขลบ ฯลฯ ): ยินดีต้อนรับสู่ CRUD (สร้างอ่านอัปเดตและลบ)
- สร้าง { HTTP: POST } { SQL: INSERT } => สร้างทรัพยากรใหม่
- อ่าน { HTTP: GET } { SQL: SELECT } => รับทรัพยากร
- อัปเดต { HTTP: PUT } { SQL: UPDATE } => แก้ไขทรัพยากร
- ลบ { HTTP: DELETE } { SQL: DELETE } => ลบทรัพยากร
ตอนนี้เกี่ยวกับ PUT และ DELETE ปัญหาเทคโนโลยีบางอย่างอาจปรากฏขึ้น (คุณจะได้รับพวกเขาด้วยรูปแบบ HTML): นักพัฒนามักจะข้ามปัญหานี้โดยใช้ POST สำหรับแต่ละคำขอ 'PUT' และ 'DELETE' อย่างเป็นทางการคุณต้องใช้ PUT และ DELETE โดยวิธีการทำสิ่งที่คุณต้องการ ประสบการณ์ของฉันผลักดันให้ฉันใช้ POST และรับทุกครั้ง
--- ควรใช้ส่วนต่อไป แต่ไม่ใช่พันธะของ REST: มันเกี่ยวข้องกับข้อมูลที่เชื่อมโยง ---
URI
URI นามธรรมจากรายละเอียดทางเทคนิค! บอกลา URI ดังนี้:
http://www.example.com/index.php?query=search&id=9823&date=08272012
ออกแบบ URI อีกครั้ง! ใช้ลิงค์ด้านบนและเปลี่ยนดังต่อไปนี้:
http://www.example.com/search/2012/08/27/9823
มันดีกว่ามากใช่มั้ย สามารถทำได้โดย:
อีกสิ่งหนึ่ง: ใช้ URI ที่แตกต่างเพื่อแสดงทรัพยากรที่แตกต่าง:
ให้ความสนใจ : about.html และ about.rdf ไม่ใช่ไฟล์! พวกเขาอาจเป็นผลมาจากการแปลง XSLT!
การเจรจาต่อรองเนื้อหา
หากคุณมาถึงจุดนี้ขอแสดงความยินดี! อาจเป็นไปได้ว่าคุณพร้อมที่จะรับแนวคิดที่เป็นนามธรรมมากขึ้นเพราะเรากำลังเข้าสู่รายละเอียดทางเทคนิคของเว็บความหมาย;) ดีเมื่อลูกค้าของคุณต้องการทรัพยากรมันมักจะทำให้คำขอดังต่อไปนี้:
GET http://www.example.com/about
Accept: application/rdf+xml
แต่เซิร์ฟเวอร์จะไม่ตอบสนองด้วย about.rdf เนื่องจากมี URI อื่น ( http://www.example.com/about.rdf ) มาดูรูปแบบ 303 กันเถอะ! เซิร์ฟเวอร์จะส่งคืนสิ่งนี้:
303 See Other
Location: http://www.example.com/about.rdf
และลูกค้าจะตามลิงค์กลับมาดังนี้:
GET http://www.example.com/about.rdf
Accept: application/rdf+xml
ในที่สุดเซิร์ฟเวอร์จะส่งคืนทรัพยากรที่ร้องขอ:
200 OK
about.rdf
ไม่ต้องกังวล: แอปพลิเคชันไคลเอนต์ของคุณจะไม่ทำสิ่งนี้! รูปแบบ 303 ต้องทำโดยแอปพลิเคชันเซิร์ฟเวอร์และเบราว์เซอร์ของคุณจะจัดการส่วนที่เหลือ;)
ข้อสรุป
บ่อยครั้งที่ทฤษฎีอยู่ไกลจากการฝึกฝน ใช่ตอนนี้คุณรู้วิธีออกแบบและพัฒนาแอปพลิเคชั่น RESTful แล้ว แต่แนวทางข้างต้นเป็นเพียงคำใบ้ คุณจะพบวิธีที่ดีที่สุดในการสร้างเว็บแอปพลิเคชันและอาจไม่เหมือนที่ทฤษฎีต้องการ อย่าให้มันแช่ง: D!
บรรณานุกรม
สงบเงียบบริการเว็บ, Sameer Tyagi
REST API ต้องเป็น Roy Hyperfield ซึ่งเป็นตัวขับเคลื่อน
บริการเว็บสงบ: พื้นฐาน, Alex Rodriguez
Webber REST เวิร์กโฟลว์