[Golang] เรามาทำ Swagger ให้สามารถเชื่อมต่อกับ grpc-gateway ได้กันเถอะ

Teerasak N
THE EXISTING COMPANY
2 min readMar 9, 2020

--

เมื่อเชื่อมต่อ grpc-gateway กับ swagger แล้วจะแถมการสร้าง API Document ด้วยวิธีง่ายๆ

จากบทความที่แล้วผมได้เขียนบทความเกี่ยวกับ http to gRPC ด้วย grpc-gateway

ก็มีเพื่อนๆ สนใจให้เขียนบทความที่มี swagger มาเชื่อมต่อ กับ grpc-gateway

Photo by israel palacio on Unsplash

ทำไมเราต้องเชื่อมต่อ APIs ของเรากับ Swagger

เพราะ Swagger มันสามารถสร้างเอกสารการใช้งาน API (API Document) และเครื่องมือทดสอบให้เราได้ในทันที (Testing Tools) โดยมันจะแปลงจากคำสั่งในโค้ดของเราออกมาให้นั่นเอง

ปกติก็อาจจะเห็น APIs ที่เป็นลักษณะของ REST เชื่อมต่อกับ Swagger
แต่ในบทความนี้จะเป็น APIs ที่เป็นลักษณะของ grpc-gateway เชื่อมต่อกับ Swagger ด้วยวิธีง่ายๆ กัน

ก่อนอื่นก็กลับไปดูบล็อกแรกของผม เพราะว่าจะเอา code ตัวนั้นมาทำต่อ:

มาเร่ิมกันเลย

ก่อนอื่นเรามาเตรียม Swagger UI

สามารถไปโหลด swagger-ui ได้ที่, หรือไม่ก็สามารถไปโหลดจาก repo ที่ผมได้เตรียมไว้ให้แล้ว “petstore-service/www

แล้วก็คัดลอก ‘www’ มาไว้ที่ petstore-service

ก่อนอื่นมาสร้างไฟล์ swagger.json ด้วยไฟล์ .protoc ด้วยคำสั่งนี้

protoc --proto_path=api/proto/v1 --proto_path=third_party --swagger_out=logtostderr=true:api/swagger/v1 petstore-service.proto

จะได้ไฟล์ที่ชื่อว่า petstore-service.swagger.json แล้วทำการ copy file เพื่อจะเอาไปใช้ใน swagger-ui กันด้วยคำสั่งนี้

cp api/swagger/v1/petstore-service.swagger.json www/swagger.json

มาถึงขั้นตอนการเชื่อมต่อ swagger กับ service ของเรากัน

ก็ไปนำไฟล์ที่อยู่ที่ petstore-service/pkg/protocol/rest/server.go มาแก้ไข

เสร็จแล้วเรามาลองทดสอบกัน

go run cmd/server/main.go -env=local

สรุป

การที่เรานำ grpc-gateway กับ swagger มาเชื่อมต่อ นั้นก็เพื่อให้ APIs ที่เป็นลักษณะ grpc-gateway ที่เป็นตัวกลางระหว่าง http กับ grpc ได้มี API Document และ Testing Tools ไว้ใช้สำหรับ APIs

แต่ทั้งนี้ทั้งนั้นตัว API Document ที่ Swagger สร้างให้จะได้หลังจากที่เราสร้าง APIs เรียบร้อยแล้ว

อย่างไรก็ตาม Designers Developers และ Testers ก็ต้องการ Design First Approach for APIs

สามารถดูโค้ดตัวอย่างทั้งหมดได้ที่นี่

--

--