Среди новостей начала этого года было сообщение об объединении компании 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 и это не потребует написания ни строчки кода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
procedure TForm4.FillData; //var // ListBoxItem: TListBoxItem; begin ListBox1.BeginUpdate; try ListBox1.Items.Clear; for var F in FDMemTable1.Fields do begin ListBox1.Items.AddPair(F.DisplayName, F.asString); //ListBoxItem := TListBoxItem.Create(ListBox1); //ListBoxItem.Text := Format('%s = %s', [F.DisplayName, F.AsString]); //ListBox1.AddObject(ListBoxItem); end; finally ListBox1.EndUpdate; end; end; procedure TForm4.SpeedButton1Click(Sender: TObject); begin if Edit1.Text <> '' then begin RESTRequest1.Params.ParameterByName('query').Value := Edit1.Text; RESTRequest1.Execute; FillData; end; end; |
В процедуре SpeedButton1Click вызов производится только, если в Edit1 было введено имя местности. Это имя заносится в параметр query, выполняется обращение к сервису, а в процедуре FillData полученными в FDMemTable1 данными заполняется LIistBox1. Первоначально все было сделано по классике (закомментировано в примере кода), а потом выяснилось, что можно обойтись одно строчкой с вызовом другого метода.
Результаты запуска после компиляции можно увидеть на картинках ниже.
Другие микросервисы Apilayer вызываются аналогично, некоторые еще проще.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition