Site icon Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Погода в вашем регионе через REST API

Среди новостей начала этого года было сообщение об объединении компании Apilayer с Idera в рамках объявленной стратегии. Apilayer — компания,  которая предоставляет неплохой набор микросервисов для поиска описаний и местоположения, получения данных по курсам валют, погоды и буржевых сводок, сервисы конвертирования и проверки допустимости форматов. Более подробно об этих микросервисах можно прочитать на странице компании https://apilayer.com/. Радует наличие бесплатного доступа к каждому из этих сервисов. Для подключения требуется создать учетную запись на сайте каждого нужного вам сервиса.

Сервисы достаточно просты, имеют подробную документацию с описанием функций и параметров вызова REST API.

Здесь мне хотелось бы показать, насколько просто и быстро можно подключить эти сервисы в ваши программы на Delphi или С++.  Для примера возьмем сервис получения данных о погоде https://weatherstack.com/, ограниченные функции которого можно использовать бесплатно.

Я заранее создал учетную запись и получил персональный ключ доступа приложения к сервису. Это каждый вполне осилит самостоятельно.

Давайте создадим новый проект Delphi. Для этого примера я буду использовать фреймворк FMX, и приложение можно будет использовать на Android. Но сначала надо освоить API и подобрать нужные параметры. Это проще всего сделать в инструменте REST Debugger из поставки Delphi: он вызывается прямо из меню Tools в главном меню IDE. Указываем  URL для точки входа API — https://api.weatherstack.com и метод GET, затем, на закладке Parameters, функцию current в поле Resource. Теперь надо задать параметры вызова, из которых access_key является обязательным. Локация/регион/город для получения данных о погоде указывается во втором параметре — query. Установить Content-Type для приема JSON, и осталось только нажать кнопку Send Request для получения результата. Если все верно, то результат будет таким:

Проект приложения будет состоять из одной формы, на которой помещены: верхняя панель с TLabel, TEdit для ввода локации и TSpeedButton (стиль refreshtoolbutton), а также TTabControl с двумя закладками: JSON и Data, на которые поместим TMemo и Tlistbox, соответственно.

Чтобы организовать доступ к REST API из приложения, достаточно в REST Debugger нажать кнопку CopyComponents — все необходимое будет скопировано в буфер обмена — и затем сделать Edit->Paste на форму приложения в IDE, для простоты — на главную. Появится пять компонент со свойствами, уже установленными в нужные и отлаженные параметры. Это RESTClient, RESTRequest, RESTResponse, RESTResponceDatasetAdapter и FDMemTable. Первые три отвечают за REST вызов  и получение Response, а адаптер преобразует json-данные  в dataset. Прямо во время проектирования можно вызвать Request.Execute компонента RESTRequest и проверить результат на экране.

Осталось связать полученные данные с компонентами для показа пользователю приложения во время выполнения. Это потребует минимум кода: обработка события нажатия кнопки и загрузка табличных данных из dataset в Listbox. Отображения json-результата в TMemo на первой закладке проще всего сделать через Visual LiveBindings и это не потребует написания ни строчки кода.


[crayon-663539c874126139632589/]
В процедуре  SpeedButton1Click вызов производится только, если в Edit1 было введено имя местности. Это имя заносится в параметр query, выполняется обращение к сервису, а в процедуре FillData полученными в FDMemTable1 данными заполняется LIistBox1. Первоначально все было сделано по классике (закомментировано в примере кода), а потом выяснилось, что можно обойтись одно строчкой с вызовом другого метода.

Результаты запуска после компиляции можно увидеть на картинках ниже.

Другие  микросервисы Apilayer вызываются аналогично, некоторые еще проще.

 

 

Exit mobile version