تخطَّ إلى المحتوى

الاستعلام ونموذج الإرسال

عند معالجة طلب POST، غالباً ما تحتاج لقراءة القيم من كل من سلسلة استعلام URL وجسم الطلب. يحتفظ Gin بهذين المصدرين منفصلين، بحيث يمكنك الوصول إلى كل منهما بشكل مستقل:

  • c.Query("key") / c.DefaultQuery("key", "default") — يقرأ من سلسلة استعلام URL.
  • c.PostForm("key") / c.DefaultPostForm("key", "default") — يقرأ من جسم الطلب بتنسيق application/x-www-form-urlencoded أو multipart/form-data.

هذا شائع في واجهات REST APIs حيث يُحدد المسار المورد (عبر معاملات الاستعلام مثل id) بينما يحمل الجسم الحمولة (مثل name وmessage).

package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.POST("/post", func(c *gin.Context) {
id := c.Query("id")
page := c.DefaultQuery("page", "0")
name := c.PostForm("name")
message := c.PostForm("message")
fmt.Printf("id: %s; page: %s; name: %s; message: %s\n", id, page, name, message)
c.String(http.StatusOK, "id: %s; page: %s; name: %s; message: %s", id, page, name, message)
})
router.Run(":8080")
}

اختبره

Terminal window
# Query params in URL, form data in body
curl -X POST "http://localhost:8080/post?id=1234&page=1" \
-d "name=manu&message=this_is_great"
# Output: id: 1234; page: 1; name: manu; message: this_is_great
# Missing page -- falls back to default value "0"
curl -X POST "http://localhost:8080/post?id=1234" \
-d "name=manu&message=hello"
# Output: id: 1234; page: 0; name: manu; message: hello

انظر أيضاً