ترفض خدمة Laravel الأخطاء وتخزن رصدا كاملا لمدة 60 ثانية. ضع المفتاح في الإعدادات وأعد source وmarket_session وdata_updated_at مع السعر.
نقاط أساسية
استخدم bearer auth والمهلة و
throw().خزّن الاستجابة الناجحة 60 ثانية.
اقرأ المفتاح من
EXCHANGERATE_API_KEY.استخدم مكتبة عشرية للحساب الدقيق.
أنشئ خدمة FX مخزنة
تبني الخدمة مفتاحا ثابتا من العملة والرموز المرتبة. ينفذ throw() قبل الكتابة إلى cache.
<?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();
});
}
}اضبط المفتاح خارج الشفرة
// 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"] واحتفظ بحقول المصدر والوقت.
لا تخزن الأخطاء كأسعار
يعني 401 خطأ المفتاح، و429 تجاوز الحد. احتفظ بالرصد السابق فقط مع وقته الأصلي.
- رتب الرموز.
- ضع مهلة.
- نفذ throw قبل التخزين.
- قرّب المبلغ النهائي فقط.
ER
exchangerate.dev
أدلة تكامل للمطورين العاملين مع بيانات العملات.
