приложение iOS с Django

Так, в настоящее время у нас есть сайт, который был создан с помощью Django. Теперь мы хотели бы создать собственное приложение iOS, которое использует тот же бэкэнд, поэтому нам не нужно перекодировать все это. Насколько я понимаю, есть два альтернативных маршрута:

1) вызовите непосредственно URL-адреса Django, которые затем вызывают функцию. В этой функции создайте HTTPResponse с закодированными данными JSON и отправьте их обратно.

2) Создайте службу REST с сервера Django с чем - то вроде Tastypie. Однако, помимо прямых вызовов GET объекту, я не вижу, как мы можем вызывать пользовательские функции в наших моделях Django из TastyPie. Мы можем это сделать?

Я нахожу удивительным, что не так много информации о потреблении веб-службы из iOS с существующими бэкэндами, такими как Django или RoR. Например, я знаю, что instagram использует Django, но как они общаются с iOS на своих серверах?!

Спасибо большое!

3 ответов


в настоящее время я работаю над приложением iOS для iPhone, с Django / Tastypie в бэкэнде. Мы делаем и 1 и 2. Ресурсы предлагаются в стиле REST (после auth) через Tastypie, и любые пользовательские вызовы функций (например, создание нового пользователя) обрабатываются views.py в различных конечных точках REST, который возвращает JSON.


когда вы можете, вы должны попытаться использовать общий способ сделать что-то вместо изобретения колеса. Учитывая это, REST является стандартным стилем архитектуры программного обеспечения для распределенных систем и очень хорошо работает при работе с сущностями/объектами.

Если у вас есть API, где вы взаимодействуете с сущностями, рекомендуется использовать интерфейсы REST. На python у вас есть Tastypie или новее Django Rest Framework что делает почти всю работу. Как вам предлагают в 2)

Если у вас есть API, где вы взаимодействуете со службами, такими как логин, то вы должны создать службу RPC, в основном функцию с удаленным доступом, как вы объясняете на 1).

обычно вам понадобятся оба способа в надежном приложении. И да, это возможно. Я согласен с @sampson-chen, мы делаем то же самое. У нас есть интерфейс REST с tastypie, а другие методы выполняются с помощью пользовательских служб RPC.

представление в нашем case по-прежнему хорош, но в основном зависит от методов, которые вы вызываете внутри своих служб, например, запрос DB. У вас есть много способов улучшить скорость, например, используя сельдерей для очереди тяжелых заданий.

надеюсь, что это помогает.


REST API, хотя и очень полезны, ограничивают вас, чтобы получить, опубликовать, положить, удалить действия, которые выполняются на ресурсах. Это может затруднить выражение других типов действий, таких как отправка электронной почты. Есть несколько способов, которые я нашел, чтобы справиться с этим в django / tastypie:

  1. выполните запрос PUT/PATCH на существующий ресурс, установив флаг, который позволяет вашему бэкэнду знать, чтобы вызвать действие. Обнаружение, если флаг был установлен, может быть сделано внутри обработчиков сигналов post_save (используйте django-model-utils FieldTracker, чтобы увидеть, было ли поле изменено с False на True); это также помогает убедиться, что ваша логика приложения работает одинаково вне вашего REST API (например, изменения через сайт администратора, задачу сельдерея, представление на основе HTML или оболочку Python).

  2. создайте ресурс non-ORM (например, / api/v1/ email/) и переопределите метод post_list (), вызвав там свою функцию.

  3. Как упоминалось в другом месте, создайте подчиненного ресурс (/api/v1/myresource/send/).