Створення REST-клієнта в Lazarus крок за кроком

15.02.2026 0 By AdminA

Вступ

Lazarus і Free Pascal дають змогу швидко розробляти кросплатформені застосунки, які взаємодіють з REST API. У цьому матеріалі ми пройдемося по базових кроках створення REST-клієнта: налаштування проекту, виконання GET та POST запитів, парсинг JSON, обробка помилок і поради щодо безпеки та продуктивності.

Необхідні компоненти та підготовка

  • Встановлений Lazarus і Free Pascal.
  • Бібліотеки для HTTP: модуль fphttpclient.
  • Модулі для роботи з JSON: fpjson та jsonparser.
  • Для HTTPS необхідні OpenSSL-бібліотеки (в деяких системах) та модуль для SSL (наприклад, opensslsockets або відповідний пакет для вашої платформи).
  • Знання основ Pascal/ObjFPC та роботи з потоками, якщо ви плануєте виконувати запити асинхронно.

Крок 1: Створення проекту та базове налаштування

Створіть новий проект у Lazarus (Application). Додайте у секцію uses такі модулі: fphttpclient, fpjson, jsonparser, classes, sysutils. Ми створимо TFPHTTPClient програмно та будемо використовувати його для запитів.

Приклад базової ініціалізації

uses fphttpclient, fpjson, jsonparser, classes, sysutils;

var
  client: TFPHTTPClient;
begin
  client := TFPHTTPClient.Create(nil);
  try
    client.ConnectTimeout := 5000; // мс
    client.ReadTimeout := 10000;   // мс
    // додаткові налаштування
  finally
    client.Free;
  end;
end.

Крок 2: Виконання GET-запиту і парсинг JSON

Найпоширеніша операція — отримати список ресурсів або один об’єкт. TFPHTTPClient повертає рядок із тілом відповіді, який можна передати в парсер JSON.

// Приклад GET
var
  resp: string;
  jsonData: TJSONData;
begin
  resp := client.Get('https://api.example.com/items');
  jsonData := GetJSON(resp);
  try
    // обробка jsonData, наприклад, як масив
    // TJSONArray(jsonData).Count тощо
  finally
    jsonData.Free;
  end;
end;

Обробка помилок і таймаути

Завжди обгортуйте виклики в try..except, щоб коректно обробляти мережеві помилки. Встановіть підходящі значення ConnectTimeout і ReadTimeout, щоб уникнути зависань у UI.

Крок 3: Надсилання POST-запиту з JSON

Щоб відправити JSON на сервер, сформуйте TStringStream з вмістом і встановіть заголовок Content-Type.

uses fphttpclient, classes, sysutils;

var
  reqStream: TStringStream;
  resp: string;
  jsonBody: string;
begin
  jsonBody := '{"name":"Test","value":123}';
  reqStream := TStringStream.Create(jsonBody, TEncoding.UTF8);
  try
    client.AddHeader('Content-Type','application/json');
    resp := client.Post('https://api.example.com/items', reqStream);
    // обробити resp
  finally
    reqStream.Free;
  end;
end;

Специфіка передачі даних

  • Якщо API очікує інші заголовки або авторизацію, додайте їх через AddHeader.
  • Для авторизації по токену використовуйте Authorization: Bearer <token>.

SSL/HTTPS та сертифікати

Для роботи з HTTPS потрібно, щоб на системі були доступні бібліотеки OpenSSL або відповідні модулі платформенної підтримки SSL. У деяких випадках треба підключити модуль типу opensslsockets у секції uses та переконатися, що динамічні бібліотеки OpenSSL встановлені. Завжди перевіряйте підпис сертифіката та за потреби реалізуйте додаткову валідацію, якщо API вимагає високого рівня безпеки.

Поради щодо продуктивності та безпеки

  • Повторно використовувати один екземпляр TFPHTTPClient для кількох запитів замість створення нового на кожен запит.
  • Виконуйте мережеві операції у фоновому потоці або з використанням TThread/асинхронних механізмів, щоб не блокувати інтерфейс.
  • Установіть адекватні таймаути та обробку повторних спроб (retry) для тимчасових помилок мережі.
  • Валідуйте і фільтруйте дані, отримані з API, та коректно обробляйте помилки парсингу JSON.
  • Не зберігайте токени й секрети у відкритому вигляді у коді — використовуйте конфігураційні файли або захищені сховища.

Висновок

Lazarus дає достатньо інструментів для створення надійного REST-клієнта з мінімальними зусиллями. З розумним налаштуванням TFPHTTPClient, обробкою JSON і увагою до SSL та багатопоточності ви зможете інтегрувати ваші програми з будь-якими веб-сервісами. Почніть з простих GET/POST прикладів, а далі розширюйте функціонал відповідно до вимог API.

Comments

comments