REST服务器+大量使用JavaScript的客户端是我最近工作中遵循的原则。
REST服务器是在node.js + Express + MongoDB(非常好的写入性能)+ Mongoose ODM(非常适合建模数据,包括验证)+ CoffeeScript(现在我打算使用ES2015)中实现的,这对我来说非常有效。与其他可能的服务器端技术相比,Node.js可能还比较年轻,但是它使我可以编写集成了支付功能的可靠API。
我已经将Ember.js用作JavaScript框架,并且大多数应用程序逻辑都是在浏览器中执行的。我已经使用SASS(特别是SCSS)进行CSS预处理。
Ember是由强大社区支持的成熟框架。它是一个非常强大的框架,最近针对性能进行了大量工作,例如全新的Glimmer渲染引擎(受React启发)。
Ember Core Team正在开发FastBoot,它使您可以在服务器端(特别是node.js)执行JavaScript Ember逻辑,并将应用程序的预渲染HTML(通常在浏览器中运行)发送给用户。SEO和用户体验非常好,因为他不需要等待很长时间即可显示页面。
Ember CLI是一个很棒的工具,可以帮助您组织代码,并且可以随着代码库的扩展而很好地扩展。Ember也有自己的插件生态系统,您可以从各种Ember Addons中进行选择。您可以轻松获取Bootstrap(以我为例)或Foundation并将其添加到您的应用中。
为了不通过Express提供所有功能,我选择使用nginx来提供图像和大量JavaScript客户端。在我的情况下,使用nginx代理很有帮助:
upstream app_appName.com {
# replace 0.0.0.0 with your IP address and 1000 with your port of node HTTP server
server 0.0.0.0:1000;
keepalive 8;
}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
client_max_body_size 32M;
access_log /var/log/nginx/appName.access.log;
error_log /var/log/nginx/appName.error.log;
server_name appName.com appName;
location / {
# frontend assets path
root /var/www/html;
index index.html;
# to handle Ember routing
try_files $uri $uri/ /index.html?/$request_uri;
}
location /i/ {
alias /var/i/img/;
}
location /api/v1/ {
proxy_pass http://app_appName.com;
proxy_next_upstream error timeout invalid_header http_500 http_502
http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
优点:我喜欢API和客户端的分离。聪明的人说这是要走的路。理论上很棒。似乎最前沿和令人兴奋。
我可以说在实践中也很棒。分离REST API的另一个优点是您以后可以将其重新用于其他应用程序。在理想的情况下,如果您决定编写一个REST API,则不仅应该将其用于网页,还可以将其用于移动应用程序。
缺点:没有多少先例。这样做的例子并不多。公开示例(twitter.com)感觉呆滞,甚至正在放弃这种方法。
现在情况看起来有所不同。有很多使用REST API的示例,还有许多使用它的客户端。