基于 RESTful API 的 web 应用的架构设计问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wcflmy
V2EX    程序员

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

  •  1
     
  •   wcflmy 2016-01-11 15:07:19 +08:00 4282 次点击
    这是一个创建于 3565 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想基于 RESTful API 设计一个 web 应用,在前端利用 ajax 调用这些 api 接口获取数据并进行渲染。但对于具体的架构还不是很清楚,有以下几个疑问:
    1 、前端渲染时, html 模板是存放在哪儿的,存放在 js 中,还是另外启动一个后台服务来提供这些 html 模板?
    2 、有什么好的框架适合于这样的架构进行快速开发?
    3 、有哪些好的类似项目可以进行参考?
    望各位多多指教。
    第 1 条附言    2016-01-11 15:57:54 +08:00
    是否是这样的:启动一个 WEB 服务作为静态站点,启动一个 WEB 服务作为 RESTful API (这两个 WEB 服务是否可以合并到一个物理服务器上?),静态站点只提供 html , css , image 等静态文件,然后用到的数据全部从 RESTful API 来获取并进行渲染,不知理解的对不对。
    14 条回复    2017-11-04 22:43:45 +08:00
    Levyzzz
        1
    Levyzzz  
       2016-01-11 15:16:55 +08:00
    Angular
    ethego
        2
    ethego  
       2016-01-11 15:19:02 +08:00
    你需要这个 http://cn.vuejs.org/
    wcflmy
        3
    wcflmy  
    OP
       2016-01-11 15:19:56 +08:00
    @Levyzzz
    能不能稍微再详细一些啊, html 模板是如何存放的,本人太菜,望悉心解答啊。
    wcflmy
        4
    wcflmy  
    OP
       2016-01-11 15:20:45 +08:00
    @ethego
    有没有一个比较好的项目或者例子可以参考一下啊,由于以前没有接触过这一块,所以现在不知从何下手。
    ethego
        5
    ethego  
       2016-01-11 15:25:19 +08:00
    @wcflmy vue 自带了组件化以及模板,按照事件动态地在前端进行渲染,大型应用还可以通过 webpack 进行打包,给你的官网里有示例
    timqian
        6
    timqian  
       2016-01-11 15:27:59 +08:00
    可以放在 github page 上
    wcflmy
        7
    wcflmy  
    OP
       2016-01-11 15:29:50 +08:00
    @ethego
    好的,万分感谢!
    hantsy
        8
    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
        9
    wcflmy  
    OP
       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
        10
    yimity  
       2016-01-11 17:22:12 +08:00
    最后的讨论已经让你明白这个架构了。
    qinxi
        11
    qinxi  
       2016-01-11 17:33:12 +08:00
    @wcflmy 点人头像进去就看到 github 了.....
    minsheng
        12
    minsheng  
       2016-01-11 18:47:31 +08:00 via iPhone
    RESTful API 服务器推荐用 Haskell Servant 来做,因为可以静态生成类型安全的 API ,自带了 Haskell/Javascript/PureScript 支持,有需要也可以自行扩展。
    hantsy
        13
    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
        14
    zcdll  
       2017-11-04 22:43:45 +08:00
    2017 年 11 月 4 日,再看这位同学的提问,感觉挺有意思的。

    要多思考。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5837 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 02:27 PVG 10:27 LAX 19:27 JFK 22:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86