Привет, тут есть несколько вариантов взаимодействия, берешь enum, имплементируешь в нем протокол URLRequestConvertible и реализуешь в нем варианты кейсов для конструирования запроса, на выходе этот enum тебе вернет URLRequest. Это почти та же самая аналогия с ретрофитовыми интерфейсами, только вместо протокола и абстрактных его функций ты берешь enum и его кейсы. А дальше ты либо используешь Alamofire, либо URLSession. Для парсинга json используешь имеющиеся в свифте протоколы Decodable, Encodable. Для получения результата используешь либо замыкание, некий completionHandler, либо если у тебя ios 13+ то Combine, его и Alamofire и URLSession поддерживают. Вот пример:
https://pastebin.com/fgj5A4wF - так выглядит несколько запросов разных, лежащих в одном enum
Так выглядит их вызов, к примеру во viewModel с использованием Combine и Alamofire
https://pastebin.com/8G35E6km