基于 RESTful API 的 web 应用的架构设计问题

2016-01-11 15:07:19 +08:00
 wcflmy
我想基于 RESTful API 设计一个 web 应用,在前端利用 ajax 调用这些 api 接口获取数据并进行渲染。但对于具体的架构还不是很清楚,有以下几个疑问:
1 、前端渲染时, html 模板是存放在哪儿的,存放在 js 中,还是另外启动一个后台服务来提供这些 html 模板?
2 、有什么好的框架适合于这样的架构进行快速开发?
3 、有哪些好的类似项目可以进行参考?
望各位多多指教。
3915 次点击
所在节点    程序员
14 条回复
Levyzzz
2016-01-11 15:16:55 +08:00
Angular
ethego
2016-01-11 15:19:02 +08:00
你需要这个 http://cn.vuejs.org/
wcflmy
2016-01-11 15:19:56 +08:00
@Levyzzz
能不能稍微再详细一些啊, html 模板是如何存放的,本人太菜,望悉心解答啊。
wcflmy
2016-01-11 15:20:45 +08:00
@ethego
有没有一个比较好的项目或者例子可以参考一下啊,由于以前没有接触过这一块,所以现在不知从何下手。
ethego
2016-01-11 15:25:19 +08:00
@wcflmy vue 自带了组件化以及模板,按照事件动态地在前端进行渲染,大型应用还可以通过 webpack 进行打包,给你的官网里有示例
timqian
2016-01-11 15:27:59 +08:00
可以放在 github page 上
wcflmy
2016-01-11 15:29:50 +08:00
@ethego
好的,万分感谢!
hantsy
2016-01-11 16:11:37 +08:00
前端可以是 SPA 模式,纯静态的。用 Node , Apache , Ngnix 运行,还可以打包成 APP (如使用 Ionic 框架)。目前主流框架包括 Angular , React , Meteor , Backbone , EmberJS 等。如果你感兴趣,可以看我 Github 上的 Angular 例子,全部采用 SPA 方式,大部分为了演示与 REST API 部署在一起,也有一些分开部署。

用户量不大,应用不复杂的情况下 REST API 可以用一个 Sever 来独立运行即可。

复杂的业务,高并发等,可以是多个 REST API 细分,如订单,产品等 API 分拆,分开部署,再使用 API Gateway 方式统一暴露给前端( SPA 站点, HTML 5 APP , Native APP , Desktop APP 等)。
wcflmy
2016-01-11 16:36:30 +08:00
@hantsy
对,我想做的就是一个 SPA 应用。我想的是这样,一个纯静态 WEB 服务( node/apache/ngnix ),用来提供 html , js , css , image 等。然后再开启一个 WEB 服务( node or apache/ngnix+php )作为 RESTful API ,需要用到的数据直接利用 ajax 调用 RESTful API 获取,是这样的吗?
1 、这两个 web 服务是否可以放在同一个物理服务器上(否则需要处理跨域问题),我觉得应该是可以的, http://www.example.com/ 作为首页, http://www.example.com/api/ 作为 RESTful API 的入口。但还是确认一下。
2 、这里的 SPA ,是否指 single-page application,又是 spa 模式, spa 站点, spa 应用的,我怕我搞错概念了, -_-||
3 、劳烦大神留下 github 地址^_^
yimity
2016-01-11 17:22:12 +08:00
最后的讨论已经让你明白这个架构了。
qinxi
2016-01-11 17:33:12 +08:00
@wcflmy 点人头像进去就看到 github 了.....
minsheng
2016-01-11 18:47:31 +08:00
RESTful API 服务器推荐用 Haskell Servant 来做,因为可以静态生成类型安全的 API ,自带了 Haskell/JavaScript/PureScript 支持,有需要也可以自行扩展。
hantsy
2016-01-11 19:13:49 +08:00
@hantsy 就 Java 而言,多个服务可以是多个 War 部署同一个服务器,如 Tomcat , 或者不同的 Tomcat (改端口,仍然是同一物理机器),也是不同的机器( IP 不同,不同物理机,或虚拟机,或容器)。

跨域最简单的方式,对于 SPA 站点来讲,配置一下 Apahce/Ngnix/NodeJS HTTP 代理。当然服务器端也可以使用 CORS Filter 之类的打开, Tomcat 内置一个 CORSFilter , Spring 4.2 也内置了方案(一行代码解决)。使用 IFrame ( Spring Security 默认禁用), JSONP ( Spring MVC 简单的两配置也可以实现) 是下下策。移动 APP 无需考虑跨域。
zcdll
2017-11-04 22:43:45 +08:00
2017 年 11 月 4 日,再看这位同学的提问,感觉挺有意思的。

要多思考。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/249889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX