使用真实的API -CLIMATEMPO练习
#初学者 #api #go #休息

它发生了不止一次的人,他们开始要求我寻求项目提示开始。仍然在问提示的问题中,他们还问我如何在后端项目中消费API,以使他们的感觉正在构建有意义的东西,并且它们是同一发明的。

当时,我被介绍给TMDB(电影DB),这基本上是由社区创建和维护的在线服务,您可以消费有关电影和系列的信息。对于我们的比例,这项服务已经出色了,坦率地说,我已经使用了几次新框架练习,并取得了更愉快甚至更真实的结果。只是……仍然像我自己做的那样。没有良好,实用和实用的应用。

那时,这些天在互联网上浏览时,我发现Climatempo具有一个API,可以为您提供有关天气和时间的真正结果(没有名字的双关语)。您在地址https://advisor.climatempo.com.br/

上找到此API

API Climatempo

NãºMeros中的API

他们提供的服务将具有免费版本(显然有一定限制),并承诺具有99.8%的正常运行时间。我认为这是一个非常令人满意的价值。

此外,它们还提供了一个非常有趣且解释的API文档,该文档将使用其余模型提供。

还提供一个非常有趣的仪表板,可帮助您遵循计划的内部。

o仪表板

创建帐户时,您将可以访问董事会的第一件事。这将帮助您查看有关API状态,正常运行时间,时间-dio响应的信息,以及每天一次的命中次数。

记住,免费计划为您提供10req/min或100req/Day的限制。绰绰有余。

纪录片

文档无法逃脱标准,您可以找到aqui。但是,当我们对API建模的方式上反映了DOC上的很大反映,在这里,我认为我认为在这个非常有趣的API中设计的合同可以作为灵感。关于如何进行构造。

在这里,我们将挂钩用于您的访问令牌。所有(至少我看到的)终点都会要求您将令牌作为查询参数传递。

在这里,一个人:我觉得那样通过代币很奇怪。我会选择通过标头通过,但这很好。

和这个令牌您可以在面板上很容易生成一个新的。

我可能会更改的另一点。该令牌模型有点不安全,因为在泄漏的情况下,它不会在X分钟后再次生成。可能是一个问题,但是由于我们不是在这里谈论明智的数据,所以它也是世界的尽头。您无法获得各种访问权限。

放置

对于本文不仅在文本足迹中,让我们尽可能地进行简单的集成?

让我们从创建一个项目开始,为此,我将使用所有开发人员的创造力来命名事物,并创建一个称为koud0
的文件夹

$ mkdir climatempo-go
$ go mod init github.com/marcopollivier/climatempo-go

对于这个项目,我仍在使用1.20(昨天21个... denth)

在第一篇文章中,我将简单地创建一个main.go并在其中完成所有操作。我将其放在初学者的标签中,所以他们不抱怨。我将尝试使其他帖子推进此项目。

让我们从Hello,World看看我的环境是否还可以。我总是这样做。

package main

import "fmt"

func main() {
    fmt.Println("Oi, mundo")
}

我将如何使用我们从documentaçãogo by example转到的net/http软件包来确保什么都没有改变。

ah ...在这里,我们将从某个地方获取信息,如果我们想到客户/服务器结构,我们将被视为客户。

如果您对此有很多生命,请考虑:我在问或服务...我认为现在很清楚,对吗?

很好。让我们去当前的时间条件。您将在此文档地址找到此部分:http://apiadvisor.climatempo.com.br/doc/index.html#api-Weather-CurrentWeatherByCity

根据她的说法,我们将在endpoint koud4

上制作一个GET

最后,如果我们称终端为终端。

$ curl -i http://apiadvisor.climatempo.com.br/api/v1/weather/locale/3477/current?token=your-app-token

将其翻译成一个,我们有:

package main

import "net/http"

func main() {
    http.Get("http://apiadvisor.climatempo.com.br/api/v1/weather/locale/3477/current?token=your-app-token")
}

,但它仍然无能为力...我的意思是...这是©发生的,但是我们拿走了这些信息并与之创建一些东西。

这完全是一个步骤,表明我没有从头开始任何东西。我知道您已经单击并看到了我在那里发送的文档,但是如果涉及的文字如此之多,那么您会错过此机会,您会注意到文档中的某些内容。

它将由:

组成
  1. 合同(地址和所有HTTP)
  2. 该合同的示例(使用模式使用卷曲)
  3. 您需要通过的零件。
  4. 当您在成功场景中拥有该API会返回的内容
  5. 她将返回错误场景。

,我们的代码将需要表示这些信息中的每一个。让我们看看发生这种情况吗?

合同

让我们从合同的这一部分开始。上面此列表中的前3个项目。

Contrato da api do Climatempo

,让我们与我们创建的方式建立这种相关性。

Correlação entre código e documentação da API do ClimaTempo

E aqui os parametros

这样,我们将按照以下方式发展。

package main

import (
    "bufio"
    "fmt"
    "net/http"
)

func main() {
    resp, _ := http.Get("http://apiadvisor.climatempo.com.br/api/v1/weather/locale/3477/current?token=your-app-token")
    defer resp.Body.Close()

    fmt.Println(resp.StatusCode)

    scanner := bufio.NewScanner(resp.Body)
    for i := 0; scanner.Scan() && i < 5; i++ {
        fmt.Println(scanner.Text())
    }

}

给出以这种方式做什么的摘要:

  • 它从此获得答案,并将值分配给Koud5差异。由于此功能http.get具有多色返回,因此第二个parano是一个错误,但是对于此示例,我不想担心它。因此,我使用_(下划线)说我不想在此回报中做任何事情。

关于下划线的免责声明:这只是一个示例,即谈论消费API的基本过程。避免母亲以一种生产性环境的方式使用它,尤其是在这种情况下是错误的回报。

返回后,我调用一个defer,该defer将调用koud8的功能并放在执行堆的末尾。因此,在执行此功能中预见的所有内容之后,它将从呼叫中关闭此呼叫。

之后,我们打印此调用的状态代码。如果我们返回文档,我们知道这是正确的记录。在这种情况下,当我们有成功的示例时,她说她将返回koud9 code9,当她有错误时,以4xx返回某些东西。

此4xx表示您将返回一些Famãlia400。(400:不良请求,401:未经授权等)。查看更多nesse artigo

Exemplo de erro como está documentado

在这一点上,如果我们按照您的方式执行操作,它将返回其中一个错误。如果400错误将返回,以下错误的错误

{"error":true,"detail":"Invalid token"}

这正是因为我们在那里的地址上更改了令牌。

http://apiadvisor.climatempo.com.br/api/v1/weather/locale/3477/current?token=your-app-token

将Koud10的文本更改为面板上出现的令牌。请小心留下胡说八道或与任何人分享。

这样,我们将对文档中提出的成功模式进行响应。在这种情况下,我们将有一个返回koud9和一个与此类似的JSON:

{
   "id":3477,
   "name":"S\u00e3o Paulo",
   "state":"SP",
   "country":"BR  ",
   "data":{
      "temperature":17,
      "wind_direction":"SSE",
      "wind_velocity":19,
      "humidity":94,
      "condition":"Chuva fraca",
      "pressure":1023,
      "icon":"5n",
      "sensation":17,
      "date":"2023-08-09 19:20:08"
   }
}

包括£o

我将在此示例中停下来累。尤其是如果我们认为有关此主题的第一篇文章的目标是介绍Climatempo的API,并且是一种指导良好的初学者丸的一部分,我相信我们停下来是个好时机。

在这篇文章中,我们可以看到如何了解API文档的详细信息。我们已经看到,在测试客户HTTP解决方案时,Climatempo可能是练习一些新技术的好项目。

,我们还使用net/http套件的基本内容进行了官方示例。

帖子

可能下一步将是此处的演变。例如,让我们将JSON变成结构,从而改善我们的项目。

如果您喜欢这篇文章,则喜欢并在网络上共享。评论和me siga nas redes中的任何问题或反馈保留:)

在©更多。