Mały serwis Laravel może odrzucać błędy i buforować pełną obserwację przez 60 sekund. Klucz trzymaj w konfiguracji, a z kursem zwracaj source, market_session i data_updated_at.
Najważniejsze punkty
Użyj bearer auth, timeout i
throw().Buforuj pełną poprawną odpowiedź przez 60 sekund.
Klucz trzymaj w
config/services.php poprzez EXCHANGERATE_API_KEY, nie w kodzie aplikacji.Do dokładnych obliczeń użyj biblioteki dziesiętnej.
Zbuduj buforowany serwis FX
Serwis tworzy stabilny klucz z bazy i posortowanych symboli. throw() działa przed zapisem do cache, więc błąd nie staje się kursem.
<?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();
});
}
}Skonfiguruj klucz poza kodem
// config/services.php
'exchangerate' => [
'key' => env('EXCHANGERATE_API_KEY'),
],
// .env (never commit the real value)
EXCHANGERATE_API_KEY=exr_live_...Odczytaj kurs i pola obserwacji
Po $service->latest("USD", ["EUR", "GBP"]) odczytaj $result["rates"]["EUR"] i zachowaj pola source, market_session oraz data_updated_at.
Nie buforuj błędów jako kursów
401 oznacza błędny klucz, a 429 przekroczony limit. Poprzedni wynik zachowuj tylko z jego oryginalnym czasem.
- Sortuj symbole przed kluczem cache.
- Ustaw timeout.
- Wywołaj throw przed cache.
- Zaokrąglaj kwotę końcową, nie kurs.
ER
exchangerate.dev
Przewodniki integracyjne dla programistów pracujących z danymi FX.
