С какими форматами данных работает фреймворк Gin?

Ответ

Веб-фреймворк Gin предоставляет удобные инструменты для работы с различными форматами данных как в теле запроса, так и в ответе. Ключевые форматы:

  1. JSON — самый распространенный формат для REST API. Gin умеет автоматически парсить (bind) JSON из тела запроса в Go-структуры и сериализовывать структуры в JSON-ответ.

    type User struct {
        Name string `json:"name" binding:"required"`
        Age  int    `json:"age"`
    }
    
    router.POST("/user", func(c *gin.Context) {
        var user User
        // ShouldBindJSON парсит тело запроса в структуру.
        if err := c.ShouldBindJSON(&user); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // c.JSON сериализует структуру и отправляет с кодом 200.
        c.JSON(http.StatusOK, user)
    })
  2. Данные форм (Form-Data и x-www-form-urlencoded) — для данных, отправленных из HTML-форм, и параметров из URL (query parameters).

    router.POST("/form", func(c *gin.Context) {
        // Данные из тела формы
        name := c.PostForm("name")
        // Данные из строки запроса (?age=25)
        // DefaultQuery позволяет задать значение по умолчанию.
        age := c.DefaultQuery("age", "18")
        c.String(http.StatusOK, "Name: %s, Age: %s", name, age)
    })
  3. XML — поддерживается аналогично JSON для парсинга и генерации XML-ответов.

    // Отправка XML-ответа
    c.XML(http.StatusOK, gin.H{"status": "success", "message": "pong"})
  4. YAML — Gin не имеет встроенной поддержки YAML, но его можно легко интегрировать, используя сторонние библиотеки (например, gopkg.in/yaml.v2) для парсинга тела запроса или формирования ответа.

  5. Бинарные данные (Raw Data) — для обработки файлов, изображений или любых других бинарных данных можно использовать c.GetRawData() для чтения и c.Data() для отправки.

Gin также позволяет создавать собственные рендереры и биндеры для поддержки любых других форматов.