Недавно я делал презентацию об использовании облачных и REST API от Delphi на итальянской конференции Delphi Day в конце июня. Среди различных демонстраций я провел несколько экспериментов с использованием API APILayer REST. Если вы не знаете, APILayer — это компания, входящая в Idera, как и Embarcadero.
Оглавление
Почему API REST
Прежде чем мы рассмотрим конкретные API и демонстрации, я хотел бы обсудить актуальность использования API в контексте клиентского приложения, такого как созданные с помощью Delphi. В прошлом наиболее распространенным способом добавления функции в программу было написание соответствующего кода или использование существующей библиотеки для добавления возможности и распространение скомпилированного кода функции вместе с приложением.
Современные онлайн-сервисы и API-интерфейсы REST часто предлагают аналогичные возможности, активируемые путем передачи правильных параметров с HTTP-вызовом на сервер и получения обратно результата. Примеры включают преобразование изображения, создание PDF-файла, преобразование текста в речь или чтение текста, встроенного в изображение.
Почему вы используете один подход вместо другого? Бывают случаи, когда реалистичен только один из вариантов (для быстрого графического рендеринга требуется установленная графическая библиотека, в то время как возможности ИИ обычно доступны в Интернете), но в других сценариях возможны оба подхода.
Использование локальной библиотеки имеет следующие преимущества:
- Как правило, более быстрое выполнение
- Нет необходимости в подключении к Интернету
- Возможно, возможность тонкой настройки и настройки функции и ее лучшей привязки к коду и пользовательскому интерфейсу.
- На уровне безопасности вам не нужно беспокоиться о шифровании связи, чтобы никто не мог получить доступ к данным приложения при передаче.
Использование REST API имеет следующие преимущества:
- Сохранение приложения меньшего размера, поскольку вам не нужно распространять дополнительный код библиотеки
- Всегда используйте последнюю версию библиотеки, так как ее можно обновлять отдельно от клиентского приложения.
- На уровне безопасности вам не нужно беспокоиться об обновлении библиотеки в случае обнаружения какой-либо проблемы, необходимости развертывания новой версии приложения.
Наконец, часто существует разница между стоимостью библиотеки и REST API:
- Если библиотека не является бесплатной и с открытым исходным кодом, она, как правило, имеет первоначальную фиксированную стоимость для каждого разработчика.
- Большинство REST API имеют модель оплаты по мере использования, часто с бесплатным уровнем, который вы можете использовать для разработки и тестирования.
- Таким образом, REST API может быть дешевле для ограниченного использования, но становится дороже для широкого использования.
Представляем APILayer
APILayer — это бизнес Idera, ориентированный на предложение размещенных API и создание торговой площадки API, на которой также размещаются сторонние API. Вы можете узнать больше о многих доступных услугах на https://apilayer.com/
Существует множество мощных API-интерфейсов как часть APILayer, и хотя некоторые из них имеют больше смысла в веб-приложении (например, IpStack), многие другие прекрасно подходят и для клиентского приложения, например службы обработки файлов, предлагаемые FileStack ( https://www. .filestack.com/ ) или отличный сторонний API проверки электронной почты ( https://apilayer.com/marketplace/email_verification-api ).
В приведенной ниже демонстрации я сосредоточусь на простом API, возможно, не самом мощном: WeatherStack, который, как следует из названия, может предоставлять текущие, исторические и прогнозные данные о погоде:
Использование отладчика REST RAD Studio
После того, как вы определили REST API, который планируете использовать, самый простой способ приступить к разработке клиентского приложения — использовать отладчик REST, доступный как часть установки RAD Studio (и доступный из меню «Инструменты»), а также в виде отдельной бесплатной загрузки. для всех ( https://www.embarcadero.com/free-tools/rest-debugger ).
Отладчик предлагает возможность настроить REST API, сохранить эту конфигурацию для будущего использования (или поделиться ею с другим разработчиком) и импортировать конфигурацию в приложение Delphi или C++Builder.
В простом случае, таком как WeatherStack, после запуска отладчика REST сначала необходимо настроить основную конечную точку:
Затем вам нужно установить правильную конфигурацию параметров, включая конкретную конечную точку (текущую), параметр запроса и информацию аутентификации access_key:
Параметры зависят от конечной точки и перечислены в документации по API. На этом этапе вы можете использовать кнопку SendRequest, чтобы попробовать API и проверить ответ в нижней части пользовательского интерфейса отладчика REST:
Результирующая структура данных относительно сложна, но мы можем отфильтровать некоторые из вложенных таблиц (например, расположение, показанное выше) в структуре таблицы. Учитывая, что мы, вероятно, ищем текущие данные, мы можем использовать этот корневой элемент JSON для получения данных в структуре таблицы:
Создание реальной демонстрации в Delphi
Когда вы довольны конфигурацией и данными A (возможно, включая данные таблицы), вы можете использовать кнопку «Копировать компонент» отладчика REST, чтобы упростить разработку приложения. Эта кнопка, по сути, фиксирует конфигурацию компонентов клиентской библиотеки REST и позволяет вставить ее в форму или модуль данных в RAD Studio IDE.
В этом случае я просто создал простое приложение FireMonkey с помощью Delphi, добавил модуль данных и вставил в него конфигурацию компонентов. В результате получается следующий модуль данных:
Фактическая конфигурация компонентов следующая:
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 28 29 30 31 |
object DataModule14: TDataModule14 object RESTClient1: TRESTClient BaseURL = 'http://api.weatherstack.com' end object RESTRequest1: TRESTRequest Client = RESTClient1 Params = < item Name = 'access_key' Value = 'xxxxxxxxxxxxxxxxx' end item Name = 'query' Value = 'Piacenza, Italy' end> Resource = 'current' Response = RESTResponse1 end object RESTResponse1: TRESTResponse RootElement = 'current' end object RESTResponseDataSetAdapter1: TRESTResponseDataSetAdapter Dataset = FDMemTable1 Response = RESTResponse1 TypesMode = JSONOnly end object FDMemTable1: TFDMemTable FetchOptions.AssignedValues = [evMode] FetchOptions.Mode = fmAll end end |
Как вы видите, компонент RESTClient имеет общую конфигурацию сайта, RESTRequest относится к конечной точке и ее параметрам, необязательный компонент RESTResponse содержит результаты и может передавать их через компонент RESTResponseDataSetAdapter в таблицу в памяти, FDMemTable составная часть.
На этом этапе вам нужна в основной форме кнопка для вызова и поле редактирования с местоположением и компонентом отображения (я использовал поле редактирования только для чтения). В обработчике события OnClick кнопки вы можете написать следующий код:
1 2 3 4 5 6 |
procedure TForm13.BtnRefreshClick(Sender: TObject); begin DataModule14.RESTRequest1.Params[1].Value := EditLocation.Text; DataModule14.RESTRequest1.Execute(); EditCurrent.Text := DataModule14.FDMemTable1.FieldByName('temperature').AsString; end; |
В качестве альтернативы вы можете связать ввод и вывод через Visual LiveBindings, подключив редактирование ввода к параметрам запроса, а конкретное поле таблицы в памяти к элементу управления выводом. Чтобы сделать это, вам сначала нужно выполнить HTTP-запрос во время разработки с помощью специальной команды компонента RESTRequest. Это заполняет метаданные компонентов, включая таблицу в памяти. После этого вы можете связать ввод и вывод в дизайнере LiveBindings и разместить код, выполняемый при нажатии кнопки, на:
1 |
DataModule14.RESTRequest1.Execute(); |
Это конфигурация конструктора LiveBindings:
И, наконец, это приложение во время выполнения в этот жаркий летний день:
Вывод
Как вы видели, реализация клиента для REST API в Delphi относительно проста ( здесь я уже демонстрировал то же самое ранее, рассматривая другой API ). Теперь в случае приложения погоды не так много альтернатив по сравнению с доступом к оперативным данным из веб-службы, в то время как в других сценариях использование API было бы альтернативой по сравнению с внедрением той же функции в библиотечную часть приложения.
Мы планируем продемонстрировать еще несколько API-интерфейсов APILayer в блоге Embarcadero, так что следите за обновлениями и не стесняйтесь делиться с нами своими идеями.
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition