oop - 戈兰 : What to return when building an SDK to interact with a Web API?

标签 oop go design-patterns sdk

我正在使用 Go 为 Web 应用程序构建 SDK。

我想知道向 SDK 用户返回数据的最佳形式是什么。

例如,下面是一个接受 http.Request 对象的函数。该函数应返回的首选对象/结构是什么?

func runRequest(request *http.Request) map[string]interface{} {
    resp, err := http.DefaultClient.Do(request)
    //handle error
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    var data map[string]interface{}
    err2 := json.Unmarshal([]byte(body), &data)
    //handle error

    return data
}

最佳答案

对于这个简单的示例,您可以使用 json.Unmarshal 使用的相同方法。也就是说,您的函数采用一个指向您想要将响应正文解码到的值的指针。

func RunRequest(request *http.Request, dst interface{}) error {
    resp, err := http.DefaultClient.Do(request)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    return json.NewDecoder(resp.Body).Decode(dst)
}

关于oop - 戈兰 : What to return when building an SDK to interact with a Web API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50804385/

相关文章:

javascript - Javascript 中的模拟方法——它们是如何工作的?

go - 我可以使用Go API一击而获得一个动植物数据库文档的json数据吗?

oop - 依赖抽象有什么明显的缺点吗?

javascript - 模块化 Promise 和 Promise.all()

PHPOO : Calling methods on abstract classes?

java - 如何将 Iterable<interface> 返回类型方法重写为 Iterable<?扩展接口(interface)>返回类型方法

go - 实现库回调

laravel - 在 Laravel 中使用第 3 方 API 和创建域时使用适配器模式

c++ - 如何在不违反封装的情况下合法访问和修改私有(private)字段 vector 和 map?

ssh - Golang 中的 SCP 示例