Изучаем 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.
Другие статьи из цикла:
- Изучаем Go - создание загрузчика (часть 1)
- Изучаем Go - создание загрузчика (часть 2)
- Изучаем Go - создание загрузчика (часть 3)
- Изучаем Go - создание загрузчика (часть 4)
- Изучаем Go - создание загрузчика (часть 5)
- Изучаем Go - Использование REST API
- Изучаем Go - Продолжаем работать с REST API
- Изучаем Go - Отправка REST-запросов
- Изучаем Go - Используем REST API в паре с шаблонами проектирования
- Изучаем Go - Повторная отправка электронной почты через API
Изучаем Go - Давайте станем модульными!скороИзучаем Go - Давайте станем модульными снова!скороИзучаем Go - Сборка DevLog Часть 01скороИзучаем Go - Сборка DevLog Часть 02скоро