Рестрепо начал свою карьеру в 1999 году в «Индепендьенте Медельин». 18 октября в поединке против «Энвигадо» он дебютировал в Кубке Мустанга. В 2002 году Джон в составе «Медельина» выиграл чемпионат Колумбии, по окончании которого он стал капитаном команды. В «Индепендьенте» он провёл 4 сезон став за это время одним лидеров команды. За клуб Рестрепо провёл 170 матчей и забил 8 мячей, а также помог клубу выйти в полуфинал Кубка Либертадорес 2003.
Летом 2003 года Рестрепо перешёл в мексиканский «Крус Асуль». В новой команде он провёл два сезона, приняв участие в 87 встречах и забил 7 мячей. Следующие два сезона Джон провёл в «Веракрусе» и УАНЛ Тигрес. В 2008 году Рестрепо вернулся в «Индепендьенте Медельин», где в 2009 году выиграл чемпионат Колумбии во второй раз.
Летом 2012 года Джон перешёл в «Рионегро Агилас». 30 июля в матче против «Ла Экидад» он дебютировал за новую команду[3]. 7 августа в поединке Южноамериканского кубка против перуанского «Хуан Аурич» Рестрепо забил свой первый гол за «Рионегро Агилас»[4]. В начале 2015 года Джон вернулся в Мексику, подписав контракт с клубом «Селая». 25 января в матче против «Дорадос де Синалоа» он дебютировал в Лиге Ассенсо[5]. 15 марта в поединке против «Корас де Тепик» Рестрепо забил свой первый гол за «Селаю»[6]. В начале 2017 года он вернулся в «Рионегро Агилас».