【问题标题】:Should my web based app be a consumer of my api?我的基于 Web 的应用程序应该成为我的 api 的消费者吗?
【发布时间】:2011-03-02 19:41:36
【问题描述】:

我将很快开发一个移动应用程序 (iPhone) 和一个基于 Web 的应用程序 (Django)。对于移动应用,我将创建一个 REST api(很可能使用 Django)来从手机到服务器来回发送数据。

当我来创建基于 Web 的版本时,将其创建为 api 的任何其他客户端是否有意义。换句话说,移动应用程序和 Web 应用程序都将通过 HTTP 从外部 API 获取数据。或者基于 Web 的应用程序是否应该直接访问 api 正在使用的数据库并以这种方式获取其数据?

【问题讨论】:

    标签: django api


    【解决方案1】:

    我将创建 Web 应用程序以将 API 提供给移动客户端。也就是说,让基于 Web 的应用程序直接访问数据库。这将简化您的 XML/JSON RESTful 资源访问。

    【讨论】:

      【解决方案2】:

      把它分成三个“部分”。第一个使用 Python API 来操作数据库。第二个接口是你的 REST API 和你的 Python API。第三个讲网络并使用 Python API。

      【讨论】:

        【解决方案3】:

        我会说不,不要使用 HTML 版本的 API。如果你设计好你的 Django,你最终可以得到比使用 HTML 版本的 API 更少的代码。每当老板希望更改某些内容的拼写时,您还可以保留让网页设计师使用 Django 模板的能力。

        我建议尝试为您的 iPhone 应用程序定义一个基本应用程序以与之交互,然后在 HTML 版本的第二个应用程序中扩展它。 App1 将拥有您的所有模型(包括业务逻辑)和一个 views.py 用于处理传入/传出 iPhone 的数据。然后创建App2,它使用App1.models,但创建自己的views.py。运气好的话,您会发现自己除了用于呈现输出的模板外,什么都不更改,因此您可以通过将模板作为参数传递来重用您的视图。

        例如:

        App1.views:

        def list(request, template="list.json"):
            list = Model.objects.filter(deleted=False).filter(user=request.user)
            list.reverse()
            ## Lots of other logic to work on the list.
            return render_to_response(template, {list: list,})
        

        App2.views:

        def list(request, template="list.html"):
            return App1.views.list(request, template=template)
        

        【讨论】:

          【解决方案4】:

          我认为这个问题的答案随着时间的推移而改变。一年前,当被问到这样做可能仍然太麻烦时,但现在我肯定会说是的 - 使用您的 API 作为基础是明智的做法。随着网站使用更多的 HTML5 和移动应用程序变得更智能,让所有“UI”从同一个 API 层读取/写入真的很有意义。这将在未来为您提供更大的灵活性。

          【讨论】:

            猜你喜欢
            • 2013-10-14
            • 2020-04-06
            • 2021-11-24
            • 2011-10-30
            • 2013-09-09
            • 1970-01-01
            • 2010-10-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多