18

所以我们目前有一个使用 Django 创建的网站。现在,我们想创建一个使用相同后端的原生 iOS 应用程序,因此我们不必重新编写整个代码。据我了解,有两种替代路线:

1)直接调用Django URLs,然后调用一个函数。在该函数中,创建一个带有编码 JSON 数据的 HTTPResponse 并将其发回。

2) 使用 Tastypie 之类的东西从 Django 服务器创建一个 REST 服务。但是,除了直接对对象进行 GET 调用之外,我看不出我们如何在 TastyPie 的 Django 模型中调用自定义函数。我们甚至可以这样做吗?

令我惊讶的是,没有太多关于使用现有后端(如 Django 或 RoR)从 iOS 使用 Web 服务的信息。例如,我知道 instagram 使用 Django,但它们如何从 iOS 与服务器进行通信?!

非常感谢!

4

3 回答 3

9

我目前正在开发一个适用于 iPhone 的 iOS 应用程序,后端使用 Django / Tastypie。我们同时执行 1 和 2。资源通过 Tastypie 以 REST 样式(经过身份验证)提供,任何自定义函数调用(例如,创建新用户)都由各个 REST 端点的 views.py 处理,该端点返回 JSON。

于 2012-10-19T19:37:43.553 回答
6

如果可以的话,你应该尝试使用一种通用的方法来做某事,而不是重新发明轮子。鉴于此,REST 是分布式系统的标准软件架构风格,当您使用实体/对象时它工作得非常好。

如果您有与实体交互的 API,建议使用 REST 接口。在 python 上,你有Tastypie或更新的Django Rest Framework,几乎可以完成所有工作。正如您在 2) 中提出的那样

如果您有一个与服务交互的 API,例如登录,那么您应该构建一个 RPC 服务,基本上是一个具有远程访问功能的功能,如您在 1) 中解释的那样。

通常,您需要在强大的应用程序上使用这两种方法。是的,有可能做到这一点。我同意@sampson-chen,我们也在做同样的事情。我们有一个带有tastepie 的REST 接口,其他方法是通过自定义RPC 服务完成的。

在我们的案例中,性能仍然不错,但主要取决于您在服务中调用的方法,例如数据库查询。你有很多方法可以提高速度,例如使用 Celery 来排队繁重的工作。

希望能帮助到你。

于 2012-10-20T19:00:32.953 回答
0

REST API 虽然非常有用,但将您限制为对资源执行的 GET、POST、PUT、DELETE 操作。这会使表达其他操作类型变得困难,例如发送电子邮件。我发现有几种方法可以在 django/tastypie 中处理这个问题:

  1. 对现有资源发出 PUT/PATCH 请求,设置一个标志,让您的后端知道触发操作。检测是否设置了标志可以在 post_save 信号处理程序中完成(使用 django-model-utils FieldTracker 查看字段是否从 False 更改为 True);这也有助于确保您的应用程序逻辑在 REST API 之外也能正常工作(例如通过管理站点、celery 任务、基于 HTML 的视图或 Python shell 进行的更改)。

  2. 创建一个非 ORM 资源(例如 /api/v1/email/)并覆盖 post_list() 方法,在那里调用您的函数。

  3. 如其他地方所述,创建一个从属资源 (/api/v1/myresource/send/)。

于 2016-01-15T22:58:26.720 回答