為使用OpenAPI規範定義的任何REST API生成Delphi客戶端SDK。
該發電機可以讀取REST API的OpenAPI文檔(從本地文件或URL),並生成Delphi類,您可以用該類以友好的方式調用此類REST API端點。
發電機創建DTO類(表示API使用的JSON定義)和可以調用方法的接口(表示要調用的端點)。
在磁盤中的文件夾中下載二進製文件並解壓縮。發電機是一個名為OpenApiDelphiGen.exe的單個命令行EXE文件。執行它傳遞正確的命令行參數。該工具提供了一個幫助文件,向您顯示所有可用的選項。
以下示例為流行的Swagger PetStore示例API生成客戶端文件。
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擁有沿JSON和來自JSON的序列化/挑選DTO的代碼。
要使用客戶端,只需將生成的單元添加到您的使用類中即可。實例化客戶端並使用其方法。請注意,生成的代碼取決於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> ' ;它將將Authorization HTTP標頭設置為Bearer前綴的令牌值。
當前,生成的代碼不需要對第三方單元的任何依賴性,並使用普通的Delphi安裝。該代碼當前正在使用Unit System.Net.HttpClient的THttpClient類來執行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是商業圖書館。您可以使用試用版進行開發(如果您想在項目中貢獻)。
該項目是通過Commons條款許可證以Apache 2.0分發的公平代碼。