[Golang] เรามาทำ Swagger ให้สามารถเชื่อมต่อกับ grpc-gateway ได้กันเถอะ
เมื่อเชื่อมต่อ grpc-gateway กับ swagger แล้วจะแถมการสร้าง API Document ด้วยวิธีง่ายๆ
จากบทความที่แล้วผมได้เขียนบทความเกี่ยวกับ http to gRPC ด้วย grpc-gateway
ก็มีเพื่อนๆ สนใจให้เขียนบทความที่มี swagger มาเชื่อมต่อ กับ grpc-gateway
ทำไมเราต้องเชื่อมต่อ 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
สามารถดูโค้ดตัวอย่างทั้งหมดได้ที่นี่