คู่มือ URI Template Expander: เชี่ยวชาญการสร้าง URL ด้วย RFC 6570
เรียนรู้การขยาย URI template ตามมาตรฐาน RFC 6570 ด้วยเครื่องมือออนไลน์ฟรี เข้าใจ query, path, fragment และ explode operator พร้อมตาราง variable แบบเรียลไทม์และผลลัพธ์ที่คัดลอกได้ทันที
Table of Contents
คู่มือ URI Template Expander: เชี่ยวชาญการสร้าง URL ด้วย RFC 6570
ทุก REST API มีไวยากรณ์ของ URL เป็นของตัวเอง แต่หลายทีมมักกระจายไวยากรณ์นี้ตามหน้าเอกสาร คอมเมนต์ในโค้ด และความรู้ในหัวของแต่ละคน ความจริงแล้วมันใส่ได้ในบรรทัดเดียว — /users/{id}{?fields}{&sort} — และ RFC 6570 คือมาตรฐานที่ทำให้บรรทัดนั้นรันได้จริง URI template จะบอกว่า variable แต่ละตัวอยู่ตรงไหน และ operator ตัวใดควบคุมวิธีแทนค่า ทำให้ client แปลงข้อมูลเป็น URL ที่ถูกต้องได้อย่างแน่นอน แทนที่จะเสี่ยงด้วยการต่อ string แบบมั่วๆ
URI Template Expander คือสนามทดลองออนไลน์ฟรีสำหรับไวยากรณ์นั้น เพียงวาง URI template ตามมาตรฐาน RFC 6570 กรอกตาราง variable แบบเรียลไทม์ แล้วดู URL ที่ขยายแล้วอัปเดตทันทีระหว่างที่คุณพิมพ์ คุณสลับไปมาระหว่าง query, path, fragment และ explode operator เพื่อดูว่าแต่ละตัวเปลี่ยนรูปร่างผลลัพธ์อย่างไร จากนั้นคัดลอก URL สุดท้ายได้ในคลิกเดียว ทุกอย่างประมวลผลแบบ 100% client-side ข้อมูลที่คุณวางจึงไม่เคยออกจากเครื่องของคุณ
คู่มือนี้จะพาไปดูว่าเครื่องมือนี้เหมาะกับงานแบบไหน สาธิตการใช้งานพื้นฐานใน 5 ขั้นตอน และเจาะลึก operator ทั้งเจ็ดตัวของ RFC 6570 รวมถึง explode และ prefix modifier, กฎการตัด variable ที่ไม่ได้ระบุค่า และพฤติกรรมการ percent-encoding
ทำไมต้องใช้ URI Template Expander?
- เรียนรู้ไวยากรณ์ operator แบบเห็นผลทันตา อ่าน RFC 6570 เป็นเรื่องหนึ่ง แต่การเห็น {?fields} กลายเป็น ?fields=name,email ระหว่างพิมพ์เป็นอีกเรื่อง ฟีดแบ็กทันทีช่วยสร้างสัญชาตญาณที่ตัว spec เองไม่ให้
- Debug URL ที่ client สร้างขึ้น เมื่อ SDK สร้าง URL ที่พัง ให้ขยาย template เดิมด้วย variable ชุดเดิมแล้วเทียบกัน ตัว operator ที่มีปัญหาจะมองเห็นได้ชัดเจน
- ไม่ต้องเดาเรื่อง encoding เครื่องมือใช้กฎ percent-encoding ของ RFC 6570 อย่างเคร่งครัด คุณจึงยืนยันได้ว่าตัวอักษรใดคงสภาพเดิมและตัวใดถูก escape ก่อนโค้ด production จะพลาด
- ทดสอบพฤติกรรม variable ที่ไม่ได้ระบุค่า ปล่อย variable เป็นค่าว่างแล้วดู expression ทั้งก้อนหายไป กฎข้อนี้ละเอียดอ่อน การเห็นมันเกิดขึ้นต่อหน้าช่วยขจัดความสงสัยทั้งหมด
- เขียนเอกสาร API ด้วยตัวอย่างที่รันได้ template คู่กับตาราง variable เป็นวิธีอธิบายว่า API ของคุณรับ URL แบบใดได้บ้าง ทั้งกระชับและทดสอบได้
- ไม่ต้องติดตั้ง ไม่มีความเสี่ยง ไม่ต้องลงโปรแกรม ไม่ต้องสมัครบัญชี การขยายทั้งหมดทำงานในเบราว์เซอร์ของคุณ
ฟีเจอร์หลัก
| ฟีเจอร์ | สิ่งที่ทำ |
|---|---|
| RFC 6570 parser | ขยาย template ได้ทุกระดับ ตั้งแต่ Level 1 ถึง Level 4 |
| ตาราง variable แบบเรียลไทม์ | ตรวจจับ variable อัตโนมัติ และคำนวณผลใหม่ทุกครั้งที่พิมพ์ |
| query operator {?var} | สร้าง ?key=value ส่วน {&var} ใช้ต่อท้าย query ที่มีอยู่ |
| path, fragment และ label operator | {/var}, {#var}, {.var} วางค่าลงตำแหน่งที่ถูกต้อง |
| explode modifier {list*} | แตก list เป็น key ซ้ำหรือ path segments |
| คัดลอกผลลัพธ์ | คลิกเดียว copy URL ไปแปะใน curl, tests หรือ docs |
| 100% client-side | ประมวลผลทั้งหมดในเบราว์เซอร์ ปลอดภัยแม้กับ URL ภายในองค์กร |
รายละเอียดที่ทำให้ใช้งานรายวันสบายขึ้นคือการขยายเป็นแบบ stateless รีเฟรชหน้าแล้วได้จุดเริ่มต้นใหม่ที่สะอาด และเครื่องมือนี้ตั้งใจทำเรื่องเดียวจึงเร็วและคาดเดาได้ ไม่มีประวัติ request ไม่มีสิ่งรบกวน มีแค่ template เข้ากับ URL ออก
วิธีใช้งาน
- วาง template ของคุณ ใส่อย่างเช่น /users/{id}{?fields} — หยิบมาจากเอกสาร API, ส่วน links ใน OpenAPI หรือโค้ดของคุณเอง
- กรอกตาราง variable แบบเรียลไทม์ เครื่องมือตรวจจับทุก variable และสร้างแถว input ให้ พิมพ์ 42 ให้ id และ name,email ให้ fields ผลลัพธ์จะอัปเดตทุกครั้งที่กดแป้น
- อ่าน URL ที่ขยายแล้ว แผงผลลัพธ์แสดง URL ฉบับเต็มโดยไฮไลต์ path segment และ query parameter ที่ถูกแทนค่าให้ตรวจสอบได้ในแวบเดียว
- ปรับ operator เปลี่ยน {?fields} เป็น {&fields} หรือเพิ่ม explode modifier ให้ list variable แล้วเทียบผลลัพธ์ เป็นวิธีเร็วที่สุดเพื่อเข้าใจแต่ละ operator
- คัดลอกผลลัพธ์ เมื่อ URL ถูกต้องแล้ว แปะลง curl, HTTP client, integration test หรือเอกสารของคุณ
Operator ทั้งเจ็ดตัวของ RFC 6570
RFC 6570 นิยาม simple string expansion บวก operator อีกเจ็ดตัว โดยแต่ละตัวเขียนเป็นสัญลักษณ์ภายในวงเล็บปีกกา operator ทุกตัวเปลี่ยนสองอย่าง: separator หรือ prefix ที่ใส่นำหน้าค่า และตัวอักษรใดถูก percent-encoding สมมติ id=42 และ path=/a/b ในตารางด้านล่าง
| Expression | Operator | ตัวอย่าง template | ผลลัพธ์ |
|---|---|---|---|
| {id} | simple (ไม่มี) | /users/{id} | /users/42 |
| {+path} | reserved | /map{+path} | /map/a/b |
| {#id} | fragment | /users{#id} | /users#42 |
| {.id} | label | /files{.id} | /files.42 |
| {/id} | path segments | /users{/id} | /users/42 |
| {;id} | path-style parameters | /users{;id} | /users;id=42 |
| {?id} | query | /users{?id} | /users?id=42 |
| {&id} | query continuation | /users{?x}{&id} | /users?x=1&id=42 |
รูปแบบ simple จะ percent-encode ตัวอักษร reserved: {+path} เก็บ slash ไว้ครบ ขณะที่ {path} จะได้ %2Fa%2Fb ส่วน query continuation {&var} ต่อท้าย query เดิมโดยไม่ใส่เครื่องหมาย ? ซ้ำ — นั่นคือเหตุผลที่ template ในบทนำเขียนว่า {?fields}{&sort}
Modifier: Explode และ Prefix
Modifier ใช้ปรับวิธีใส่ค่า explode modifier (*) จะกระจาย list และ object โดยถ้า tags=red,green,blue:
- {/tags*} ขยายเป็น /red/green/blue แทนที่จะเป็น segment เดียวคั่นด้วย comma
- {?tags*} ขยายเป็น ?tags=red&tags=green&tags=blue ซึ่งเป็นรูปแบบ key ซ้ำที่ search API ส่วนใหญ่ใช้
prefix modifier (:n) ตัดเอา n ตัวอักษรแรก: ถ้า code=ABCDEFG แล้ว {code:3} จะขยายเป็น ABC
Variable ที่ไม่ได้ระบุค่าจะทำให้ expression หายไปทั้งก้อน
variable ที่ undefined จะทำให้ expression ของมันหายไปทั้งชิ้น ไม่ใช่ทิ้งเปล่าๆ ไว้ ถ้า sort เป็น undefined /users{?sort} จะขยายเป็น /users ธรรมดา ไม่มี ? ค้างท้าย และ undefined กับค่าว่างต่างกันโดยตั้งใจ: sort="" ให้ผล ?sort= แต่ไม่ระบุ variable เลยจะไม่เกิดอะไรขึ้น
พฤติกรรมการ percent-encoding
การเข้ารหัสต่างกันตาม operator ถ้า q=hello world {q} จะได้ hello%20world เพราะช่องว่างถูก escape เสมอใน simple expansion {+q} ก็ยังได้ hello%20world เช่นกันเพราะช่องว่างไม่ใช่ทั้ง unreserved และ reserved แต่ {+path} คง slash และ colon ไว้ตามเดิม เมื่อไม่แน่ใจให้ขยายทั้งสองรูปแบบแล้วเทียบกัน
ตัวอย่างการขยายจริง
ขยาย template /users{/id}{?fields,sort} ด้วยตาราง variable นี้:
| Variable | ค่า | ผลต่อ output |
|---|---|---|
| id | 42 | {/id} เติม /42 เข้าไป |
| fields | name,email | query เริ่มด้วย ?fields=name,email |
| sort | undefined | sort ถูกตัดออกทั้งหมด |
ผลลัพธ์คือ /users/42?fields=name,email path operator เติม identifier เป็น segment query operator เปิด query string ด้วย fields และเพราะ sort เป็น undefined การกำหนดค่าของมันจะหายไปโดยไม่ทิ้ง & ค้างลองวาง template กับตารางนี้ลง URI Template Expander เพื่อพิสูจน์ด้วยตัวเอง
กรณีการใช้งานจริง
เอกสาร REST API และการทดสอบ SDK
คู่ template กับตารางคือวิธีอธิบาย endpoint ที่ชัดที่สุด: บรรทัดเดียวนิยาม input ที่รับทั้งหมด และ URL ที่ขยายแล้วคือตัวอย่างที่รันได้จริง ผู้เขียน SDK ใช้คู่เดียวกันเป็น test fixture ช่วยจับ regression ของการสร้าง URL ก่อนปล่อยงาน
การออกแบบลิงก์สไตล์ OpenAPI
เอกสาร OpenAPI ใช้ URI template ตาม RFC 6570 ใน object links เพื่อบอกเส้นทางระหว่าง operation ก่อนส่ง spec ให้ลองขยาย link template ทุกตัวด้วยค่าตัวอย่าง เพื่อยืนยันว่าการเชื่อมโยงสร้าง URL ตามที่ตั้งใจ
การดีบัก URL ที่ระบบสร้างให้
เมื่อ URL ที่สร้างอัตโนมัติคืน 404 หรือ 400 สาเหตุมักเป็นการเลือก operator: parameter ที่ควร explode แต่ไม่ได้ explode, ค่าที่ต้องใช้ reserved expansion หรือ variable ที่เป็น undefined ทั้งที่ client คิดว่ามีค่า การขยายซ้ำด้วย input ชุดเดิมช่วยระบุ expression ที่ผิดได้ในไม่กี่วินาที
การสอนไวยากรณ์ URL
เพราะทุก operator ให้ผลลัพธ์ที่มองเห็นและคาดเดาได้ URI template จึงเป็นเครื่องมือสอนที่ดีเยี่ยมว่า URL ประกอบขึ้นอย่างไร — encoding เกิดตรงไหน ทำไม ? ปรากฏครั้งเดียวแต่ & ซ้ำได้ และ fragment ใช้ทำอะไร
แนวทางปฏิบัติที่ดีที่สุด
- Encode ครั้งเดียว ตอนขยาย ให้ template engine จัดการการ escape ถ้า pre-encode ค่าก่อนจะได้ผลแบบ double-encoded อย่าง hello%2520world
- ใช้ query operator กับ filter ที่เป็นทางเลือก {?fields,sort} ลดรูปได้อย่างสวยงาม: variable ที่ undefined จะหายไปเอง client จึงส่งเฉพาะ parameter ที่มีจริง
- ทดสอบกรณี undefined อย่างตั้งใจ ขยายทุก template โดยใส่ variable ครบ ใส่บางส่วน และไม่ใส่เลย ผลลัพธ์กรณีว่างเปล่าคือสิ่งที่ผู้ใช้จริงจะเจอสักวัน
- ใช้ explode กับ key แบบซ้ำ เมื่อ API ต้องการ ?tag=a&tag=b ให้ model input เป็น list แล้วใช้ {?tags*} แทนการต่อค่าด้วย comma ล่วงหน้า
- เก็บ template ไว้ที่เดียว กำหนดเป็น constant หรือใส่ในเอกสาร OpenAPI ดีกว่ากระจายการต่อ string ทั่วโค้ดเบส
- ตรวจผลลัพธ์ ไม่ใช่แค่ template แปะ URL ที่ขยายแล้วลงตัว parser เพื่อยืนยันว่า scheme, path และ query ออกมาถูกต้องตามตั้งใจ
พร้อมทำให้การสร้าง URL เป็นเรื่องน่าเบื่อ — ในความหมายที่ดีที่สุดหรือยัง เปิด URI Template Expander ฟรี วาง /users{/id}{?fields,sort} แล้วดูตาราง variable แบบเรียลไทม์เปลี่ยน template ของคุณเป็น URL ที่ถูกต้อง ทำงานทั้งหมดในเบราว์เซอร์ ไม่ต้องสมัครบัญชี
เครื่องมือที่เกี่ยวข้องที่คุณอาจสนใจ:
- URL Parser - แยก scheme, host, path และ query ของ URL ที่ขยายแล้วเพื่อตรวจความถูกต้อง
- JSON to Query String Converter - แปลง JSON object เป็น query string แล้วเทียบกับผลแบบ explode
- Regex Tester - เขียน pattern จับคู่หรือดึงค่าจาก URL ที่ template สร้างขึ้น
อัปเดต: กันยายน 2026 | เวลาอ่าน: 7 นาที
คำถามที่พบบ่อย
ถ: URI template คืออะไร? ตอบ: URI template คือ string แบบกระชับที่อธิบายกลุ่ม URL ด้วย variable ในวงเล็บปีกกา กำหนดมาตรฐานไว้ใน RFC 6570 เช่น /users/{id}{?fields} จะกลายเป็น /users/42?fields=name,email เมื่อใส่ค่า variable แล้ว
ถ: เครื่องมือรองรับ RFC 6570 ระดับใดบ้าง? ตอบ: ครบทั้งสี่ระดับ Level 1 คือ simple string expansion, Level 2 เพิ่ม reserved และ fragment operator, Level 3 เพิ่ม label, path, path-style, query และ query-continuation operator และ Level 4 เพิ่ม explode กับ prefix modifier
ถ: {?var} กับ {&var} ต่างกันอย่างไร? ตอบ: {?var} เปิด query string และใส่ separator คือ ? ส่วน {&var} ต่อท้าย query เดิมด้วย & ใช้ {?first} กับ parameter ตัวแรก และ {&second} กับตัวถัดไปทุกตัว
ถ: เครื่องมือส่ง template หรือ variable ของฉันไปที่ใดหรือไม่? ตอบ: ไม่ การขยายทำงานทั้งหมดในเบราว์เซอร์ด้วยโค้ด 100% client-side URL ภายในองค์กรและข้อมูลตัวอย่างจึงไม่เคยออกจากเครื่องของคุณ
ถ: explode modifier เปลี่ยนผลลัพธ์ของ list อย่างไร? ตอบ: ถ้าไม่ใช้ explode list จะขยายเป็นค่าเดียวคั่นด้วย comma แต่ถ้าใช้ แต่ละ element จะเป็น path segment หรือ query key ซ้ำของตัวเอง เช่น tags=red,green,blue ผ่าน {?tags*} จะได้ ?tags=red&tags=green&tags=blue