Skip to content

💱 Querying a rate-limited currency exchange API using Redis as a cache

License

Notifications You must be signed in to change notification settings

gvolpe/exchange-rates

Folders and files

NameName
Last commit message
Last commit date

Latest commit

161108b Â· Mar 7, 2020

History

73 Commits
Jun 14, 2019
Jun 22, 2019
Jul 19, 2019
Aug 21, 2019
Jun 23, 2019
Jun 9, 2019
Jun 9, 2019
Jun 9, 2019
Aug 14, 2019
Jun 9, 2019
Aug 14, 2019
Jun 18, 2019
Mar 7, 2020
Mar 7, 2020
Jun 17, 2019
Mar 7, 2020
Aug 14, 2019
Aug 14, 2019

Repository files navigation

icon exchange-rates

CircleCI

Querying a rate-limited foreign currency exchange API using Redis as a cache.

  • Number of Requests per Hour: 100 (See config file)

Http Endpoints

GET /v1/currencies

Returns a list of the available currencies. Eg:

["USD","EUR","GBP","AUD","CAD","PLN","ARS"]

GET /v1/rates?from=EUR&to=USD

Returns the current exchange rate, if available:

{"to":"USD","from":"EUR","rate":1.139556}

Run it locally

You'll need a Redis instance. The easiest way to get started is by using docker:

docker run -it --rm -p 6379:6379 redis:5.0.0

And then run the web server app using cabal new-run exchange-rates, or using Nix nix-shell --pure shell.nix and cabal new-run exchange-rates. You should see something like:

AppConfig {forex = ForexConfig {host = "https://free.currconv.com/api/v7", apiKey = [SECRET], keyExpiration = 1800}, redis = RedisConfig {redisHost = "127.0.0.1", redisPort = 6379}}
Started server on localhost:8080
Calling web service for: USD -> GBP
Calling web service for: USD -> EUR
Cache hit: USD -> GBP
Calling web service for: USD -> PLN
Cache hit: USD -> PLN

Exchange rates are cached to avoid hitting the (limited) external service many times.

Browse the documentation

The docs are generated at compile time from the API definition. The API serves a swagger.json response that you can visualize in the Swagger UI:

docker run -p 80:8080 swaggerapi/swagger-ui

Go to localhost and enter http://localhost:8080/swagger.json.

docs