Barca started with just three changes to the side that thumped Ferencvarosi in the UEFA Champions League in midweek in Lionel Messi, Philippe Coutinho and Frenkie De Jong.
The new boys, who had already beaten Real Madrid this season, stunned the Catalans after eight minutes when Alvaro Gimenez slotted home from close range after Marc-Andre Ter Stegen's error. It went to the Video Assistant Referee (VAR) after rumours of an offside in the build-up, but nothing of the sort was confirmed and the goal stood.
Messi managed to get on the ball towards the midway stage and released Martin Braithwaite in-behind the defence, but Jeremias Ledesma pulled off a stunning save to keep out the Catalans.
Ronald Koeman rung the changes from the substitutes' bench in the second half, as Pedri replaced Oscar Minguez and Coutinho shifted aside for Ousmane Dembele.
Ronaldo Koeman's initiative proved decisive after 57 minutes as Alcala helped a low cross from the left by Jordi Alba into his own net.
The visitors' joy wouldn't last long though as veteran striker Alvaro Negredo pounced on a defensive mishap from Ter Stegen six minutes later to plant in a composed finish inside the area.
Sergio Dest should've brought the Catalan giants level on 73 minutes after latching onto Sergio Busquets's through pass, but the full-back went wide of goal instead.
Barca pushed and pushed for the equaliser through Dembele and a scorching free-kick from Messi at the death, but the victory went to Cadiz in the end.