Go Gin-Gonic,从 POST 请求中获取文本
Go Gin-Gonic, get text from POST request
我开始使用 Go 和包 Gin-Gonic 开发 REST API 。这个想法是创建一个 REST API 以 JSON 格式接收 POST 请求并将此调用重定向到另一个应用程序(也是 API)。这是一段代码:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/status", func(c *gin.Context) {
c.String(200, "on")
})
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
})
r.GET("/user/:name/:action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
message := name + " is " + action
c.String(http.StatusOK, message)
})
r.POST("/foo", func(c *gin.Context) {
fmt.Printf("%s", "At least I got here")
message := c.PostForm() //???
c.JSON(200, gin.H{"status": message}) //???
})
r.Run(":8080") // listen an
}
在 r.Posts("/foo",...)
期间,我希望 c.JSON
将我发送的完整 JSON 发回给我:
curl -H "Content-Type: application/json" -X POST -d '{"user":"xyz","password":"xyz"}' http://localhost:8080/foo
我看过一些示例,其中他们通过创建与输入 JSON 具有相同结构的结构来绑定 JSON 文件(查看 https://github.com/gin-gonic/gin 处的 Gin-Gonic 示例)。但是我只需要重新发送完整的字符串而不用关心格式。有什么想法吗?
试试这个例子:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
type LOGIN struct{
USER string `json:"user" binding:"required"`
PASSWORD string `json:"password" binding:"required"`
}
func main() {
r := gin.Default()
r.GET("/status", func(c *gin.Context) {
c.String(200, "on")
})
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
})
r.GET("/user/:name/:action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
message := name + " is " + action
c.String(http.StatusOK, message)
})
r.POST("/foo", func(c *gin.Context) {
var login LOGIN
c.BindJSON(&login)
c.JSON(200, gin.H{"status": login.USER}) // Your custom response here
})
r.Run(":8080") // listen for incoming connections
}
我最终创建了一个结构来解析我的 JSON,然后我进行了一些必要的计算,最后我使用 json.Marshal 将我的 JSON 解析为字符串的数据重新发送。我认为解析 JSON 是有意义的,这是一种检查收到的信息是否正确的方法。
我开始使用 Go 和包 Gin-Gonic 开发 REST API 。这个想法是创建一个 REST API 以 JSON 格式接收 POST 请求并将此调用重定向到另一个应用程序(也是 API)。这是一段代码:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/status", func(c *gin.Context) {
c.String(200, "on")
})
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
})
r.GET("/user/:name/:action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
message := name + " is " + action
c.String(http.StatusOK, message)
})
r.POST("/foo", func(c *gin.Context) {
fmt.Printf("%s", "At least I got here")
message := c.PostForm() //???
c.JSON(200, gin.H{"status": message}) //???
})
r.Run(":8080") // listen an
}
在 r.Posts("/foo",...)
期间,我希望 c.JSON
将我发送的完整 JSON 发回给我:
curl -H "Content-Type: application/json" -X POST -d '{"user":"xyz","password":"xyz"}' http://localhost:8080/foo
我看过一些示例,其中他们通过创建与输入 JSON 具有相同结构的结构来绑定 JSON 文件(查看 https://github.com/gin-gonic/gin 处的 Gin-Gonic 示例)。但是我只需要重新发送完整的字符串而不用关心格式。有什么想法吗?
试试这个例子:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
type LOGIN struct{
USER string `json:"user" binding:"required"`
PASSWORD string `json:"password" binding:"required"`
}
func main() {
r := gin.Default()
r.GET("/status", func(c *gin.Context) {
c.String(200, "on")
})
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "Hello %s", name)
})
r.GET("/user/:name/:action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
message := name + " is " + action
c.String(http.StatusOK, message)
})
r.POST("/foo", func(c *gin.Context) {
var login LOGIN
c.BindJSON(&login)
c.JSON(200, gin.H{"status": login.USER}) // Your custom response here
})
r.Run(":8080") // listen for incoming connections
}
我最终创建了一个结构来解析我的 JSON,然后我进行了一些必要的计算,最后我使用 json.Marshal 将我的 JSON 解析为字符串的数据重新发送。我认为解析 JSON 是有意义的,这是一种检查收到的信息是否正确的方法。