Как правильно вынести методы и классы проекта в отдельный API?
Является ли плохой практикой организовывать работу api и работу сайта с одной и той же базой? Или лучше вынести данные по валютам в отдельную базу и работать с ней только посредством api, а данные пользователей и тд - в базу, с которой работает сам сайт? 
Нет смысла разделять БД, да и зачем? Это актуально только для микросервисов.Если в будущем потребуется брать данные по валютам при рендере страницы сервером, как быть? Получать данные с api или копировать метод из апи в ядро сайта, чтобы получать данные сразу (возможно логика работы и нагрузка будут идентичными в этом случае, но это недостаток теории), это если в случае использования одной базы для api и сайта? 
Вариантов решений масса, но самый простой - делать универсальные MVC модули и контрполлеры, которые бы поддерживали отдачу как по API, так и просто рендер.Что бы вы посоветовали почитать, дабы более углубленно разобраться в этом вопросе (и в вопросах этой области), скорее всего это вопросы из области проектирования, ибо учу все это сам и очень не хватает теоретических знаний?
Про MVC и HMVC в частности.
Ну и реализация на примерах, например Laravel.
Рекомендую посмотреть в сторону фракталов от лиги league fractal и реализовать слой транспортировки данных. Для работы на стороне сервера репозитории с объектами и коллекциями.