Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Генератор клиента OpenAPI для Delphi и FPC

Delphi , Компоненты и Классы , Процедуры и функции

Генератор клиента OpenAPI для Delphi и FPC: обзор и альтернативное решение

Недавно Arnaud Bouchez анонсировал новый открытый генератор клиента OpenAPI для Delphi и FPC. В этой статье мы рассмотрим ключевые особенности этого генератора, а также предложим альтернативное решение для тех, кто ищет другие варианты генерации клиента OpenAPI в Delphi и Pascal.

Генератор OpenAPI клиента от Arnaud Bouchez

Арnaud Bouchez разработал генератор OpenAPI клиента, который является полностью открытым исходным кодом tanto для генератора, quanto для сгенерированного кода. Ниже приведены некоторые ключевые особенности этого генератора:

  1. Высокоуровневые типы данных: Генератор использует высокоуровневые типы данных Pascal, такие как записи и динамические массивы, для представления объектов DTO и перечислений.
  2. Исключения: Ошибки HTTP-статуса переводятся в высокоуровневые исключения Pascal.
  3. Реузинг типов: Генератор распознает похожие свойства или перечисления и переиспользует тот же тип Pascal.
  4. Поддержка атрибутов OpenAPI: Генератор поддерживает атрибуты OpenAPI, такие как "$ref", "allOf" и "oneOf".
  5. Комментарии и документация: Сгенерированный код содержит подробные комментарии и документацию.
  6. Настраиваемый генератор: Генератор имеет множество параметров настройки для управления детализацией и поведением генерации.

Хотя этот генератор имеет множество полезных функций, он все еще не полностью совместим со всеми существующими файлами OpenAPI, и разработчики приветствуют обратную связь для усовершенствования генератора.

Альтернативное решение: Swagger Codegen

Swagger Codegen — это популярный генератор клиентов и серверов для OpenAPI (ранее известный как Swagger). Он поддерживает множество языков программирования, в том числе Object Pascal (Delphi). Swagger Codegen имеет широкий спектр функций, таких как:

  1. Поддержка различных языков: Swagger Codegen поддерживает более 30 языков программирования, включая Object Pascal, что делает его гибким выбором для проектов, использующих разные языки.
  2. Настраиваемый генератор: Как и генератор от Arnaud Bouchez, Swagger Codegen имеет множество параметров настройки для управления поведением генерации.
  3. Комментарии и документация: Сгенерированный код содержит подробные комментарии и документацию, что облегчает понимание и отладку.
  4. Поддержка атрибутов OpenAPI: Swagger Codegen поддерживает большинство атрибутов OpenAPI, включая "$ref", "allOf" и "oneOf".
  5. Обширная документация и сообщество: Swagger Codegen имеет обширную документацию и большое активное сообщество, что облегчает поиск решений и устранение проблем.

Пример кода на Object Pascal (Delphi) с использованием Swagger Codegen

Ниже приведен пример кода, сгенерированного Swagger Codegen для Object Pascal (Delphi):

unit PetstoreApi;

interface

uses
  System.SysUtils,
  System.JSON,
  System.Net.Http,
  System.Net.Http.Headers;

type
  TPet = record
    Id: Integer;
    Name: string;
    Status: string;
    Tags: TArray<TTag>;
  end;

  TTag = record
    Id: Integer;
    Name: string;
  end;

  IPetApi = interface
    ['{423F6B74-4552-4772-9516-5D9E5C56A956}']
    function GetPetById(PetId: Integer): TPet;
    procedure UpdatePet(Pet: TPet);
    procedure DeletePet(PetId: Integer);
    procedure AddPet(Pet: TPet);
  end;

implementation

uses
  System.Net.Http.Dispatch;

type
  TPetApiClient = class(TInterfacedObject, IPetApi)
  private
    FHttpClient: THttpClient;
    FBaseUrl: string;
  public
    constructor Create(BaseUrl: string);
    destructor Destroy; override;
    function GetPetById(PetId: Integer): TPet;
    procedure UpdatePet(Pet: TPet);
    procedure DeletePet(PetId: Integer);
    procedure AddPet(Pet: TPet);
  end;

{ TPetApiClient }

constructor TPetApiClient.Create(BaseUrl: string);
begin
  FHttpClient := THttpClient.Create(nil);
  FBaseUrl := BaseUrl;
end;

destructor TPetApiClient.Destroy;
begin
  FHttpClient.Free;
  inherited;
end;

function TPetApiClient.GetPetById(PetId: Integer): TPet;
var
  Request: THttpRequest;
  Response: THttpResponse;
begin
  Request := THttpRequest.Create(THttpMethod.Get, Format('pets/%d', [PetId]));
  Response := FHttpClient.SendRequest(Request, FBaseUrl);
  Result := TPet.ParseJSON(TJson.ParseString(Response.Content));
end;

procedure TPetApiClient.UpdatePet(Pet: TPet);
var
  Request: THttpRequest;
  Response: THttpResponse;
begin
  Request := THttpRequest.Create(THttpMethod.Put, 'pets');
  Request.SetContent(Pet.ToJSON, 'application/json');
  Response := FHttpClient.SendRequest(Request, FBaseUrl);
  if Response.StatusCode >= 400 then
    raise Exception.CreateS('Request failed with status code: ' + Response.StatusCode.ToString);
end;

procedure TPetApiClient.DeletePet(PetId: Integer);
var
  Request: THttpRequest;
  Response: THttpResponse;
begin
  Request := THttpRequest.Create(THttpMethod.Delete, Format('pets/%d', [PetId]));
  Response := FHttpClient.SendRequest(Request, FBaseUrl);
  if Response.StatusCode >= 400 then
    raise Exception.CreateS('Request failed with status code: ' + Response.StatusCode.ToString);
end;

procedure TPetApiClient.AddPet(Pet: TPet);
var
  Request: THttpRequest;
  Response: THttpResponse;
begin
  Request := THttpRequest.Create(THttpMethod.Post, 'pets');
  Request.SetContent(Pet.ToJSON, 'application/json');
  Response := FHttpClient.SendRequest(Request, FBaseUrl);
  if Response.StatusCode >= 400 then
    raise Exception.CreateS('Request failed with status code: ' + Response.StatusCode.ToString);
end;

end.

Вывод

Генератор OpenAPI клиента от Arnaud Bouchez предлагает ряд полезных функций для разработчиков, работающих с Delphi и FPC. Однако, для тех, кто ищет альтернативу, Swagger Codegen является мощным и гибким инструментом, поддерживающим Object Pascal и множество других языков программирования. Оба генератора имеют свои преимущества, и выбор между ними будет зависеть от конкретных потребностей и предпочтений разработчика.

Создано по материалам из источника по ссылке.

Эта статья посвящена обзору и альтернативному решению генератора клиента OpenAPI для Delphi и FPC, представленного Arnaud Bouchez, и рассмотрению популярного генератора Swagger Codegen в качестве альтернативы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процедуры и функции ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:37:16/0.0056898593902588/1