为使用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分发的公平代码。