I'm beginning to research how to put together a Rails RESTful API and app to handle requests from an Android app.
We currently have a prototype Android app in which the author connects directly to a MongoDB hosted at
mongolab.com via the Mongo Android driver using BSON. This has worked fine for the initial proof-of-concept effort to push data to the DB but isn't what we need going forward.
For our next phase of development I'd like to build a RESTful Rails API that the Android app can use to push data and get a response back. The Rails app will also allow display and querying the data.
In addition to simple JSON text we'd like to be able to push an image taken by the camera on the Android device. The image is currently sent as a MongoDB binary data type.
I've done a fair amount of Googling on the topic but am curious what the community has to say on this subject. The original demo author is completely wrapped around the axle about the "efficiency" of sending the image data back over HTTP, insisting that it must be done the way we currently do it, as BSON over whatever type of connection the Mongo driver creates (he is neither a web developer nor a Java programmer and had not seen Rails before I built the demo backend last week). Is gzipped Base64-encoded text just as efficient for hauling the images?
The API will initially just support Android with iOS coming shortly thereafter. The choice of MongoDB was purely for expediency (and before I arrived on the scene) and will most likely change. The mobile apps will be ignorant of the backend persistence mechanism so I can design it however I like.
Does anyone have opinions on the most appropriate way to bring the images back via the API? From the perspective of the Android app in terms of bandwidth, speed, and power consumption, is one way better than another?
Are there any Rails API and Android gotchas I should be aware of? I'm not an Android dev (yet) but I plan to learn enough to mock this up on my own. Are there any Android references or tutorials that folks find particularly good?
Many thanks in advance.
Chris