Reputation: 4787
I am building a ruby on Rails 4 app. The web version is ready and I would like to set up/learn how to build mobile apps.
I know and read in many many articles that the "way to go is to use rails-api and feed json to the various clients".
But I'm not sure it's the best fit: I don't want to use it only because it's popular. I want to understand why (if it is) really necessary.
I'd like if possible to build a "beautiful monolith" as explained here. DHH (core creator of Rails gem) use in Basecamp this beautiful monolith strategy, an hybrid approach which he states is the number 1 time-saving tactic they use to be able to maintain with few developpers numerous web and mobile apps.
Basically you keep your Rails controller, Rails models and everything in your Rails app and rails app and you use a phonegap container to inject in web views the views. You only change this way the views (with Rails 4.2 variant).
https://signalvnoise.com/posts/3766-hybrid-how-we-took-basecamp-multi-platform-with-a-tiny-team
So with this strategy, let's take an example where we need to the database data. for example if someone loads my mobile app: - the webview 'homepage' on iphone will load ex: views/phone/projects/show.html.erb: say I need to display the name of the user in this page, the app will go fetch it on /app/controllers/homepage_controller.rb and this controller will have a method like @users = User.find(id)... (active record) so IT WILL GO HIT THE standard DATABASE (without needing any api or json)
So when I asked 'I'd really want to know why people sue rails-api/josn to know if I really must use it, or if I can use DHH hybird approach', here what people say
80% of start ups use it => blah...not a reason enough. I'd like to know why I should do it.
you can't do "single page apps" and ajax calls without API/json
Here I checked and it's incorrect: as explained below, you can totally use ajax in a webview can totally do it via whitelisting:
http://www.telerik.com/forums/$-ajax-not-working-on-android-devices :
When you are developing a Cordova powered hybrid app, you do not need to make CORS requests. Regular XHR requests will work without a problem. The reason for this is that a mobile app is executed from a file URI and does not comply to the cross origin policy. Mobile apps have an alternative to this policy which is called domain whitelisting.
Are pure and traditional Ajax Requests possible on native / hybrid mobile apps?:
PhoneGap apps run in webview not in browser, so cross origin is not an issue with PhoneGap apps, you can perform AJAX calls to any URL. The only thing to care of is that there is a white list parameter "access origin" in config used to restrict the access to some specific URLs.
So if I follow DHH hybrid approach to keep my Rails app but change the views on the web/iphone/android views and use my database data WITHOUT any API or json, is it possible?
What does API/json really bring to the table, why would they be really necessary, explaining most large multi clients app use them? Can't each of my various apps (web app, mobile app, tv app) just hit the database without any API/json ?
I might be missing something obvious so please advise.
Upvotes: 2
Views: 953
Reputation: 5552
This question does not really suit stack overflow, as the answers can be very opinion-based and also depend on what YOU really want to achieve. However, I will have a go:
Your first question:
So if I follow DHH hybrid approach to keep my Rails app but change the views on the web/iphone/android views and use my database data WITHOUT any API or json, is it possible?
Yes this is possible. Note that it will not be a 'native' app on the mobile device, and many people consider such 'apps' to be inferior (since they are not really apps installed on the device). The big advantage of course is that you don't have to learn how to write a native mobile app (and an API for it to talk to). The other big advantage is that you only have to maintain one code-base (models and controllers) for serving all users. You should really google native apps versus non-native to see the full picture.
Your next question:
What does API/json really bring to the table, why would they be really necessary, explaining most large multi clients app use them?
Separating the API out from the 'front end' part of your code base allows you to have different teams develop different frontends. So you might have a mobile team that focuses on building a very polished mobile native app. You can also have a backend team focus on the API. So for larger enterprises this makes a lot of sense. The API is also more easily scalable - you can have multiple servers running the API and as more 'frontend users' connect (whether form mobile or web or whatever) you can bring up more copies of your API to serve their needs. The other option you have is to easily open-up your API to 3rd party developers if the need arises. That would be a bit harder with the DHH hybrid approach. Not impossible, but harder.
Your last question:
Can't each of my various apps (web app, mobile app, tv app) just hit the database without any API/json ?
Yes, of course. This is really the same question as the first. Your different views would be serving different 'frontends' (basically HTML/JS/CSS) for the different clients. But they all hit the same controllers/models and hence database. Just don't forget that all your clients are HTML based. Most mobile/tablet users don't like having to open a browser to use an 'app'. They want the native experience (same goes for tv boxes, consoles etc).
By the way, there are ways to develop mobile apps that share one-code base (see appcelerator.com for example). But that's yet another, and different, approach!
Upvotes: 3