Это был третий и самый интересный этап – непосредственно разработка программы в IDE Delphi с использованием разработанного нами REST API.
Разработка интерфейса программы не вызвала сложностей, благо в IDE Delphi имеются удобные функции drag-and-drop визуальных компонентов и удобный интерфейс их настройки.
Пришло время реализации функционала взаимодействия приложения с бэкендом посредством REST API. В предвкушении быстрой и «непыльной» работы и твердо веруя, что «мир не без добрых людей», я полез в Google, ожидая, что в течение пяти-десяти минут найду необходимое решение. Тем более что ПО, которое мы задумали реализовать, было классической трехзвенкой, на которой, наверное, каждый из нас съел не одну собаку.
Но не тут-то было. Часовой “гуглеж” показал, что эта тема мало освещена в контексте использования Delphi. Очень много информации по традиционным технологиям, таким как DataSnap или DataAbstract. Но так как вводной установкой у нас была быстрая разработка с использованием стандартного хостинга, то все хорошо описанные технологии нам не подходили по причине того, что серверная часть предполагала реализацию на ОС MS Windows либо была очень специфична и не позволяла реализовать на обычном хостинге. Это противоречило нашим условиям легкости разработки, развертывания и стоимости владения. По сути, на данном этапе мы искали возможность построения простого REST-клиента в IDE Delphi.
В сети много информации о классических реализациях (DataSnap, DataAbstract, kbmMW, RemObjects SDK, Indy, RAD Server, FireDAC и т. д.) с «поднятием» своей специфичной серверной части, но подробной информации, как реализовать и какие компоненты использовать при реализации трехзвенного приложения, использующего REST API на Delphi, нет.
Так как “гуглеж” не дал результатов, мы не стали впадать в уныние и решили поискать информацию непосредственно на сайте правообладателя, то есть Embarcadero. Поиск по сайту уже был намного интереснее, так как содержал много достаточно обширной информации по различным технологиям и компонентам. Меня интересовали решения и компоненты, отличающиеся простотой использования, богатым функционалом и использующие единый класс соединения.
На первый взгляд, многие технологии и компоненты соответствовали нашим требованиям и задумкам, но при более детальном рассмотрении и изучении приходило понимание, что то или иное решение нам не подходит.
Так, например, было с Indy idHTTP: большинство компонентов не подходили именно по причине того, что требовали большого объема программирования и не было единой точки подключения.
Изучая информацию на сайте и сравнивая различные технологии и компоненты, все больше приходили к пониманию, что наиболее соответствует нашим ожиданиям REST Client Library, так как представляет собой компоненты реализации клиентской части и не требует реализации специфичной серверной части. То, что нам и требовалось: возможность одного коннекта и при всем этом отсутствие каких-либо требований к серверной части.
Стоит отметить небольшое разочарование и досаду от того, что на кажущуюся, на первый взгляд, простую задачу было потрачено столько времени, из-за того, что так мало информации в Интернете о данной библиотеке и практически отсутствуют примеры ее применения, но это нас не остановило и даже дало стимул самим построить приложение REST API и поделиться нашим опытом с сообществом. Если бы ситуация была иной, мы могли бы сэкономить кучу времени и сил. Но, как говорится, “нет худа без добра”, благодаря сложившейся ситуации родилась на свет данная статья.
REST-клиент
Для построения простого REST-клиента достаточно следующих компонентов: TRESTClient, THTTPBasicAuthenticator, TRESTRequest, TRESTResponse, TRESTResponseDataSetAdapter и TClientDataSet.