Gimęs 1995 m. gegužės 21 d. Panevėžyje, kur ir pradėjo lankyti plaukimą.
Karjeros pradžioje daugiausiai plaukė nugara, 2013 m. tapo Europos jaunių čempionu 200 m rungtyje, sidabrą laimėjo 100 m. nuotolyje. Pastarojoje rungtyje tais pačiais metais iškovojo sidabrą ir pasaulio jaunių čempionate.
Suaugusiųjų varžybose pirmas medalis iškovotas 2016 m. Europos čempionate (50 m baseine), kai 200 m nugara rungtyje laimėta bronza.
2016 m. Rio olimpinėse žaidynėse plaukė 100 ir 200 m nugara, į pusfinalius nepateko. 2017 m. pasaulio čempionate (50 m) iškovojo 10 vietą 200 m laisvu stiliumi rungtyje, o 200 m nugara rungtyje pasiekė finalą ir buvo 8-as.
2018 m. Europos čempionate (50 m.) iškovojo sidabrą 200 m l. st., o 2019 m. buvo vienas geriausių šio stiliaus plaukikų pasaulyje. 2019 m. pasaulio čempionate 400 m l. st. rungtyje liko 4-as, o 200 m. rungtie finale buvo pirmas, tačiau čempionu netapo, nes po finišo buvo diskvalifikuotas už starto taisyklių pažeidimą.
2020 m. Europos čempionate (50 m.) iškovojo 400 m rungties bronzą, o 2021 m. olimpinėse žaidynėse Tokijuje 200 m rungtyje buvo 8-as, o 400 m rungtyje nepateko į finalą (13 vt.). 2024 m. pasaulio čempionate (50 m.) pirmą kartą laimėjo medalį ir tapo antruoju lietuviu po Giedriaus Titenio, iškovojusio pasaulio čempionato medalį, kai finišavo 2-as 200 m l. st. rungtyje.
25 m. baseine laisvo stiliaus 200 ir 400 m rungtyse pasaulio ir Europos čempionatuose yra iškovojęs 10 medalių, iš kurių 4 yra aukso.
2019 m. pripažintas geriausiu Lietuvos metų sportininku „LTeam“ apdovanojimuose.
D. Rapšiui priklauso 100 m laisvu stiliumi (48,04 sek.), 200 m laisvu stiliumi (1:44.38 min.), 400 m laisvu stiliumi (3:43.36 min.) ir 800 m laisvu stiliumi (7:59.34 min.) Lietuvos rekordai. Panevėžietis taip pat dar Lietuvoje nebuvo aplenktas 100 m nugara (53.79 sek.), 200 m nugara (1:56.11 min.), 200 m kompleksiniu būdu rungtyse (1:59.14 min.).
Plaukikas prisidėjo ir prie 4 x 100 m laisvu stiliumi (3:12.74 min.), 4 x 200 m laisvu stiliumi (7:08.04 min.), 4 x 100 m kombinuotu būdu (3:33.70 min.) vyrų Lietuvos rekordų.