This blog summarise pretty well your option within a SPA scenario using Sitecore nowdays http://www.deleteagency.com/news/3-approaches-to-single-page-applications or an other good resource could be this one: http://www.sitecoredevelopment.com/ChrisDaly/2016/April/AngularJS%20and%20Sitecore.aspx
My personal consideration on this topic, is that does not exist an universal “solution” each project has different requirements and each solution has Pro and Cons, therefore my advise would be to understand the possible options, understand the pros and cons and try to take an informed decision… Anyhow if you are paying for XDB I would definitively recommend not using Sitecore as a content service in the headless mode but taking advantage of Sitecore Processor & Pipelines to make page composition and routing.
In the case you are interested in React the advise would be to check out the following blogposts:
In the case you are interested in NitroNet:
In the case you are interested in Angular