รู้หรือไม่ GraphQL รองรับ API Docs ในตัว!

Nicha Rojsrikul
Nextzy
Published in
2 min readOct 20, 2019
Image from Official Site

ไม่ว่าเราจะทำโปรเจ็คนี้คนเดียว หรือทำร่วมกับคนอื่น การเขียน API Doc ก็ยังสำคัญเพราะนอกจากจะทำให้คนอื่นสามารถทำความเข้าใจได้ในเวลาที่ต้องนำไปใช้หรือนำไปเขียนต่อแล้ว ก็ยังเป็นเหมือนตัวช่วยฟื้นความจำให้ตัวเราเองด้วย

GraphQL ก็ทำให้การเขียน API Doc ง่ายมากๆ ด้วยการรองรับ API Doc ในตัวโค้ดเลยนั่นเอง

ฟีเจอร์ลับใน TypeDef

เวลาเราเขียน GraphQL API บน Apollo Server เราจะต้องเขียน 2 ส่วนด้วยกัน คือ TypeDef และ Resolver ซึ่ง TypeDef จะเป็นเสมือนแผนผังของ API ที่บอกว่ามี Types และ Resolvers ชื่ออะไรบ้าง Type นี้จะมี field อะไรบ้าง Resolver จะรับค่าอะไรและส่งค่าอะไรกลับไป และ Resolver จะเป็นที่ที่เราเข้าไปเขียนฟังก์ชั่นสำหรับดึงข้อมูลมา

typeDef ทั่วๆไปใน Typescript

ทีนี้หากเราเข้า Graphql-Playground เราก็สามารถเข้าไปดู API Docs ได้เลยโดยการกดแท็บทางด้านขวา หากมี 2 อันก็ให้กด Docs แต่บางทีจะมีอันเดียวก็กดอันนั้นได้เลยเหมือนกัน

Built-in Docs ใน Graphql-Playground

แต่ว่าตอนนี้เรายังรู้แค่แต่ละ Resolver มี parameter อะไรบ้าง และคืนค่าเป็น Type อะไรเท่านั้น ซึ่งต่อให้ตั้งชื่อ Resolver ดีแค่ไหน ก็ยังไม่เพียงพอแน่นอน

หากคุณเห็นกล่องดำในภาพข้างบน ก็คงเอะใจแล้วว่าที่จริงแล้วว่ามันต้องมีวิธีให้เราเขียนคำอธิบายเพิ่มเติมแหละ แต่ทำยังไงละ?

ก็ตรงๆเลยนั่นแหละ!

กลับมาดูที่ TypeDef ของเรากันเลยดีกว่า

typeDef พร้อมคำอธิบาย

จากที่ในตัวอย่าง เราสามารถใส่คำอธิบายเพิ่มเติมได้โดยการใส่ข้อความที่ครอบด้วย "" เหนือสิ่งที่เราอยากอธิบาย หรือหากเราต้องการหลายบรรทัด เราก็ใช้ """ ครอบบนล่างเลย นอกจากนี้แล้ว GraphQL ยังรองรับ Markdown ด้วย!

ตัวอย่าง API Doc ที่มีคำอธิบาย

ก็อย่างที่เห็นว่า GraphQL นั้นรองรับการเขียน API Docs ในตัวอยู่แล้ว และด้วย Markdown เราก็สามารถเขียนคำอธิบายที่ครบและกระชับได้อย่างง่ายดาย

เห็นอย่างนี้แล้วคุณคิดว่ายังไงบ้าง? การรองรับ Markdown นี้เพียงพอมั้ย? ยังรู้สึกว่ามีข้อจำกัดอะไรบ้างหรือไม่? หรือคุณรู้เคล็ดลับในการเขียน API Doc ที่ดีสำหรับ GraphQL อื่นๆมั้ย?

หากคุณมีคำถามหรือข้อเสนอแนะ ก็คอมเม้นต์ด้านล่างเลยค่ะ และถ้าหากบทความนี้ช่วยให้คุณสื่อสารกับเพื่อนในทีมได้ง่ายขึ้น ก็ช่วยปรบมือให้ซักทีสองทีด้วยนะคะ

--

--