Great, thanks guys. I'm going to deep into the asynchronous request and Guzzle.
The idea is to build the API completly from scratch (as it's a learning project which turned into a real project :) ).
@beetuco :
The hosts themselves are 'stupid'. No logic can be provided, just returning data. And each host is different. Some hosts can provide a complete history, some of them only the current price. As I don't want to dedicate the API to just one host, multiple hosts will be called. I think that therefor calculating the average must be on the API side.
Perhaps the idea should be reframed. I'm now thinking that each host should have it's own class for updating the hosts prices in the storage. Than I can create a task for each of them (max. 30 tasks) and run them asynchromous. These tasks will only update the prices that are stored in the storage.
The folder structure will be something like:
CoinX
CoinY
Than to calculate the current price, a new task will crawl the folders of the coin and calculate the average.
The advantage here is that some hosts only have 5 coins, where others have 500. The smaller hosts will consume a lot less memory. Also leaving out some steps in the 'crawling' process will reduce the time.