英文:
How to make a GET request in Go Fiber to an API endpoint?
问题
在GO Fiber中进行GET请求的方法如下:
首先,你需要导入github.com/gofiber/fiber/v2
包。
然后,你可以使用fiber.New()
函数创建一个Fiber应用程序实例。
接下来,你可以使用app.Get()
方法来定义一个GET路由,指定API的端点URL。
在路由处理函数中,你可以使用fiber.Client()
函数创建一个Fiber客户端实例。
然后,你可以使用客户端实例的Get()
方法来发送GET请求,并指定API的端点URL。
最后,你可以使用ctx.JSON()
方法将获取到的数据作为JSON响应返回。
下面是一个示例代码:
package main
import (
"fmt"
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
app.Get("/posts", func(ctx *fiber.Ctx) error {
client := fiber.Client()
resp, err := client.Get("https://jsonplaceholder.typicode.com/posts")
if err != nil {
return err
}
defer resp.Body.Close()
var data []byte
_, err = resp.Body.Read(data)
if err != nil {
return err
}
return ctx.JSON(data)
})
err := app.Listen(":3000")
if err != nil {
fmt.Println(err)
}
}
请注意,这只是一个简单的示例代码,你可能需要根据你的实际需求进行适当的修改。
英文:
How to make a GET request in GO Fiber. I saw Fiber client but there is no working example code there. Could anyone kindly show me how to do that?
suppose there is a API endpoint https://jsonplaceholder.typicode.com/posts How can I get the data from that endpoint using the Fiber client?
答案1
得分: 1
客户端功能已在v2.6.0中发布。可以在这里查看实现的提交。
还可以查看client.go。
以下是示例代码:
package main
import (
"encoding/json"
"fmt"
"github.com/gofiber/fiber/v2"
)
type user struct {
UserID int `json:"userId"`
ID int `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
}
func main() {
request := fiber.Get("https://jsonplaceholder.typicode.com/posts")
request.Debug()
// 设置请求头
request.Set("header-token", "value")
_, data, err := request.Bytes()
if err != nil {
panic(err)
}
var users []user
jsonErr := json.Unmarshal(data, &users)
if jsonErr != nil {
panic(err)
}
for _, data := range users {
fmt.Println("UserID : ", data.UserID)
fmt.Println("Title : ", data.Title)
}
}
你还可以使用其他的HTTP方法,如:
fiber.Post()
fiber.Patch()
fiber.Put()
fiber.Delete()
希望对你有所帮助。
英文:
The client feature has released with v2.6.0. And see the implemention commit at here
Also see client.go
Here is the sample code
package main
import (
"encoding/json"
"fmt"
"github.com/gofiber/fiber/v2"
)
type user struct {
UserID int `json:"userId"`
ID int `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
}
func main() {
request := fiber.Get("https://jsonplaceholder.typicode.com/posts")
request.Debug()
// to set headers
request.Set("header-token", "value")
_, data, err := request.Bytes()
if err != nil {
panic(err)
}
var users []user
jsonErr := json.Unmarshal(data, &users)
if jsonErr != nil {
panic(err)
}
for _, data := range users {
fmt.Println("UserID : ", data.UserID)
fmt.Println("Title : ", data.Title)
}
}
You can use the other http methods as
fiber.Post()
fiber.Patch()
fiber.Put()
fiber.Delete()
Hope this helps
答案2
得分: 1
感谢Renan Bastos(@renanbastos93)。我得到了另一个可工作的代码示例。
package main
import (
"encoding/json"
"github.com/gofiber/fiber/v2"
)
type Posts struct {
UserID int `json:"userId"`
ID int `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
}
type AllPosts []Posts
func getPosts(c *fiber.Ctx) (err error) {
agent := fiber.AcquireAgent()
agent.Request().Header.SetMethod("GET")
agent.Request().SetRequestURI("https://jsonplaceholder.typicode.com/posts")
err = agent.Parse()
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
var allPosts AllPosts
statusCode, body, errs := agent.Bytes()
if len(errs) > 0 {
return c.Status(statusCode).JSON(errs)
}
err = json.Unmarshal(body, &allPosts)
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
return c.JSON(allPosts)
}
func main() {
f := fiber.New()
f.Get("/", getPosts)
err := f.Listen(":9000")
if err != nil {
panic(err)
}
}
请注意,这是一个使用Go语言编写的代码示例,用于获取JSON数据并将其解析为结构体。它使用了github.com/gofiber/fiber/v2
库来创建一个基于Fiber框架的HTTP服务器。getPosts
函数处理GET请求,并通过发送JSON响应返回所有帖子的列表。主函数创建一个Fiber实例,并将getPosts
函数与根路径"/"关联。最后,服务器在端口9000上监听请求。
英文:
Thanks to Renan Bastos(@renanbastos93). I got another working code example.
package main
import (
"encoding/json"
"github.com/gofiber/fiber/v2"
)
type Posts struct {
UserID int `json:"userId"`
ID int `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
}
type AllPosts []Posts
func getPosts(c *fiber.Ctx) (err error) {
agent := fiber.AcquireAgent()
agent.Request().Header.SetMethod("GET")
agent.Request().SetRequestURI("https://jsonplaceholder.typicode.com/posts")
err = agent.Parse()
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
var allPosts AllPosts
statusCode, body, errs := agent.Bytes()
if len(errs) > 0 {
return c.Status(statusCode).JSON(errs)
}
err = json.Unmarshal(body, &allPosts)
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
}
return c.JSON(allPosts)
}
func main() {
f := fiber.New()
f.Get("/", getPosts)
err := f.Listen(":9000")
if err != nil {
panic(err)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论