Сгенерируйте Delphi Client SDK для любого API REST, определенного в спецификации OpenAPI.
Этот генератор может прочитать документ OpenAPI (из локального файла или URL) API REST и генерировать классы Delphi, которые вы можете использовать для того, чтобы вызовать такие конечные точки API REST дружелюбным образом.
Генератор создает классы DTO (представляющие определения JSON, используемые API), и интерфейсы с методами, которые вы можете позвонить (представляя конечные точки для вызова).
Загрузите двоичные файлы и распахнуть в папке на вашем диске. Генератор-это единый файл EXE в командной строке с именем OpenApiDelphiGen.exe . Выполните его, передавая правильные параметры командной строки. Инструмент предоставляет файл справки, показывающий все доступные варианты.
В следующем примере генерирует клиентские файлы для популярного примера API Swagger Petstore.
OpenApiDelphiGen -i: " https://petstore.swagger.io/v2/swagger.json " -o: " C:PetStore " -n:PetStore -m:MultipleClientsFromFirstTagAndOperationId Параметр -i указывает документ OpenAPI для импорта. Параметр -o предоставляет выходную папку, в которой должны генерироваться файлы Delphi. Параметр -n -это имя API, используемое для префикса блока и имен классов. Наконец, параметр -m указывает, как должны быть организованы классы обслуживания и интерфейсы.
Генератор создаст следующие единицы:

PetStoreClient является основным подразделением с классами обслуживания и интерфейсами. PetStoreDTOs содержит все классы DTO, а PetStoreJson имеет код для сериализации/десериализации DTOS в JSON и обратно.
Чтобы использовать клиент, просто добавьте сгенерированные единицы в ваши классы использования. Создать создание клиента и использовать его методы. Обратите внимание, что сгенерированный код зависит от единиц, представленных в папке Dist, поэтому вы также должны добавить их в свой проект.
Как только вы создаете экземпляр клиента, просто вызовите метод из службы, чтобы вызвать конечную точку. Следующий пример создаст нового питомца на сервере, вызывая конечную точку POST /Pets :
uses { ... } , PetStoreClient, PetStoreDtos;
procedure TPetStoreClientTests.CreateAndGetPet ;
const
PetId = 61341 ;
CategoryId = 61341 ;
TagId = 61341 ;
var
Pet: TPet;
Tag: TTag;
Client: IPetStoreClient;
begin
Client := TPetStoreClient.Create;
// Create the pet
Pet := TPet.Create;
try
Pet.Id := PetId;
Pet. Name := ' Josephine ' ;
Pet.Status := ' available ' ;
Pet.Category := TCategory.Create;
Pet.Category.Id := CategoryId;
Pet.Category. Name := ' Terrier Dogs ' ;
Pet.Tags := TTagList.Create;
Tag := TTag.Create;
Tag.Id := TagId;
Tag. Name := ' Terrier ' ;
Pet.Tags.Add(Tag);
Pet.PhotoUrls.Add( ' http://dummy.com/dog.png ' );
Client.Pet.AddPet(Pet);
finally
Pet.Free;
end ;Еще один пример, который извлечет, а затем удалит питомца:
Client := TPetStoreClient.Create;
Pet := Client.Pet.GetPetById(PetId);
try
Check(Pet <> nil , Format( ' Pet %d not found ' , [PetId]));
CheckEquals(PetId, Pet.Id);
CheckEquals( ' Josephine ' , Pet. Name );
CheckEquals( ' available ' , Pet.Status);
finally
Pet.Free;
end ;
// Delete the newly created pet
Client.Pet.DeletePet( ' special-key ' , PetId);Вы должны создавать и уничтожить все классы DTO самостоятельно. Занятия и списки, принадлежащие классам DTO, разрушаются автоматически.
Вы можете установить свойство Config.AccessToken для аутентификации с помощью API:
Client.Config.AccessToken := ' <access token> ' ; Он установит заголовок http Authorization с помощью значения токена, префиксированного Bearer .
Текущий сгенерированный код не требует никакой зависимости от сторонних единиц, работая с простой установкой Delphi. В настоящее время код использует класс THttpClient от Unit System.Net.HttpClient для выполнения HTTP -запросов, поэтому клиент будет компилировать только на версиях Delphi, которые предоставляют такой класс.
В качестве альтернативы, вы можете заставить клиента использовать компоненты Indy для выполнения HTTP -запросов. Для этого можно использовать следующий фрагмент кода.
uses { ... } , OpenApiRest, OpenApiIndy;
begin
// At the beginning of your application, set the DefaultRequestFactory
DefaultRequestFactory := TIndyRestRequestFactory.Create;
end ; Вы можете перехватить момент, когда создается новый клиент TIdHTTP - если вы хотите настроить определенные свойства, такие как прокси или обработчики IO. Для этого вы можете использовать такой код:
uses { ... } , OpenApiRest, OpenApiIndy, IdHTTP;
procedure TMainDataModule.IndyClientCreated (Client: TIdHTTP);
begin
// Set extra Client properties here
end ;
procedure TMainDataModule.DataModuleCreate (Sender: TObject);
var
Factory: TIndyRestRequestFactory;
begin
// At the beginning of your application, set the DefaultRequestFactory
Factory := TIndyRestRequestFactory.Create;
DefaultRequestFactory := Factory;
Factory.OnClientCreated := IndyClientCreated;
end ;Вы можете скомпилировать и запустить тестовый проект также без каких -либо зависимостей. Тесты были созданы с использованием Dunit для максимальной совместимости с несколькими версиями Delphi.
Сам инструмент генератора использует сторонние библиотеки. Вам не нужно, чтобы они использовали его, вы можете просто загрузить исполняемый файл и использовать его напрямую. Если вы хотите скомпилировать и отлаживать инструмент, вам понадобятся следующие библиотеки:
Обратите внимание, что TMS Biz - это коммерческая библиотека. Вы можете использовать пробную версию для разработки (если вы хотите внести свой вклад в проект).
Этот проект имеет справедливый код, распределенный по Apache 2.0 с лицензией Commons Clause .