Среди новостей начала этого года было сообщение об объединении компании 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-67405a7937ab3815936642/]
В процедуре SpeedButton1Click вызов производится только, если в Edit1 было введено имя местности. Это имя заносится в параметр query, выполняется обращение к сервису, а в процедуре FillData полученными в FDMemTable1 данными заполняется LIistBox1. Первоначально все было сделано по классике (закомментировано в примере кода), а потом выяснилось, что можно обойтись одно строчкой с вызовом другого метода.
Результаты запуска после компиляции можно увидеть на картинках ниже.
Другие микросервисы Apilayer вызываются аналогично, некоторые еще проще.