สร้าง RESTful API ด้วย Gin Framework

เผยแพร่แล้ว: 2022-09-02

คุณรอคอยที่จะสร้าง REST API ด้วยความช่วยเหลือของ Gin framework หรือไม่? จากนั้นคุณควรให้บล็อกนี้อ่านอย่างละเอียด ด้วยขั้นตอนง่ายๆ คุณจะได้เรียนรู้การสร้าง API พื้นฐาน ซึ่งคุณสามารถดำเนินการโครงการที่ซับซ้อนอื่นๆ ได้ และใช่ คุณสามารถทำสิ่งต่างๆ ได้ด้วยตัวเองโดยไม่ต้องใช้บริการพัฒนา Golang แต่ก่อนที่เราจะเริ่มต้นทำความคุ้นเคยกับแง่มุมทางทฤษฎีของกรอบ Gin

  1. ภารกิจแรกที่ต้องทำให้สำเร็จ
  • คุณต้องสร้างไดเร็กทอรีก่อนใน go-workspace คุณจะใช้ Command Prompt หากใช้คอมพิวเตอร์ Windows ใช้ Terminal หากคุณใช้ macOS หรือ Linux เป็นระบบปฏิบัติการของคุณ
  • ฉันจะใช้พรอมต์คำสั่งในสถานการณ์นี้

cd go-workspace

งาน mkdir

งานซีดี

รหัส

ขณะที่เราพิมพ์ code . เราจะได้เห็น VS Code เปิดตัว ในกรณีของคุณ อาจเป็น IDE หรือตัวแก้ไขอื่น

  1. เริ่มต้นด้วย VS Code
  • สิ่งแรกที่เราจะทำคือสร้างไฟล์ main.go ต่อไปนี้ เราต้องดาวน์โหลดกรอบงาน gin เพื่อสร้าง REST API
  • ตอนนี้เราต้องสร้างไฟล์ go.mod เราพิมพ์:

ไป mod init golang.com/job

  • หลังจากสร้างไฟล์ go.mod เราจะพิมพ์:

ไปรับ github.com/gin-gonic/gin

สิ่งนี้จะทำให้ไฟล์ go.sum ถูกสร้างขึ้นรวมถึงแพ็คเกจที่จำเป็นทั้งหมดที่เกี่ยวข้องกับเฟรมเวิร์ก gin ที่จะดาวน์โหลด

  1. มาเริ่มกันเลยกับ 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
  • ฉันแค่ส่งสตริงตัวอย่างหลังจากนี้ “หน้าที่การงานคืออะไร”
  1. มาเรียกใช้โปรแกรมด้านบนกันเถอะ

ในการรันโปรแกรม เราต้องพิมพ์ go run main.go

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

สิ่งนี้หมายความว่า? เฟรมเวิร์ก gin มีบทบาทอย่างมากในการตรวจสอบเวลาตอบสนองของโค้ดที่ดำเนินการ

  1. มุ่งเน้นที่ 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 ในกรณีที่คุณสะดุดกับปัญหาและไม่สามารถแก้ไขได้

  1. มาเรียกใช้โปรแกรมด้านบนกันเถอะ
  • อีกครั้งเราจะต้องรันโปรแกรมโดยพิมพ์ 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

  1. ลองใช้ 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
  1. มาเรียกใช้บล็อกสุดท้ายของรหัสกันเถอะ
  • มาดูขั้นตอนสุดท้ายของโปรแกรมกัน เราต้องพิมพ์ go run main.go เพื่อทำสิ่งนี้ นอกจากนี้ ฉันจะใช้บุรุษไปรษณีย์เพื่อแสดงว่า API ทำงานอย่างไรและโค้ดทำงานอย่างไร ต้องติดตั้งเวอร์ชันเดสก์ท็อปเท่านั้น
  • คุณจะเห็นว่าฉันมีช่องข้อมูลสองช่องในร่างกายหากคุณดูภาพหน้าจอด้านล่าง Raw และ JSON ควรเป็นตัวเลือกสำหรับ Body
  • เมื่อเราคลิกที่ 'ส่ง' เราจะเห็นผลลัพธ์ดังต่อไปนี้:

{

"ข้อมูล": {

“เงินเดือน”: 23000,

“ชื่อ”: “โรเบิร์ต ฮอลล์”

}

}

คุณสามารถเข้าใจโปรแกรมได้หรือไม่? ใช่? แล้วเยี่ยมมาก ในกรณีสุดท้าย เราจะได้เห็น API สามตัวที่ทำงานอยู่ ตัวที่ไม่มีการกล่าวถึงใน URL ตัวที่คาดหวังสตริง และตัวสุดท้ายที่คาดหวังค่าในเนื้อหา หวังว่าคุณจะสามารถจัดการกับงาน REST API ที่ท้าทายได้ในตอนนี้