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