Сервис лучше закрывать протоколом - это позволит подменить его реализацию, если потребуется (мок-сервис сделать, например). Синглтонами лучше не увлекаться: если использовать менеджер зависимостей это не понадобится.
Сервис может содержать следующие зависимости:
- Transport (RequestManager) - сущность, которая выполняет запросы к API. Может работать с Alamofire, например.
- Parser - сущность, которая парсит JSON в PONSO/NSManagedObject
- Cache - кэширование данных в БД, напимер в CoreData.
Получается, что сервис - это логика работы совокупности транспорта, парсера и кэша. Если объекты получаемые с API однообразны, можно сделать generic сервис для получения различных сущностей.