3 คะแนน โดย GN⁺ 2023-12-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

วิธีให้บริการเนื้อหา HTML

  • แนะนำวิธีคืนค่าเนื้อหา HTML และจัดการคำขอ AJAX โดยใช้ PostgREST และไลบรารี htmx
  • htmx คาดหวังการตอบกลับเป็น HTML และใช้สิ่งนี้เพื่อแทนที่องค์ประกอบภายใน DOM

การตั้งค่าเบื้องต้น

  • สร้างแอปสิ่งที่ต้องทำ (to-do) โดยอิงจากบทช่วยสอน 0
  • ดำเนินการโดยไม่ใช้การยืนยันตัวตน และมอบสิทธิ์ทั้งหมดบนตาราง todos ให้กับผู้ใช้ web_anon
  • เพิ่ม text/html เป็น media type handler เพื่อให้ PostgREST รับรู้คำขอจากเว็บเบราว์เซอร์เป็นเอกสาร HTML

การสร้างการตอบกลับแบบ HTML

  • สร้างฟังก์ชันที่คืนค่าไฟล์ HTML พื้นฐานโดยใช้ Tailwind CSS
  • เว็บเบราว์เซอร์สามารถเปิดหน้าเว็บได้ที่ http://localhost:3000/rpc/index

การแสดงรายการและสร้างสิ่งที่ต้องทำ

  • สร้างฟังก์ชันเพื่อแสดงรายการสิ่งที่ต้องทำที่มีอยู่แล้วในฐานข้อมูล
  • ใช้สำหรับสร้างเทมเพลตรายการสิ่งที่ต้องทำ และไม่ได้ใช้เป็น PostgREST endpoint
  • เพิ่ม endpoint สำหรับบันทึกสิ่งที่ต้องทำลงในฐานข้อมูล และแก้ไขหน้า /rpc/index

การแก้ไขและลบสิ่งที่ต้องทำ

  • ปรับแก้ฟังก์ชัน api.html_todo ให้มีความสามารถมากขึ้น
  • เพิ่มความสามารถใหม่ของ htmx: เปลี่ยนสถานะสิ่งที่ต้องทำ, คืนค่า HTML ที่สามารถแก้ไขสิ่งที่ต้องทำได้, และลบสิ่งที่ต้องทำ
  • เพิ่ม endpoint สำหรับแก้ไขสิ่งที่ต้องทำ รวมถึงแก้ไขและลบสิ่งที่ต้องทำในฐานข้อมูล

ความเห็นของ GN⁺

  • บทความนี้อาจน่าสนใจสำหรับนักพัฒนาเว็บ เพราะอธิบายวิธีใช้ PostgREST และไลบรารี htmx เพื่อให้บริการเนื้อหา HTML แบบไดนามิกในเว็บแอปพลิเคชัน
  • การอัปเดตหน้าเว็บแบบอะซิงโครนัสด้วย AJAX เป็นส่วนสำคัญของการพัฒนาเว็บสมัยใหม่ และบทความนี้ให้ตัวอย่างที่เป็นรูปธรรมในการนำความสามารถดังกล่าวไปใช้งาน
  • เป็นแหล่งข้อมูลที่ดีสำหรับการเรียนรู้วิธีปรับปรุงส่วนติดต่อผู้ใช้และเพิ่มประสิทธิภาพการสื่อสารระหว่างเซิร์ฟเวอร์กับไคลเอนต์

1 ความคิดเห็น

 
GN⁺ 2023-12-19
ความเห็นจาก Hacker News
  • สรุปความคิดเห็นจาก Hacker News เกี่ยวกับ PostgREST:
    • ความชื่นชอบต่อโปรเจกต์โอเพนซอร์ส PostgREST: ผู้ใช้คนหนึ่งยกให้ PostgREST เป็นหนึ่งในโปรเจกต์โอเพนซอร์สที่ตนชอบที่สุด และกล่าวว่าความสำเร็จของ Supabase มาจากการออกแบบที่ยอดเยี่ยมของ PostgREST และ Postgres ผู้ใช้รายนี้บอกว่าไม่แน่ใจว่า Supabase สนับสนุนโปรเจกต์ PostgREST มากแค่ไหน แต่ก็รู้สึกเสียดายที่แม้จะมีหลายบริษัทใช้งาน ก็ยังมีผู้สนับสนุนเพียง 12 คนเท่านั้น
    • ความยากในการพัฒนาแอปด้วย PostgREST: ผู้ใช้อีกรายกล่าวว่าประสบการณ์การพัฒนาแอปด้วย PostgREST ไม่ค่อยดีนัก และชี้ให้เห็นว่าแม้เฟรมเวิร์กจะดูเรียบง่าย แต่เมื่อความต้องการซับซ้อนขึ้นก็จะเกิดปัญหา ในกรณีนี้นักพัฒนาต้องเขียน stored procedure จำนวนมากในฐานข้อมูลเพื่อให้ได้ผลลัพธ์ที่ต้องการ และสิ่งนี้ทำให้เกิดปัญหาเรื่องการขยายระบบ
    • ความยากในการบำรุงรักษา: ผู้ใช้อีกรายแสดงความเห็นว่า PostgREST นั้นยอดเยี่ยมในฐานะ proof of concept แต่การบำรุงรักษาเว็บแอปพลิเคชันที่ซับซ้อนจริง ๆ น่าจะเหมือนฝันร้าย
    • เสน่ห์ของสแตกพัฒนาเว็บที่เรียบง่าย: ผู้ใช้คนหนึ่งมองว่าสแตกพัฒนาเว็บที่มีเพียง HTML และฐานข้อมูลนั้นน่าสนใจ และประเมินในแง่บวกว่าไม่จำเป็นต้องมีทั้งแบ็กเอนด์หรือฟรอนต์เอนด์
    • แพตเทิร์นการเขียนโค้ดในแอปพลิเคชันแบบใหม่/สมัยใหม่: มีการยกตัวอย่างฐานข้อมูลเอกสาร JSON อย่าง Couchdb เพื่ออธิบายแนวทางที่ไคลเอนต์สามารถเข้าถึงฐานข้อมูลโดยตรงและรับ HTML หรือ JSON ได้ อย่างไรก็ตาม มีการกล่าวว่าวิธีนี้ทำให้บำรุงรักษายาก จนการพัฒนาต้องหยุดลง
    • ความเป็นเอกลักษณ์ของ PostgREST ในมุมมองของ Haskell: ผู้ใช้คนหนึ่งมองว่าเมื่อดูจากมุมมองของ Haskell แล้ว PostgREST เป็นโปรเจกต์ที่ชัดเจนมาก และนั่นเองคือความอัจฉริยะของโปรเจกต์นี้
    • การแนะนำ SmoothDB: นักพัฒนาคนหนึ่งแนะนำโปรเจกต์ใหม่ชื่อ SmoothDB ซึ่งตั้งเป้าให้เข้ากันได้กับ PostgREST และได้เปิดเผยบน GitHub โดยระบุว่ายังเป็นเวอร์ชันเบตา SmoothDB เขียนด้วย Go และสามารถใช้ได้ทั้งแบบสแตนด์อโลนหรือเป็นโมดูลในแอปพลิเคชันเซิร์ฟเวอร์ที่ซับซ้อน
    • บทความเกี่ยวกับ pipeline การตรวจสอบข้อมูลด้วย PostgREST: ผู้ใช้คนหนึ่งกล่าวว่าตนได้เขียนบทความเกี่ยวกับวิธีใช้ PostgREST เป็น pipeline สำหรับการตรวจสอบข้อมูลแบบทั่วไป และกำลังเตรียมบทความถัดไปเกี่ยวกับการใช้มันเป็นชั้น CQRS/REST API
    • การผสาน PostgREST กับ HTMX: ผู้ใช้คนหนึ่งกล่าวว่าเคยใช้ PostgREST ในโปรเจกต์ก่อนหน้านี้ และมองว่ามันเข้ากันได้ดีกับ HTMX แต่ก็แสดงความกังวลเกี่ยวกับการบำรุงรักษาเทมเพลต HTMX ภายในฟังก์ชัน SQL
    • เครื่องมือเพิ่มเติมเพื่อพัฒนาให้เป็นสแตกที่บำรุงรักษาได้: ผู้ใช้คนหนึ่งถามความเห็นเกี่ยวกับเครื่องมือเพิ่มเติมที่จำเป็นในการพัฒนาแนวคิดนี้ให้กลายเป็นสแตกที่บำรุงรักษาได้และมอบ UX ที่ดีสำหรับแอปพลิเคชันขนาดกลางถึงใหญ่