У вас включен AdBlock или иной блокировщик рекламы.

Пожалуйста, отключите его, доход от рекламы помогает развитию сайта и появлению новых статей.

Спасибо за понимание.

В другой раз
DevGang блог о програмировании
Авторизоваться

Изучаем Go - Использование REST API

Недавно я размышлял о такой технологии, как REST API. Мне кажется, что работа с SaaS сервисом почти гарантирует, что вы так или иначе будете работать с одним или даже несколькими апи, так что, думаю, имеет смысл задуматься о том, как их правильно использовать. Я немного практиковался, изучал базовые вещи в Go и подумал, что было бы неплохо поделиться своим опытом и продолжить мою серию Learning Go.

Благодаря встроенному в Go пакету net / http довольно легко начать работу с базовым API-интерфейсом. Практически все необходимое для запроса удаленного API можно найти в стандартной библиотеке Go. 

Ну что же, начнем мы с того, что просто перейдем к Go ... и раз уж это наш тестовый проект, назовем наш пакет просто main. Добавляем импорты fmt, io / ioutil, net / http - тут, строго говоря, нам не нужен fmt, но раз уж мы ничего не делаем с ответом API, кроме его вывода, мы его включили.

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

Теперь создадим функцию main и объявим наш URL API, в этот раз мы просто сделаем запрос к httpbin.org. Отправим URL и метод «GET» в http.NewRequest и получим релевантный объект http.Request (если не возникнет ошибка), который нам пригодиться далее.

func main() {
    APIURL := "https://httpbin.org/get"
    req, err := http.NewRequest(http.MethodGet, APIURL, nil)
    if err != nil {
        panic(err)
    }

Используя http, мы создаем дефолтного клиента, он будет обрабатывать запросы к удаленному серверу. После, мы вызовем метод Do () и фактически тем самым сделаем запрос и получим ответ или ошибку. Все таки это Go,  поэтому мы проверим ошибки и продолжим, если у нас их нет.

    client := http.DefaultClient
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }

Предполагая, что мы получили релевантный ответ, начнем его обрабатывать. Сначала используем ключевое слово defer`для закрытие тела ответа. Таким образом мы сможем считывать данные, а Go сам позаботится о его закрытии, как только вернется внешняя функция. Но начнем с того, что используем iioutil.ReadAll для чтения запроса и возврата массива байтов, до тех пор, пока не будет ошибки .

defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

Теперь давайте преобразуем массив байтов в строку и выведем его в стандартный формат.

    fmt.Printf("%v", string(body))

И вуаля! Это все, что нужно для получения данных с удаленного сервера REST в Go.

{
  "args": {},
  "headers": {
    "Accept-Encoding": "gzip",
    "Connection": "close",
    "Host": "httpbin.org",
    "User-Agent": "Go-http-client/1.1"
  },
  "origin": "68.211.xx.xx",
  "url": "https://httpbin.org/get"
}

В следующий раз я думаю, что мы расширим нашу программу до полноценного модуля, который сможем использовать для будущей работы с REST. А далее напишем что-нибудь, используя Api.

Другие статьи из цикла:

#Golang

Присоеденяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать