Generate API Spec จาก Swagger JSON

แนวทางของ Dev เป็ดๆ แปลงจาก Swagger เป็น Excel

เนื่องจากมีงานที่ต้องทำแต่ API เพียวๆ แล้วเจ้าตัว Swagger ไม่ตอบโจทย์ที่ลูกค้าต้องการ เลยเป็นประเด็นให้เกิด Blog นี้ สำหรับใครที่ไม่รู้จักเจ้า Swagger ก็รองศึกษาดูจาก Swaggerarrow-up-right

Swagger เรียกๆ ง่ายๆ ก็คือตัวช่วยตัวนึงที่ช่วยให้ API ที่เราทำมีหน้าสำหรับทดสอบและอธิบายแทน Document โดยที่เราไม่ต้องเขียนเอง ช่วยงาน Developer ด้วยกันได้ดีมากๆ (ฟังดูก็ครบถ้วนนิ หึหึ)

เหตุผลหลักๆ ที่ไม่ตอบโจทย์ตามต้องการมีดังนี้

  1. เอกสารอยู่ในรูปแบบของ html เวลาเปิดดูแล้วเหมือนจะสะดวก แต่ถ้าเราต้องดู Schema ควบคู่ไปด้วยจะได้ Scroll mouse ไปๆ มาๆ

  2. เนื่องเอกสารที่ Swagger ทำให้สุดท้ายจะเป็นรูปแบบ html ทำให้เวลาแก้ไขเพิ่มเติมไม่สะดวก

  3. การพิมพ์อธิบาย Condition ต่างๆ ยาวๆ ทำได้ไม่สะดวก

  4. หลายๆ องค์กรยังคงต้องการเอกสารส่งงานที่ดูเป็นทางการอย่าง Word, Excel อยู่

ด้วยเหตุผลด้านบน(เจอมากับตัว) ทำให้ต้องมาทำเอกสารเหมือนเดิม แต่เราไม่อยากเสียเวลาต้องทำใหม่ทั้งหมดเพราะเรามีเจ้า Swagger ทำมาให้เยอะแล้วนิ เลยหาวิธี Convert จากเจ้า Swagger มาเป็น เอกสารอย่าง Word หรือ Excel ให้ได้ดีกว่า หากท่านใดเจอเครื่องมือที่ดีอยู่แล้วหรือมีวิธีที่ดีกว่าวิธีที่ผมจะอธิบายด้านล่างนี้รบกวนแจ้งให้ทราบด้วยครับ เนื่องจากผมพยายามหาอยู่นานแต่ไม่พบเลยตัดสินใจ เขียนมันเองซะเลย เจ้า Swagger เนี่ย นอกจากสร้างหน้า Web ให้เราใช้งานง่ายแล้ว แต่มันยังมีเป็นรูปแบบ JSON ให้เรานำไปใช้งานได้ด้วย มี Document อธิยายโครงสร้างชัดเจน ตัวนี้ละที่ช่วยเราได้

อธิบาย JSON Structure แบบสรุปคราวๆ ก่อน

Root ของ JSON จะเป็นดังนี้ สิ่งที่เราสนใจจริงๆ คือ paths และ definitions โดยที่ paths : เป็นรายการของ API และมี Parameter Request/Response บางส่วนที่ไม่ซับซ้อน definitions : เป็น Schema หรือ Model ของ Parameter Request/Response แบบซับซ้อน

เข้าไปดูที่ paths สิ่งที่เราสนใจจะมีอยู่หลาย Parameter เหมือนกัน โดยส่วนที่ซับซ้อนจะเป็นส่วนของ schema เพราะจะเป็นส่วนที่อ้างถึง Schema ที่อยู่ใน definitions ทำให้เราต้องเขียนข้อมูลไปหา Schema ที่ต้องการในนั้นต่อ

เข้าไปดูที่ definitions จะเป็นรายการของ Schema ทั้งหมด โดยส่วนที่ซับซ้อนจะเป็นส่วนที่เรียกหา definitions เองอีกครั้ง ทำให้ในการเขียน Logic เราควรเขียนให้เป็น Recursive ดู Document ที่อธิบาย JSON structure เพิ่มได้ที่ Swagger JSON Specificationarrow-up-right

เริ่มทำเครื่องมือ

ผมจะทำเครื่องมือที่ Convert Swagger JSON ให้ออกมาเป็น Excel API Spec แบบ Simple แต่มี Column ครบพร้อมให้นำไปเขียนหรือแก้ไขเพิ่มได้เลย โดยหน้าตา Excel ที่ได้จะเป็นดังนี้ มี Sheet index ที่รวมรายชื่อของ API ทั้งหมด และใส่สูตร Formula ให้ Click ไปที่ Sheet นั้นได้เลย มี Column ครบตามที่ API Spec ควรจะมี บอกลำดับชั้นของ Parameter และมี Link Click กลับมา Sheet Index

หากเราเข้าใจ JSON Structure แล้วจะใช้เครื่องมืออะไรทำก็ได้ละ C#, VB, JAVA, Javascript ทางผู้เขียนขอเลือก Javascript ละกัน พอดีกำลังศึกษา Node.js หลักการที่ผมจะทำก็คือจะสร้างตัวแปรเก็บค่าทั้งชื่อ API, Method Type, Description, Request Parameter, Response Parameter ทั้งหมดเก็บไว้ก่อน แล้วค่อยนำไปเขียนสร้างเป็น Excel ออกมาทีเดียว ที่ทำแบบนี้เพื่อให้ง่ายต่อการนำไปใช้ตอนทำ Excel และ Code น่าจะดูสะอาดขึ้น

1. เริ่มแรกก็ npm install package ตัวช่วยก่อน ที่เลือกใช้มีหลักๆ มี 3 ตัว คือ

  1. excel4node arrow-up-right: เพราะเราจะสร้างเป็น excel เลยต้องมีตัวช่วยสร้าง excel ให้เรา

  2. request arrow-up-right: สำหรับ request json จาก URL Swagger เลย

  3. request-promisearrow-up-right : ตัวช่วยทำ async ของ request

request กับ request-promise จากเว็บต้นทางแจ้งว่า "This package has been deprecated" แล้วนะครับ ดังนั้นถ้านำไปใช้ใน production น่าจะต้องหา package ที่เทียบเท่ามาใช้งานแทบครับ

2. เขียน request JSON จาก URL Swagger วิธีดูว่า URL JSON ของ Swagger ของเราคืออะไรดูได้จากหน้า Swagger เองเลยครับ ตามรูป

3. สร้าง Class Model สำหรับเก็บ API, Request และ Response

4. เตรียม Function ต่างๆ สำหรับเรียกใช้ในส่วน Function หลัก โดยแยกไว้เป็น Function ย่อยๆ ดังนี้

  1. Function สำหรับ Recursive หา Parameter ตอน Request

2. Function สำหรับ Recursive หา Parameter ตอน Response

3. Function สำหรับตรวจสอบว่า Parameter ตัวนี้เป็น Require Filed หรือเปล่าตอน Request

4. Function สำหรับตรวจสอบ Data type ว่าเป็น String หรือไม

5. Function สำหรับหาชื่อ Define เพื่อ Recursive

6. Function สำหรับ Set ค่า Request สำหรับนำไปสร้าง Excel

7. Function สำหรับ Set ค่า Response สำหรับนำไปสร้าง Excel

5. สุดท้าย Function หลักที่ถูกเรียกหลังจาก Request Swagger แล้ว เพื่อเตรียม data และ generate excel โดยขอแบ่งเป็น 2 ส่วน

  1. ส่วนทำหน้าที่ Prepare Data

2. ส่วนที่ทำหน้าสร้าง Excel ในส่วนนี้ขอแบ่งเป็น 3 ส่วน

2.1. ส่วนกำหนด Style ของ Cell

2.2. ส่วนสำหรับสร้าง Sheet Index

2.3. ส่วนสำหรับสร้าง Sheet API Specification และ Save ออกมาเป็น Excel File

คาดว่าบทความนี้จะช่วยบางท่านได้ไม่มากก็น้อย ขอบคุณครับ

circle-info

Download ตัวอย่าง Output Excel ที่ได้จาก Output Excelarrow-up-right Download Source Code ทั้งหมดได้ที่ githubarrow-up-right

Last updated