With mobile technologies becoming increasingly popular what is happening on the server-side with most of these apps when they need to communicate with a back end?
I’m used to the world of technology from 10 years ago when most resources were accessed by requesting a dynamic web page that behind the seen used a server-side language to get the information it needed from a relational database.
Is this still the case, and if not, what are the big changes?
1
From top of my head:
- Use of webservices instead of direct access to DB from client.
- REST instead of SOAP. SOAP seems to be too heavy-weight for mobile communication with backend. REST using JSON is much simpler to set up and consume. Especially if you use different technologies on client and server.
- Focus on multiple views for webpages. One for desktop and one for mobile. It should be easy if someone uses MVC, but it is still quite problematic.
There are probably more. Mobile apps are mostly regarded as normal clients, that consume data and display them.
Technologies
-
RESTful API using JSON as serialization
— Same API is used by native apps, hybrid apps and mobile web apps. Even in the former case client side templates are often used (see excellent example in “Leaving JSPs in the dust: moving LinkedIn to dust.js client-side templates”) -
Lightweight, asynchronous (event driven) servers — no more pre-fork Apache. Nginx, node.js, Twisted, Tornado etc. are used now.
-
OAuth / social login — Users expect not to have to register an account for each individual app. Thus most apps allow login with FB, TW and other providers. For FB both Android and iOS provide Single-Sign-On option.
Things to consider
- Mobile networks have very high latencies;
- It’s normal for clients to loose connections;
- It’s normal for a client to change IP during session;
- Mobiles are nowhere near as powerful as desktops/laptops;
REST is half the story. The more interesting thing than lighter-weight protocols on the wire is lighter-weight web app servers and stacks — the mass scale requests for small datagrams versus comparatively thick rendered HTML means you have different requirements. Some examples:
-
node.js is probably the cannonical example of this. Most folks get hung up on the javascript-on-the-server feature, but that is a red herring — cool for the kids who can’t progress beyond js but it don’t matter. The really nifty part is the asynchronous nature making it scale insanely, especially while serving small, sharp RESTful services. Some other stacks with similarities would be twisted for python or manos de mono for .NET.
-
nginx uses alot of the same evented IO (libuv) that node.js does, and it is cleaning up the server market in some circles. Much more focused than apache and insanely fast.
-
Thin server stacks are popping up in environments which traditionally had thick frameworks that made lots of presumptions. IE, in ruby you’ve got sinatra to counterbalance rails. In python you’ve got flask [and others] to counterbalance django. In .NET you’ve got the WebAPI to counterbalance MVC and WebForms. All of the stacks I mentioned are very, very thin and are more (or totally) focused on serving datagrams and not web pages. None of the ones I mention feature the sorts of templating and ORMs one expects out of a typical web stack these days.
All that said, more often than not someone is serving their mobile app by hacking the existing 10 year old server-side web app to serve json on a different HTTP endpoint. World ain’t changed that much — management will still limp along on 2 wheels and a doughnut if they think they can get away with it.
Is this still the case, and if not, what are the big changes?
I think there are still applications that use the mentioned server-side or client-server architecture. However, in recent years there is a big move toward SOA (Service Oriented Architecture) . Thus, communication through secure services opens new capabilities to all client applications, and access/reuse of back-end business services at the same time.
With emerging markets of mobile and tablets, it is becoming even more important to use HTTP services as an important communication channel to provide extended service to the client applications.
Most back-ends now support JSON and REST and not just SOAP. Other than that, there’s not a lot of difference between a web front-end and a mobile app. I think most of the challenges for mobile apps are on the front end (how best to fit information onto a smaller screen). Some apps are starting to leverage mobile capabilities (like location reporting), but that’s on both ends.