บริการ Laravel ปฏิเสธ error และแคชข้อมูล FX ครบ 60 วินาที เก็บ key ใน config และคืน source, market_session, data_updated_at
ประเด็นสำคัญ
ใช้ bearer auth, timeout และ
throw()แคช response ที่สำเร็จ 60 วินาที
อ่าน key จาก
EXCHANGERATE_API_KEYใช้ไลบรารี decimal เมื่อต้องการความแม่นยำ
สร้างบริการ FX ที่มีแคช
บริการสร้าง cache key จาก base และ symbols ที่เรียงแล้ว โดย throw() ทำงานก่อนเขียนแคช
<?php
namespace App\Services;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
final class ExchangeRateService
{
public function latest(string $base, array $symbols): array
{
sort($symbols);
$symbolList = implode(',', $symbols);
$cacheKey = "fx:latest:{$base}:{$symbolList}";
return Cache::remember($cacheKey, now()->addSeconds(60), function () use (
$base,
$symbolList,
): array {
return Http::acceptJson()
->withToken(config('services.exchangerate.key'))
->timeout(5)
->get(
"https://api.exchangerate.dev/v1/latest/{$base}",
['symbols' => $symbolList],
)
->throw()
->json();
});
}
}ตั้ง key นอก source code
// config/services.php
'exchangerate' => [
'key' => env('EXCHANGERATE_API_KEY'),
],
// .env (never commit the real value)
EXCHANGERATE_API_KEY=exr_live_...อ่านอัตราและข้อมูลการสังเกต
หลัง $service->latest("USD", ["EUR", "GBP"]) ให้อ่าน $result["rates"]["EUR"] และเก็บฟิลด์แหล่งที่มาและเวลา
อย่าแคช error เป็นอัตรา
401 คือ key ผิด และ 429 คือเกิน limit ให้เก็บค่าเก่าได้เฉพาะพร้อมเวลาเดิม
- เรียง symbols
- ตั้ง timeout
- เรียก throw ก่อน cache
- ปัดเฉพาะยอดสุดท้าย
ER
exchangerate.dev
คู่มือเชื่อมต่อสำหรับนักพัฒนาที่ใช้ข้อมูล FX
