6

请问大家多页面应用怎么做前后端分离?资源定位和前端页面权限控制怎么做?实际项目里...

 2 years ago
source link: https://www.v2ex.com/t/827784
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

请问大家多页面应用怎么做前后端分离?资源定位和前端页面权限控制怎么做?实际项目里是怎么做的?

  skinny · 7 小时 10 分钟前 · 1008 次点击

最近在写一个自己的小项目,是一个多页面应用,综合考量下,选择了前后端分离这种架构。

注意,不是单页应用!

某些问题可能有点简单,请多多包涵。

首先,我开始以为的前后端分离是这样的:

  • 服务端负责提供 API (包括权限验证、增删查改、会话)
  • 前端浏览器负责 UI 渲染和逻辑控制,前端相关的 js/css/html 等资源都是静态文件,可以放在 CDN

然后我想到一个路由问题,比如客户端请求了一篇文章的 URL ,该怎么处理? 这里有两种路由格式:

  • /articles/#/1

    nginx 直接返回 /articles.html 或 /articles/index.html ,然后前端解析 hash 并请求相关资源,再渲染出来

  • /articles/1

    这种需要编写 nginx 规则来拆分 URL ,其它基本同上

上面这些遇到简单结构的 URL 还好,但是结构化的复杂的 URL 就不好处理,比如获取用户 1 的文章 1 ,URL 为“/users/1/articles/1”,这种又该如何处理?我能想到的是仍然返回 /articles.html 或 /articles/index.html ,然后前端再根据制定的 URL 规则解析处理。

除了路由问题,前端页面的权限控制怎么做?比如有这样一个需求,某些页面只能特定用户访问,任何无权限用户不应该获取到这些页面的任何信息,即便无权限用户根本不能请求相关 API 。

综合上面的问题,我想到一个折中的办法:

  • API 服务端照旧

  • 编写一个“前端”服务端负责前端页面权限验证、管理路由规则,数据获取和操作仍然通过 API 服务。

    比如有这样一个页面“/users/{uid}/dashboard/user-details?uid=xxx”,服务端路由 handler 取得客户端的 token ,向 API 服务查询权限, 如果该用户具有某些已标记权限则返回该页面,否则返回 403 或重定向到某页面。

    这样前端服务器仍然可以选择和 API 服务器不一样的技术,可以使用 node 一把梭,也可以用 openresty ,还可以用其它的技术。

  • nginx 只做代理

最后,有更好的办法吗?你们的实际项目又是怎么做的?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK