Много есть вариантов которые вполне можно использовать. Однозначно правильного и всеми принятого решения нет.
Если проект на редаксе, то делают через мидлвары. Или thunk, или saga - что тоже мидлвары.
Если вопрос чисто по апи, то посмотрите в сторону Apollo.
Меня ни один вариант не устраивал. У меня свой - непопулярный.
Я в своем последнем проекте провел жирную линию между UI и бизнесс логикой. Готовил статью по этому поводу, но все руки не дойдут ее закончить. Хоть тут отпишусь )
Если в кратце то начиная с корневого компонента я разделил все на актеры и UI. Ветка с актерами отвечает за бизнесс логику, а ветка с UI только за отрисовку (то для чего реакт и был создан)
У этих двух слоев общий стор (например с помощью редакса).
UI слой берет данные из стора и по действиям пользователя меняет состояние.
Слой актеров смотрит на изменение состояния и выполняет соответсвующие изменения в сторе. В том числе делает запросы на сервер и сохраняет результат в сторе.
Но т.к. я люблю максимально все делить ня слои, то все методы API я вынес еще в один слой и прокинул их в актеры через контекст.
Такой подход с актерами очень удобен в отличии от редакс мидлвар, т.к. можно использовать функционал реакта, а именно хуки.
А чтобы не перепутать актеров с UI компонентами я их пишу немного в другом стиле - без jsx и оборачиваю в специально для этого созданный модуль react-ghost (типа "призрак")