Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS app with Django

So we currently have a website that was created using Django. Now, we would like to create a native iOS app that uses the same backend, so we don't have to re-code the whole thing. From my understanding, there are two alternative routes:

1) Call directly Django URLs, which then calls a function. Within that function, create a HTTPResponse, with encoded JSON data and send that back.

2) Create a REST Service from the Django server with something like Tastypie. However, aside from doing straight-forward GET calls to an object, I don't see how we can call custom functions in our Django Models from TastyPie. Can we even do that?

I find it surprising that there is not a lot of information about consuming a web service from iOS with existing backends like Django or RoR. For example, I know that instagram uses Django, but how do they communicate from iOS to their servers?!

Thanks a lot!

like image 348
abisson Avatar asked Oct 19 '12 19:10

abisson


2 Answers

I am currently working on an iOS app for iPhone, with Django / Tastypie in the backend. We do both 1 and 2. The resources are offered REST-style (after auth) via Tastypie, and any custom function calls (for example, creating a new user) are handled by views.py at various REST endpoints, which returns JSON.

like image 152
sampson-chen Avatar answered Oct 20 '22 14:10

sampson-chen


When you can you should try to use a common way of doing something instead of reinventing the wheel. Given that, REST is a standard style of software architecture for distributed systems and it works very well when you work with entities/objects.

If you have an API where you interact with entities, it is recommended to use REST interfaces. On python you have Tastypie or the newer Django Rest Framework that does almost all the work. As you propose in 2)

If you have an API where you interact with services, like a login, then you should build an RPC service, basically a function with remote access as you explain on 1).

Normally you will need both ways on a robust application. And YES, it is possible to do that. I agree with @sampson-chen, we are doing the same. We have a REST interface with tastypie, and other methods are done with custom RPC services.

The performance in our case is still good, but mostly depends on the methods you call inside your services, for example, a DB query. You have a lot of ways to improve speed, for example using Celery to queue heavy jobs.

Hope it helps.

like image 30
clopez Avatar answered Oct 20 '22 15:10

clopez