【问题标题】:Client-side or server-side framework?客户端还是服务器端框架?
【发布时间】:2015-11-04 20:02:47
【问题描述】:

我的项目将是一种 craiglist,一个用户可以发布公告(日常生活物品、汽车、公寓等)的网站。因此,身份验证、个人资料页面、内容创建、显示待售对象等。

我已经开发了很大一部分后端:我有一个用java开发的三层架构的RESTful API。它与数据库建立链接,为我提供不同的 url 并向我发送相关的 JSON。

网址示例:

http://api.mywebsite.fr/user?userid=1 发回给我:

{"user": {"username": "jdoe1234", "email", "jdoe1234@gmail.com"}}

我有在整个站点上执行的所有操作的 url(公告创建、上次数据更新……所有内容,我已经仔细声明了它们 POST、GET、UPDATE、DELETE 等)。还有 oAuth 来保护 API 免受令牌不允许的查询。

“服务器”方面就这些了,我觉得应该没有问题。

但如果所有操作都由 web 服务管理,我看不出有兴趣为我带来一个大型服务器端框架,如 Symfony/cakePHP、Zend 等,以便在我的不同入口点发出 HTTP 请求,检索 JSON 并填充 HTML。

所以我查看了客户端框架,例如 Angular、Ember 等。起初,它似乎非常适合我的情况:http 请求的可能性,管理成功或错误时要做什么,直接利用生成的 JSON 填充视图等。

我什至无法在 angularjs 和 Ember 之间做出选择,两者都非常相似,但是随着 Angular v2 的发布,我担心 v1 的可维护性(如果我选择 Angular,它将是 v1,因为大多数教程和问题都与 Angular 1.X 相关)。

我不知道我是否通过选择客户端框架做正确的事情,我担心他们'brident'(不确定那个词,对不起)我。另外,它在浏览器中完全实例化,因此用户可以完全更改我提供的所有代码和数据。这对我来说似乎很奇怪。

我想绝对确定我使用的技术,以防我将此应用程序提供给公众使用。我想正确地做事,以避免可维护性或安全性问题。

总结:有了我已经拥有的东西(webservice / api),使用像 Angular 这样的客户端框架是一个好主意,还是应该留在像 Symfony / Zend 等大型服务器端框架上?知道我将自己定位在该平台将被大量使用的环境中(craiglist 可比流量)。

【问题讨论】:

  • 为什么要修复没有损坏的东西,或者引入你说不需要的外部依赖项?
  • 实际上我只有后端的 API,所以我的问题是知道什么是最适合我利用 API 的。我暂时不使用任何服务器或客户端框架:)

标签: javascript angularjs web-services ember.js frameworks


【解决方案1】:

我想说 - 取决于您将来是想成为更多的前端人员还是后端人员。如果您想成为全栈开发人员,则不适用。

在我看来,Symfony/Zend 或其他大型服务器端框架都没有像 Ember/Angular/React 这样的动态前端 JavaScript 框架那么令人兴奋。

另外,如果您已经在后端部分实现了 RESTful API 和 OAuth 身份验证,我会选择 Ember。为什么? Ember Data 是与后端 API 对话的绝佳工具。它很成熟,它会在需要时延迟加载记录,并且非常可定制。

它在浏览器中完全实例化,因此用户可以更改 绝对是我提供的所有代码和数据...

Ember 内置了安全功能,例如清理以其模板语言(HTMLBars)呈现的数据。此外,还有在 Ember 中实现的 CORS 和内容安全策略 (CSP) 标准。

我想绝对确定我使用的技术,以防万一 例如,将此应用程序提供给公众。我想要 正确地做事,以避免可维护性或安全性 问题。

在 Ember 中,您可以创建成熟、安全、可用于生产的应用程序,但您需要在一定程度上熟悉自己的 Ember 技能才能构建如此雄心勃勃的 Web 应用程序,但这是构建每个应用程序的一部分。

有了我已经拥有的东西(webservice / api),是不是很好 使用像 Angular 这样的客户端框架的想法?

是的,使用 MEAN 堆栈或使用 Ember + RESTful API 是非常流行的解决方案。

为什么我应该选择 Ember 而不是 Angular(它有一个更大的 社区/教程/已回答的问题)?

Angular 有更大的社区/教程/已回答的问题,但是当我开始使用 Angular 进行一些附带项目以了解它相对于 Ember 的可能优势时,我很惊讶它的社区在做一件事时没有达成共识。因此,与其快速搜索如何声明和使用指令(我认为这是让我感到困惑的事情),我必须进行另一项研究,哪种方式是最好的。此外,有很多方法可以设置项目(在哪里放置自定义指令,不同的 Angular 对象),你必须做另一项研究来选择哪一个。我最终使用 repo healthy-gulp-angular 作为我的模板,但你可以看到它已经有 8 个月没有更新了,但我认为在这 8 个月中,Angular 发生了很多变化,我不确定这个 repo 是否是最佳选择。

在 Ember 中,您有 Ember CLI 工具,它是根据约定优于配置原则构建的。您还拥有使用 JSON API standard 的 Ember Data - 如果您现在没有符合 JSON API 的服务器端,您可以编写自定义适配器来规范服务器响应或更改后端回复的方式。在 Ember 中,您不会有那么多令人头疼的问题,并且根据您询问的对象来做 1 件基本事情的不同最佳解决方案。

什么是“单页应用”?

单页应用程序基本上是一个在导航时不必重新加载所有资产和 HTML 的页面。它优于 PHP - 当用户移动到另一个位置时,他只下载该路线的新数据。 More info here.

这些框架是否允许我创建真正的路线? ( www.myapp/profil/userid 等)

是的,当然。您甚至不需要在您的 URL 中使用#。对profile路由和指定路径profile/:userid有简单的重写规则和少量逻辑,当用户打开URLwww.myapp/profile/userid时,他会自动跳转到profile路由,userid会被解释为路由参数, 所以你可以拿这个userid 并在model hook 中从商店中找到用户记录。

【讨论】:

  • 感谢您的回答!我过去曾在另一个项目中使用过 Zend,但正如我在这里所说,我真的不明白它如何能 100% 有效,因为我已经有一个构建良好的 API。我在您的个人资料中看到您是“亲 ember”,所以我问自己您的意见是否客观(无意冒犯)。为什么我应该选择 Ember 而不是 Angular(它有更大的社区/教程/已回答的问题)?什么是“单页应用程序”?这些框架是否允许我创建真正的路线? (www.myapp/profil/userid 等)。再次感谢您的宝贵时间!
  • 答案已更新。我不是 100% 客观的,因为:a) 我在 Ember 上花了更多时间,而且我只知道 Angular 的基础知识; b)这个问题是基于意见的:P
  • 很棒的更新,这对我做出选择非常有帮助,再次感谢您;)
【解决方案2】:

客户端 = 速度,服务器 = 稳定性

JS 框架每周更新一次 非 Js 后端每年一次

客户端取决于浏览器的行为 Back 只与机器相关,与环境无关

我选择了 FE,因为我厌倦了通过将变量值写入数据库来实际查看控制器中发生的情况来调试代码 -_-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 2010-09-29
    • 2015-11-04
    • 2018-06-06
    • 1970-01-01
    • 2013-07-29
    • 2020-07-18
    相关资源
    最近更新 更多