🦖
[] Бүрэн танилцуулга
codesaur/http-client GitHub дээр үзэх

codesaur/http-client

HTTP хүсэлт илгээх болон MIME имэйл боловсруулах/илгээх энгийн хөнгөн жинтэй, объект хандалтат http-client компонент.


Онцлох боломжууд

  • CurlClient - cURL дээр суурилсан уян хатан HTTP клиент
  • JSONClient - JSON өгөгдөлтэй REST API-тэй ажиллахад тохиромжтой
  • Response - HTTP хариуг обьект хэлбэрээр илэрхийлэх (status code, headers, body)
  • Mail - HTML + Text + олон хавсралттай MIME имэйл илгээгч
  • UTF-8 бүрэн дэмжлэг (нэрс, файлын нэр, гарчиг г.м.)
  • Хөнгөн, хурдан, ямар ч фрэймворк дээр эсвэл дангаар ашиглаж болно
  • Зөвхөн ext-curl, ext-json байхад л болно

Суурилуулалт

composer require codesaur/http-client

1. CurlClient - Ерөнхий HTTP клиент

use codesaur\Http\Client\CurlClient;

$curl = new CurlClient();

$response = $curl->request(
    'https://httpbin.org/get',
    'GET'
);

echo $response;

Response обьект

use codesaur\Http\Client\CurlClient;

$curl = new CurlClient();

// send() нь Response обьект буцаана
$response = $curl->send('https://httpbin.org/get');

echo $response->statusCode;    // 200
echo $response->body;          // хариуны бие
print_r($response->headers);   // хариуны headers
print_r($response->json());    // JSON массив

$response->isOk();    // true (2xx статус код)
$response->isError(); // false (4xx/5xx биш)
$response->getHeader('Content-Type'); // "application/json"

Файл upload

$response = $curl->upload(
    'https://httpbin.org/post',
    '/path/to/file.pdf',
    'document',
    ['description' => 'Миний файл']
);

Дахин оролдох (Retry)

$response = $curl->sendWithRetry(
    'https://api.example.com/data',
    'GET',
    '',
    [],
    3,    // дахин оролдох тоо
    500   // эхний хүлээх хугацаа (ms)
);

Debug горим

$curl->enableDebug(true);
$curl->send('https://httpbin.org/get');
print_r($curl->getDebugLog());
$curl->clearDebugLog();

2. JSONClient - JSON API-тэй ажиллах

Анхаар: JSONClient нь CODESAUR_APP_ENV environment variable-аас хамааруулан SSL verify-ийг тохируулна:

  • development орчинд SSL verify унтраалттай (хөгжүүлэлтэд тохиромжтой)
  • production эсвэл бусад орчинд SSL verify идэвхтэй (аюулгүй)
# .env файл эсвэл environment variable
CODESAUR_APP_ENV=development  # эсвэл production
// Base URL ашиглах
$client = new JSONClient('https://api.example.com/v1');
$response = $client->get('/users'); // https://api.example.com/v1/users

// Base URL-гүй (шууд URL)
$client = new JSONClient();

GET хүсэлт

use codesaur\Http\Client\JSONClient;

$client = new JSONClient();

$response = $client->get(
    'https://httpbin.org/get',
    ['hello' => 'world']
);

print_r($response);

POST хүсэлт

$response = $client->post(
    'https://httpbin.org/post',
    ['test' => 'codesaur']
);

echo $response['json']['test']; // codesaur

PATCH хүсэлт

$response = $client->patch(
    'https://httpbin.org/patch',
    ['status' => 'active']
);

Алдаа буцаах бүтэц

{
  "error": { "code": 123, "message": "Алдаа үүссэн байна..." }
}

3. Mail - MIME HTML + Хавсралттай имэйл клиент

Энгийн HTML имэйл илгээх

use codesaur\Http\Client\Mail;

$mail = new Mail();

$mail->targetTo('user@example.com', 'Хэрэглэгч');
$mail->setFrom('no-reply@example.com', 'codesaur');
$mail->setSubject('Сайн байна уу?');
$mail->setMessage('<h1>Hello!</h1><p>Тест имэйл.</p>');

$mail->sendMail();

Хавсралт нэмэх

$mail->addFileAttachment(__DIR__ . '/file.pdf');
$mail->addUrlAttachment('https://example.com/logo.png');
$mail->addContentAttachment("Hello world", "note.txt");

Олон хүлээн авагч

$mail->addRecipient('a@example.com', 'Хүн А');
$mail->addCCRecipient('b@example.com', 'Хүн Б');
$mail->addBCCRecipient('c@example.com', 'Хүн С');

Тест ажиллуулах

Composer Test Command-ууд

# Бүх тест ажиллуулах (Unit + Integration тестүүд)
composer test

# Зөвхөн Unit тестүүд ажиллуулах
composer test:unit

# Зөвхөн Integration тестүүд ажиллуулах
composer test:integration

# Unit болон Integration тестүүдийг дараалан ажиллуулах
composer test:all

# HTML coverage report үүсгэх (coverage/ directory дотор)
composer test:coverage

Тестүүдийн мэдээлэл

  • Unit Tests: CurlClient, JSONClient, Mail классуудын тест
  • ResponseTest: Response классын тест (statusCode, headers, body, json, isOk, isError)
  • Integration Tests: Бодит API-тай ажиллах integration тестүүд
  • EndToEndTest: Бүх компонентуудыг хамтдаа ашиглах end-to-end тест

PHPUnit шууд ашиглах

Composer command-уудын оронд PHPUnit-ийг шууд ажиллуулж болно:

# Бүх тест ажиллуулах
vendor/bin/phpunit

# Зөвхөн Unit тестүүд
vendor/bin/phpunit --testsuite Unit

# Зөвхөн Integration тестүүд
vendor/bin/phpunit --testsuite Integration

# Coverage report (Clover XML формат)
vendor/bin/phpunit --coverage-clover coverage/clover.xml

# Coverage report (HTML формат)
vendor/bin/phpunit --coverage-html coverage

Windows хэрэглэгчид: vendor/bin/phpunit-ийг vendor\bin\phpunit.bat-аар солино уу


CI/CD Pipeline

Энэ төсөл нь GitHub Actions ашиглан CI/CD pipeline-тэй:

  • Автомат тест - Push эсвэл Pull Request үед тест ажиллуулна
  • Олон PHP хувилбар - PHP 8.2, 8.3 дээр шалгана
  • Олон OS - Ubuntu болон Windows дээр шалгана
  • Code Coverage - Pull Request үед coverage мэдээлэл үүсгэнэ
  • Security Check - Composer audit ажиллуулна
  • Code Linting - PHP syntax шалгана

CI/CD pipeline-ийн дэлгэрэнгүй мэдээлэл: .github/workflows/ci.yml


Лиценз

Энэ төсөл MIT лицензтэй.


Зохиогч

Narankhuu
https://github.com/codesaur