FeedHenry uses Node.js to fortify mobile apps

A few years ago, the mobile enterprise application platform (MEAP) seemed to be the likely answer to the huge challenge of creating groups of mobile applications that work together and integrate with enterprise data. In hindsight, MEAP systems, which typically combined a back-end server and middleware stack with a client application, seem excessively expensive and heavyweight.

The current trend is toward MBaaS (mobile back end as a service) platforms, loosely coupled with native, Web, and hybrid mobile applications. An MBaaS -- which might be focused on business applications, consumer applications, or both -- places much of the logic onto the mobile device, while enforcing security and managing the data at the back end. Even traditional MEAP vendors, such as Kony, are now offering MBaaS platforms.

FeedHenry is a Node.js-based, enterprise-oriented MBaaS and mobile application platform with a wide array of integrations, both online and offline development options, collaborative app building, and a drag-and-drop form builder. FeedHenry was spun off from the Irish Research Institute in 2010. The company describes its offering as a cloud platform for building mobile-first solutions, both B2C and B2E, with a focus on enterprise line-of-business apps. FeedHenry claims to have global infrastructure on all major clouds, as well as support for on-premise back-end deployment.

Note that FeedHenry is priced only for enterprise customers. The company does not currently sell to independent developers or small to midsized businesses.

FeedHenry has impressive customer apps in its catalog. For example, Aer Lingus built a multiplatform app for mobile check-in, flight search, real-time status updates, and flight bookings. The original app had a 10-week time to market. The app integrates with eight back-end systems through the FeedHenry cloud.

Built on Node.js

The FeedHenry back end is built on Node.js. That was a bit ahead of its time in 2010, but is quite fashionable now. Today Node.js is often used for building fast, scalable network applications. Node has an event-driven, nonblocking I/O model that makes it lightweight and efficient compared to, say, Java Server Pages or ASP.Net. Node lets developers make code asynchronous without the hassle of threads and synchronization. The Node community is growing fast, with more than 70,000 public Node modules in the ecosystem. Enough Node modules deal with back-end data integration that FeedHenry can boast lots of integration points without having to build many of them internally.

On the downside, Node.js can be tricky to debug [4]. As a weakly typed dynamic language, JavaScript doesn't give you much in the way of bug checking prior to deployment, although the various JavaScript linting tools can help.

With FeedHenry 3, the online environment integrates directly with GitHub [5]. This carries a number of meanings, all of them good. You can get access to your source code from your own computer and develop offline when it's convenient; check your local code back in, and it will be reflected in the online repository. Teams can collaborate on both the cloud and app sides of a FeedHenry project without stepping on one another's changes. You can also build binaries of an app in the cloud, as I'll discuss later.

Many proponents of agile development insist that teams need to be located in one place and have continuous verbal communication. There's a certain amount of truth to that, and I've seen it work amazingly well. On the other hand, many projects -- proprietary enterprise software as well as open source software projects, including outsourced projects -- are developed successfully by internationally distributed teams. GitHub is one of the most widely accepted version control services for globally distributed software development, and I think the way FeedHenry has integrated with GitHub is a step in the right direction. International teams often use a bug reporting and ticketing system, as well as a source code control system. It would be useful for FeedHenry to integrate with one of those, too.

API management and MBaaS

MBaaS is a small part of FeedHenry's bag of tricks. Nevertheless, FeedHenry offers a strong mobile back-end service. Part of what makes it scalable is the use of Node.js, which I discussed above. Further, FeedHenry uses MongoDB for its data store, which is also highly scalable. FeedHenry's servers typically don't even break a sweat under Black Friday-level loads.

FeedHenry back-end code is relatively simple, if you understand Node.js. Here's an example main (application.js) from the automatically generated Welcome app:

var mbaas = require('fh-mbaas-express');

var express = require('express');

// Securable endpoints: list the endpoints which you want to make securable here

var securableEndpoints = ['hello'];

var app = express();

app.use('/sys', mbaas.sys(securableEndpoints));

app.use('/mbaas', mbaas.mbaas);

app.use('/cloud', require('./lib/cloud.js')());

// You can define custom URL handlers here, like this one:

app.use('/', function(req, res){

res.end('Your Cloud App is Running');

});

// Important that this is last!

app.use(mbaas.errorHandler());

var port = process.env.FH_PORT || process.env.VCAP_APP_PORT || 8001;

var server = app.listen(port, function(){

console.log("App started at: " + new Date() + " on port: " + port);

});

You'll note the lack of explicit asynchronous code in this example, yet it's highly scalable stuff. You'll also recognize the use of the open source Express Web application framework.

Toolkit support

FeedHenry 3 supports native SDKs for iOS, Android, and Windows Phone 8, along with hybrid apps using Apache Cordova, HTML5 mobile Web apps, and Sencha, Xamarin, and Appcelerator Titanium. The way the JavaScript interface to the FeedHenry cloud works, it would be hard to find a JavaScript framework that isn't compatible.

When writing for FeedHenry in JavaScript, you include the feedhenry.js script in your HTML, initialize it with $fh.init, then call cloud functions from the $fh namespace. For example:

$fh.act({

act: 'sayHello'

}, function(res) {

alert("Cloud says : " + JSON.stringify(res.say));

}, function(msg, params) {

alert('An error occured: ' + msg);

});

This client code assumes that your cloud code has implemented and exported a sayHello function.

Not all apps that use an MBaaS started out that way. FeedHenry understands that, and thus provides a mechanism for importing apps, which offers a choice of native iOS, native Android, PhoneGap, basic Web app, and advanced Web app import types. Import methods include cloning an existing Git repo, uploading a Zip, and creating an app with a blank repo, then pushing the code there.

Builders, templates, and integrations

One of the headaches that comes with mobile development, especially hybrid mobile development, is installing and maintaining the SDKs for all the mobile platforms you wish to target. Adobe PhoneGap Build offers one solution for this. FeedHenry offers its own answer.

The FeedHenry build service can turn an HTML5 app into binaries for Android, BlackBerry, iPhone, iPad, iOS (universal), and Windows Phone. Each binary can connect to one of your MBaaS instances, and it can be built for development, distribution, release, or debugging, depending on the platform. For iOS builds, you need to supply the appropriate credentials.

FeedHenry 3 adds a drag-and-drop form builder with a good assortment of templates to use as starting points. While forms are not the most flexible kind of mobile application, they are appropriate for many business applications requiring data input. Forms built via drag-and-drop, such as the one FeedHenry implements, can become simple apps very quickly -- often within hours.

On the other hand, I found only a few full-fledged app templates. According to the company, new clients currently receive some mentoring or training to help get their first real app off the ground, but FeedHenry is in the process of developing templates for industries such as health care, where there is more interest in purchasing solutions than in purchasing platforms or tools.

FeedHenry 3 supports Apache Cordova 3 and its plug-ins for building hybrid apps for iOS, Android, and Windows Phone 8. If you want to specify the plug-ins used, add a config.json file with a plugins key to your project. If you don't specify the plug-ins you want, FeedHenry will use a standard list of 30 or so plug-ins, which will most likely increase your app building time and the size of your app.

FeedHenry lists more than 50 Node.js plug-ins in its curated modules list. That list includes interfaces to most major relational and NoSQL databases, as well as to Amazon, Google, Rackspace, Salesforce and other SaaS providers, several messaging providers, several social networks, and assorted tools. In general, the back-end integration options look strong, although I haven't tested any of them in depth.

If the curated list doesn't contain what you need, more than 50,000 module and code snippets are available, contributed by the Node.js community.

Once you have integrated a back-end server for one project, you can expose your RESTful APIs to any of your other projects.

Cloud deployment and management

FeedHenry runs on all major public and private clouds, and on a wide range of IaaS and PaaS infrastructures. FeedHenry has a HIPAA-compliant cloud, as well as live clusters in both Europe and North America.

The company claims its cloud portability eliminates vendor lock-in. That's probably true with respect to the cloud vendors, but not for FeedHenry itself. Cloud portability is also not unique to FeedHenry. Among competing MBaaS offerings, Kinvey can say the same.

FeedHenry can encrypt locally cached data on the client with the use of AES/RSA algorithms, it supports HTTPS encryption on the pipeline between the app and the cloud, and it provides endpoint security. It has a full set of authentication and session management APIs, including support for LDAP, Active Directory, and OAuth credentials. Of course, you can find plenty of encryption plug-ins for Node.js, which can be used as needed.

Incorporating a supported third-party enterprise mobility management product, such as AirWatch or MobileIron, is a simple matter of checking a box in the FeedHenry distribution configuration.

Finally, FeedHenry does a good job of reporting app and cloud usage, including app installs, app start-ups, cloud requests, and active users by time, platform, and geography. In addition, FeedHenry monitors cloud endpoints in real time and provides full auditing. On the other hand, FeedHenry doesn't supply a user data reporting or charting module. For that, you would have to use reporting and charting modules supplied by your database vendor or a third party.

As we've seen, FeedHenry is more than an MBaaS, but its Node.js-based mobile back-end service is lightweight, fast, highly scalable, and loaded with enterprise integrations. The Git integration aids team development, and FeedHenry supports almost any kind of mobile app you'd want to build. Its drag-and-drop forms creator makes building simple data entry apps a snap. What FeedHenry lacks at this point is a broad set of fully worked-out vertical starter solutions, but the company is progressing on that count.

FeedHenry 3 at a glance

Pros

Team-based development using Git repositories for apps and cloud back ends

Supports native, hybrid, HTML5, and Web apps

Native support for iOS, Android, and Windows Phone 8

Supports most major JavaScript frameworks, as well as Appcelerator Titanium and Apache Cordova

Online/offline workflow with hosted IDE and local command-line interface

Cost Starts at $1,500 per month for consumer apps, with four different tiers based on enterprise needs, preferences, and usage. All platform features are included; pricing is based on the number of active users and service tiers for cloud resources.

Copyright 2018 IDG Communications. ABN 14 001 592 650. All rights reserved. Reproduction in whole or in part in any form or medium without express written permission of IDG Communications is prohibited.