【问题标题】:Advantages of a separate REST backend API?单独的 REST 后端 API 的优势?
【发布时间】:2015-03-13 20:39:15
【问题描述】:

背景:我是一名初级程序员,自学成才,希望能做一个 SPA。我从 JavaScript、Jquery、PHP 和 MySQL 开始,现在对所有这些都非常有信心。我从 Ember 开始,现在正从 PHP API 转向 Node.js。这让我更接近 Meteor ......我知道我需要使用 Mongo 来代替,但是拥有一个集成的正面和背面似乎是明智的并且有一些优势。

所以我的问题是拥有单独的 REST 后端 API(例如 Express)而不是集成的前端/后端(例如 Meteor)有什么优势。

我想到的是我的应用程序将基于平板电脑/PC,但将来我会想要一个不同的移动版本,所以我可以使用相同的 API。我意识到上述问题是这个堆栈问题的主要关注点,但也许如果流星开发人员可以澄清这是否确实是一个问题。

提前致谢!

【问题讨论】:

    标签: angularjs ember.js express meteor sails.js


    【解决方案1】:

    将前端、后端(Rest Api)和DB等层分离的架构设计,是为了获得更好的可扩展性、可重用性和应用程序功能的逻辑分离。例如:

    今天制作一个分为 3 层的 Web 应用程序(前端、后端、 和数据库),如果明天你想做一个移动应用程序,你可以 在前端层像一个额外的项目一样开发应用程序, 但使用后端开发的所有功能。然后是前端 应用程序不需要服务器为什么在每个设备内运行,但也许 后端服务器的负载增加,你只需要再增加 1 个 服务器在后端层。

    这是一个小例子,但却是这个移动应用新时代最常见的例子。

    在 MVC 架构中始终记住这一点:

    前端:始终从后端调用服务、渲染视图和捕获数据。有时做一点逻辑。

    后端:接收请求,应用所有业务逻辑,在数据库中进行读写操作,返回首选json格式的响应。

    模型:存储数据、备份、从属等。

    PD:如果您在此示例中使用流星,您将需要制作一个 api Rest 来开发移动应用程序。

    【讨论】:

      【解决方案2】:

      对我来说,使用 REST API 会获得很多优势,它们是轻量级、可扩展且整体可重用的。

      如今,使用垂直架构是一种趋势,这意味着拥有一个具有单一职责的 RestFul 服务,因为它可以更好地扩展并且更容易将团队分配给一个 api,这样您就可以管理多个团队和 API 以非常有序的方式进行。这可能是 Twitter、wunderlist 和其他公司的工作方式,因为它是一种更好地扩展的解决方案。

      看看 Raffi Krikorian 的 talk,他曾担任 Twitter 架构负责人一段时间有点老,但值得每一分钟,并说明一些优势。 你也可以看看下图,我之前做过,它解释了 MVC 和 API 第一类架构之间的区别。

      我使用 angular 和 rest 服务编写了一个 rest 应用程序,这对我来说是一次非常好的体验,没有回头路。

      祝你好运

      【讨论】:

        【解决方案3】:

        Meteor 并没有像您描述的那样真正“集成”前端(客户端)和后端(服务器)。它仍然将它们维护为两个单独的层。流星的美妙之处(除了令人难以置信的反应性)在于它在任何地方都使用 Javascript,而不是在客户端使用 JS 和在服务器上使用其他一些语言,因此您可以在前端和后端使用相同的 API。虽然 Meteor 做了一些时髦的事情,比如让你在同一个文件中编写客户端和服务器代码,但它仍然需要你区分两者,服务器代码仍然只存储在服务器上,客户端代码仍然提供给客户端.

        Meteor 还很年轻,但开发者和社区非常活跃,你描述的一切都可以用它来实现。我已经使用 Meteor 工作了大约 6 个月,它还没有让我失望。我正在开发一个生产级应用程序,该应用程序还需要公开一个 REST API 以在移动应用程序中使用,我在 Meteor 上做得非常成功(我刚刚使用 Android 设备上的 REST 端点更新了用户配置文件并观看了它实时更改 Meteor 应用程序。太酷了!)。

        我正在使用这个很棒的包 RestStop2 在流星中构建 REST API,但不幸的是它被弃用了,所以我发布了一个更新版本。查看在 Meteor 中构建 REST API 的示例。它可以通过 Meteor 包管理器获得:https://atmospherejs.com/nimble/restivus

        所以要回答您的问题,您总是希望将 REST API 分离到它自己的层中,但这完全可以使用 Meteor。明确地说,您永远不会在 Meteor 应用程序中使用此 REST API。 Meteor 使用 DDP(不是 HTTP),它为您提供了与服务器更直接的连接,因此如果您通过 HTTP 从 Meteor 客户端访问 Meteor 服务器上的数据,您就做错了。当然,使用 Meteor,您可以使用 REST API 中的现有代码。

        有一篇非常好的文章解释了在 Meteor 中编写 REST API 的一些注意事项:http://www.meteorpedia.com/read/REST_API

        【讨论】:

        • 我没有想到/研究过 Meteor 自带的 REST API。我知道我在这里有一些阅读要做,但我对 RestStop2 被弃用以及(不是对你不利!)为什么你必须发布更新版本感到有点困惑。保持良好的分离不是标准做法,从而默认提供一个非常干净的 REST 层吗?
        • RestStop2 已被弃用,因为一个被广泛接受为 Meteor(Iron Router)默认路由解决方案的包开始支持服务器端路由。 RestStop2 开发人员建议人们改用 Iron Router,但仍然有足够的功能值得将其打包到自己的包中,我这样做了。这些都不是 Meteor 的标准。如果您查看其他一些更成熟的 Web 框架,例如 Rails 和 Django,您会发现它们都没有用于构建 REST API 的第一方解决方案。这通常不是这些框架的目标。
        • @rjoxford 查看我的回复,了解有关 Meteor 中 REST API 支持状态的更多详细信息:stackoverflow.com/questions/10150538/…。 Iron Router 和 RestStop2 部分解释了我开发该软件包的原因。
        猜你喜欢
        • 2016-11-28
        • 1970-01-01
        • 2018-12-11
        • 2019-06-06
        • 2011-11-15
        • 2019-04-06
        • 2020-03-28
        • 2016-05-13
        • 2015-03-03
        相关资源
        最近更新 更多