API ของ ธรรม — บทสวดมนต์ พระไตรปิฎก และหนังสือธรรมะ
อ่านเปิดสาธารณะ เขียนต้องมีคีย์. ทุก GET เรียกได้เลยโดยไม่ต้องมีคีย์ เพราะสิ่งที่อยู่ในนี้คือพระธรรมและสารบัญห้องสมุด ไม่ใช่ข้อมูลส่วนตัวของใคร · ทุก POST PUT PATCH DELETE ต้องส่ง Authorization: Bearer <DHAMMA_API_KEY>
หน้าเว็บกับ API กินสัญญาเดียวกัน. หน้าเพจเรียกฟังก์ชันชุดเดียวกับที่เส้นเหล่านี้เรียก (src/lib/api/*) โดยไม่ผ่าน HTTP — รูปของข้อมูลจึงเป็นชนิดเดียวกันในภาษาเดียวกัน ไม่ใช่สองอย่างที่บังเอิญตรงกันวันนี้
ที่มาของตัวบท. ตัวบทของพระไตรปิฎกบนเซิร์ฟเวอร์นี้เป็นงานของคนอื่น — 84000.org และ E-Tipitaka — และแต่ละฉบับมาจากคนละที่กันเป็นสัดส่วน GET /api/v1/sources นับให้จากตัวบทที่เก็บไว้จริง ไคลเอนต์ที่แสดงตัวบทควรแสดงข้อมูลนั้นด้วย
ความผิดพลาดมีรูปเดียว: { "error": { "code", "message", "issues"? } } — message เป็นภาษาไทยและพิมพ์ให้ผู้ใช้อ่านได้เลย ส่วน issues แยกตามชื่อฟิลด์ เป็นประโยคชุดเดียวกับที่ฟอร์มในหน้าแอดมินพิมพ์ใต้ช่องกรอก
รายการทุกเส้นมีรูปเดียวกัน: { items, total, limit, offset } — ยกเว้น /api/v1/search ซึ่งคงรูปของผลค้นไว้
ทุก GET ส่ง ETag มาด้วย ส่ง If-None-Match กลับมาแล้วได้ 304 ถ้าคำตอบยังเป็นอันเดิม · คุ้มที่สุดกับก้อนใหญ่อย่าง layout ของเล่ม (๒๙๘ บท) ที่แอปเปิดซ้ำทุกเช้าแต่แทบไม่เคยเปลี่ยน
PATCH แก้เฉพาะสิ่งที่ส่งมา ระเบียนเดิมถูกอ่านก่อน แล้ว body ทับลงเฉพาะคีย์ที่เอ่ยถึง · null หรือสตริงว่างคือการลบค่านั้นทิ้ง คีย์ที่ไม่ได้เอ่ยถึงคงเดิม และรายการถูกแทนทั้งก้อนไม่ใช่ต่อท้าย
แก้แล้วไม่ทับกัน. ระเบียนแต่ละอันส่ง version มากับ GET ของตัวเอง · ส่งกลับมาใน If-Match แล้วถ้าระเบียนขยับไปตั้งแต่ที่อ่านมา จะได้ 412 แทนที่จะเขียนทับงานที่ไม่เคยเห็น · เป็นทางเลือก ไม่บังคับ แต่ PATCH ต้องการมันมากกว่า PUT เพราะมัน merge เข้ากับสิ่งที่อ่านมาเมื่อครู่ — สองคนที่แก้คนละฟิลด์จากสำเนาเดียวกันจึงไม่ชนกันดัง ๆ คนหลังแค่เขียนฟิลด์ของคนแรกกลับไปเป็นค่าเดิม
หมายเหตุ: version ไม่ใช่ ETag ของคำตอบใดคำตอบหนึ่ง — คำตอบของหนังสือเล่มหนึ่งมีเล่มข้างเคียงอยู่ด้วย แฮชของไบต์จึงจะขยับตอนที่หนังสือ *เล่มอื่น* ถูกเพิ่ม และปฏิเสธในสิ่งที่ไม่ใช่การชนกันจริง · version แฮชเฉพาะฟิลด์ที่การเขียนขยับได้ และไม่เปลี่ยนตาม ?lang=
เรียกถี่เกินไปได้ 429 พร้อม Retry-After เป็นวินาที · นับต่อผู้เรียก และคำขอที่แพงมีราคาแพงกว่า — ค้นในเล่มเท่ากับยี่สิบคำขอธรรมดา ค้นทั้งคลังเท่ากับห้า · ตั้งด้วย API_RATE_LIMIT (0 คือปิด)