How to make a GET request in Go Fiber to an API endpoint?

huangapple go评论86阅读模式
英文:

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)
    }
}

huangapple
  • 本文由 发表于 2023年7月4日 13:09:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/76609533.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定