สร้าง RESTful API ด้วย Gin Framework
เผยแพร่แล้ว: 2022-09-02คุณรอคอยที่จะสร้าง REST API ด้วยความช่วยเหลือของ Gin framework หรือไม่? จากนั้นคุณควรให้บล็อกนี้อ่านอย่างละเอียด ด้วยขั้นตอนง่ายๆ คุณจะได้เรียนรู้การสร้าง API พื้นฐาน ซึ่งคุณสามารถดำเนินการโครงการที่ซับซ้อนอื่นๆ ได้ และใช่ คุณสามารถทำสิ่งต่างๆ ได้ด้วยตัวเองโดยไม่ต้องใช้บริการพัฒนา Golang แต่ก่อนที่เราจะเริ่มต้นทำความคุ้นเคยกับแง่มุมทางทฤษฎีของกรอบ Gin
- ภารกิจแรกที่ต้องทำให้สำเร็จ
- คุณต้องสร้างไดเร็กทอรีก่อนใน go-workspace คุณจะใช้ Command Prompt หากใช้คอมพิวเตอร์ Windows ใช้ Terminal หากคุณใช้ macOS หรือ Linux เป็นระบบปฏิบัติการของคุณ
- ฉันจะใช้พรอมต์คำสั่งในสถานการณ์นี้
cd go-workspace
งาน mkdir
งานซีดี
รหัส
ขณะที่เราพิมพ์ code . เราจะได้เห็น VS Code เปิดตัว ในกรณีของคุณ อาจเป็น IDE หรือตัวแก้ไขอื่น
- เริ่มต้นด้วย VS Code
- สิ่งแรกที่เราจะทำคือสร้างไฟล์ main.go ต่อไปนี้ เราต้องดาวน์โหลดกรอบงาน gin เพื่อสร้าง REST API
- ตอนนี้เราต้องสร้างไฟล์ go.mod เราพิมพ์:
ไป mod init golang.com/job
- หลังจากสร้างไฟล์ go.mod เราจะพิมพ์:
ไปรับ github.com/gin-gonic/gin
สิ่งนี้จะทำให้ไฟล์ go.sum ถูกสร้างขึ้นรวมถึงแพ็คเกจที่จำเป็นทั้งหมดที่เกี่ยวข้องกับเฟรมเวิร์ก gin ที่จะดาวน์โหลด
- มาเริ่มกันเลยกับ SImple API
- เราแค่เขียนโค้ด
แพ็คเกจหลัก
นำเข้า (
“เอฟเอ็ม”
“เน็ต/http”
“github.com/gin-gonic/gin”
)
ฟังก์ชั่นหลัก ()
{s:=gin.Default()
s.GET (“”, func (c *gin.Context){
c.String(http.StatusOK “หน้าที่การงานคืออะไร”)
})
s.Run (“localhost: 8000”)
}
- อย่างที่คุณเห็น เราได้นำเข้าทุกแพ็คเกจที่แอปพลิเคชันต้องการ จากนั้นเราไปที่ฟังก์ชั่นหลักโดยตรง สิ่งที่เรากำลังทำคือการสร้างโมดูลเริ่มต้นสำหรับการกู้คืนหรือตัวบันทึกมิดเดิลแวร์สำหรับ Gin
- การตั้งค่าเริ่มต้นจะรวมอยู่ในตัวแปร "s" และเราจะใช้ตัวแปรนี้เพื่อช่วยในการพัฒนา GET API อาร์กิวเมนต์แรกที่ฉันได้ให้ไว้ในตัวอย่างนี้คือ URL ของ API
- URL พื้นฐานที่ระบุโดย w.Run (“localhost:8000”) จะถูกใช้เพื่อโฮสต์ API ที่ localhost:8000 นอกจากนี้ อาร์กิวเมนต์แรกยังระบุเส้นทางสัมพัทธ์ของ API
- ฟังก์ชั่นตัวจัดการ func (c *gin.Context) หมายถึงลำดับของฟังก์ชันที่คุณสามารถให้ได้
- ตัวชี้ไปยังตัวแปร *gin.Context ทำหน้าที่เป็นอาร์กิวเมนต์ของฟังก์ชัน ดังนั้น “c” ในกรณีนี้จึงหมายถึงบริบท
- บริบทต้องคืนค่าที่เป็น c.String หรือ c.JSON มีสองเกณฑ์ในการดำเนินการ สถานะถูกระบุโดยอาร์กิวเมนต์แรก ซึ่งเป็นจำนวนเต็มตรงไปตรงมา (http.StatusOK) เราสามารถใช้สิ่งนี้ได้เนื่องจากเรานำเข้าแพ็คเกจ net/http
- ฉันแค่ส่งสตริงตัวอย่างหลังจากนี้ “หน้าที่การงานคืออะไร”
- มาเรียกใช้โปรแกรมด้านบนกันเถอะ
ในการรันโปรแกรม เราต้องพิมพ์ go run main.go

- อย่างที่คุณเห็น มีคำขอ GET อยู่บน URL เปล่า นอกจากนี้ยังมาพร้อมกับฟังก์ชั่นที่ปรับแต่งได้ นอกจากนี้ ยังสามารถมองเห็นการทำงานของโหมดปล่อยของเครื่องยนต์ได้ มีจุดปลายที่ใช้งานอยู่เพียงจุดเดียวที่ localhost 8000
- ในเว็บเบราว์เซอร์ เราอาจพิมพ์ localhost:8000 เพื่อดู:
- ในระหว่างนี้ คุณจะได้เห็นสแนปชอตต่อไปนี้ใน VS Code

สิ่งนี้หมายความว่า? เฟรมเวิร์ก gin มีบทบาทอย่างมากในการตรวจสอบเวลาตอบสนองของโค้ดที่ดำเนินการ
- มุ่งเน้นที่ GET API โดยที่ URL จัดการการส่งพารามิเตอร์ผ่าน
โค้ดที่ตามมาจะถือว่า API จะให้ค่าแก่คุณ ซึ่งเป็นค่าที่เหมาะสมที่สุดในการตอบสนองต่อ URL
s.GET(“/:get”, func (c *gin.Context){
var val = c.Param (“getr”)

c.JSON(http.StatusOK, gin.H{
“ข้อมูลตอบกลับ”:วาล,
})
})
///2 ส่วน
- เราอาจระบุชื่อตัวแปรแต่ละตัวในคำขอ GET โดยคั่นด้วยเครื่องหมายทวิภาค ทุกสิ่งที่ป้อนหลังจาก URL พื้นฐานจะถือว่าเป็น "ได้รับ"
- ในการกำหนดค่าของ "get" เราต้องกำหนดบริบทของ Param และชื่อของตัวแปรที่เรากล่าวถึง Val จะได้รับ 'get' จาก Gin และรับทราบผล
- ต่อไป เราจะเห็นว่าฉันกำลังโอน JSON ที่มีค่า
คุณกำลังทำงานกับสิ่งที่ซับซ้อนหรือไม่? คุณควรใช้ บริการการพัฒนา Golang ในกรณีที่คุณสะดุดกับปัญหาและไม่สามารถแก้ไขได้
- มาเรียกใช้โปรแกรมด้านบนกันเถอะ
- อีกครั้งเราจะต้องรันโปรแกรมโดยพิมพ์ go run main.go
หากคุณเห็นข้อความ 'tcp 127.0.0.1: 8000: bind:Only use of each socket address (โปรโตคอล/ที่อยู่เครือข่าย/พอร์ต) เท่านั้นที่ได้รับอนุญาต' คุณจำเป็นต้องดำเนินการในพรอมต์คำสั่ง
nestat -ano | findstr :8000
ตรวจสอบค่าของ LISTENING (เช่น 7932) จากนั้นคุณต้องพิมพ์
taskkill / pid 7932 /F
ซึ่งจะนำไปสู่การยุติกระบวนการ pid
- บนเบราว์เซอร์ เราทำสิ่งต่อไปนี้:

เหตุผลที่เราต้องป้อนสตริงหลังจากระบุ localhost:8000 เป็นเพราะ API ต้องการสตริงจาก URL
- ลองใช้ POST API
- เราจะพยายามเชื่อมต่อกับ POST API ที่นี่ นอกจากนี้ เราทราบดีว่าข้อมูลจะมีอยู่ในร่างกาย นี่คือเวลาที่โครงสร้างจะมีประโยชน์
- คุณจำส่วนนี้ได้หรือไม่?
แพ็คเกจหลัก
นำเข้า (
“เอฟเอ็ม”
“เน็ต/http”
“github.com/gin-gonic/gin”
)
- ต่อจากนี้ เราจะสร้างโครงสร้างที่มีช่องข้อมูลสองช่อง ดังที่คุณเห็น:
พิมพ์โครงสร้างงาน {
เงินเดือน int `json:”salary” มีผลผูกพัน: “required”`
สตริงชื่อ `json:”name” การเชื่อมโยง: “required” `
}
- json:”salary” และ json:”name” เป็นตัวแทนของคีย์ต่างๆ คุณจะเห็นว่าการผูกถูกระบุเป็น "จำเป็น"
- ตามส่วน ///2 เราจะพิมพ์:
s.POST(“/highlight”, func (c *gin.Context){
var data Job
ถ้า err := c.ShouldBind(&data); ผิดพลาด != ไม่มี{
fmt.Println (ผิดพลาด)
c.JSON (http.StatusBadRequest, gin.H{
“ข้อผิดพลาด”: fmt.Sprintf(“%v”, ผิดพลาด),
})
} อื่น{
c.JSON(http.StatusOK, gin.H{
“ข้อมูล” : ข้อมูล,
})
}
})
- ลองดูที่บล็อกรหัสนี้ ใน s.POST เราจะสร้างวัตถุสำหรับงาน บริบท "c" ควรแนบกับโมเดลข้อมูลหลังจากนั้น หาก c.ShouldBind(&data) เกิดข้อผิดพลาด มันจะแจ้งเตือน API ของปัญหา
- ฉันส่งคำขอที่ไม่ถูกต้องซึ่งแสดงให้เห็นถึงข้อผิดพลาดที่พบใน “error”:fmt.Sprintf(“%v”, err) ใน c.JSON(http.StatusBadRequest)
- หากไม่มีปัญหาใดๆ ระบบจะใช้คีย์ "ข้อมูล" เพื่อส่งข้อมูลกลับไปยังการตอบสนอง API
- มาเรียกใช้บล็อกสุดท้ายของรหัสกันเถอะ
- มาดูขั้นตอนสุดท้ายของโปรแกรมกัน เราต้องพิมพ์ go run main.go เพื่อทำสิ่งนี้ นอกจากนี้ ฉันจะใช้บุรุษไปรษณีย์เพื่อแสดงว่า API ทำงานอย่างไรและโค้ดทำงานอย่างไร ต้องติดตั้งเวอร์ชันเดสก์ท็อปเท่านั้น
- คุณจะเห็นว่าฉันมีช่องข้อมูลสองช่องในร่างกายหากคุณดูภาพหน้าจอด้านล่าง Raw และ JSON ควรเป็นตัวเลือกสำหรับ Body

- เมื่อเราคลิกที่ 'ส่ง' เราจะเห็นผลลัพธ์ดังต่อไปนี้:
{
"ข้อมูล": {
“เงินเดือน”: 23000,
“ชื่อ”: “โรเบิร์ต ฮอลล์”
}
}
คุณสามารถเข้าใจโปรแกรมได้หรือไม่? ใช่? แล้วเยี่ยมมาก ในกรณีสุดท้าย เราจะได้เห็น API สามตัวที่ทำงานอยู่ ตัวที่ไม่มีการกล่าวถึงใน URL ตัวที่คาดหวังสตริง และตัวสุดท้ายที่คาดหวังค่าในเนื้อหา หวังว่าคุณจะสามารถจัดการกับงาน REST API ที่ท้าทายได้ในตอนนี้