【问题标题】:iOS app with Django带有 Django 的 iOS 应用程序
【发布时间】:2012-10-10 11:24:33
【问题描述】:

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

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

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

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

非常感谢!

【问题讨论】:

    标签: ios django restkit tastypie


    【解决方案1】:

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

    【讨论】:

    • 性能如何?还有……如果您还在使用选项 1,为什么不一直使用它?!再次感谢!
    • 我同意@sampson-chen,我们也在做同样的事情。我们有一个带有美味派的 REST 接口,其他方法是通过自定义 RPC 服务完成的。
    • 您能解释一下自定义 RPC 服务的工作原理吗?我正在做类似的事情,并希望确保在身份验证和可重用性方面遵循一些标准。
    【解决方案2】:

    如果可以,您应该尝试使用通用的方法来做某事,而不是重新发明轮子。鉴于此,REST 是分布式系统的标准软件架构风格,并且在您使用实体/对象时效果很好。

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

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

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

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

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      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/)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 2014-04-22
        • 2021-05-03
        相关资源
        最近更新 更多