Обращение к внешнему REST API из кода
Как ранее и говорилось, REST API служит по большей части как способ коммуникации между двумя программами. В этом уроке мы подробнее обсудим как отправлять запросы не с помощью внешнего клиента на компьютере, а прямо из программного кода.
В любом языке программирования можно найти собственные HTTP клиенты, которые позволяют взаимодействовать с сетевыми ресурсами средствами HTTP протокола. В Ruby для данных целей существует встроенный пакет Net::HTTP
. Он поставляется в стандартной библиотеке вместе с самим языком (точно так же как и open-uri
или csv
). Помимо встроенного клиента существуют еще и отдельные библиотеки, такие как faraday
или http.rb
и другие, но в рамках данного данного урока мы подробнее остановимся на Net::HTTP
, так как он:
Встроенный в стандартную поставку языка
Основная масса клиентов основаны на его функциях, просто предоставляя чуть более удобный API для разработчика по использованию.
Для того, чтобы начать использовать клиент, необходимо добавить зависимость в .rb
файл в виде require 'net/http'
. Помимо этого, клиент дял работы с URL адресом ресурса требует использование встроенной библиотеки uri
.
Посмотрим на пример использования данной библиотеки при обращении Dad Jokes API:
В данном примере мы получили классическую шутку от Чака Нориса в формате обычной строки.
Давайте попробуем поработать с API в формате JSON изменив заголовок request['Accept'] = 'application/json'
В ответ мы получим строку в формате JSON. Но с таким форматом тяжело работать, поэтому давайте превратим нашу строку в JSON объект
Задание weather_info
Внимание! это задание необходимо разместить в директории модуля 11_network/weather_info
Напишите приложение, которые будет спрашивать в консоли страну и город пользователя, а в ответ возвращать текущую дату и время, температуру в цельсиях на данный момент времени, а также количество осадков в виде дождя в мм.
Пример:
Рекоммендации:
Так как open-meteo для определния погоды ожидает получить координаты, то для начала зная город и страну вам необходимо опредеть координаты этого населенного пункта с помощью geocoding API
Хорошая практика создавать отдельные классы-клиенты для каждого ресурса к которому собираетесь образаться. Создайте классы
MeteoClient
иGeocodingClient
в которых у вас будет содержаться логика для взаимодействия с тем или иным API
Дополнительный материал
Last updated