Изучаем 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скоро