Liangshan

Inner peace.

API-First vs. API-Friendly

现在很多应用都运行于多个平台之上,所以通用的做法是写出一套公共的 API 给各个应用统一调用。

比如移动版本的网页,一次典型的请求是这样的:

移动版本的服务端请求公共 API 拿到数据,然后在服务端或是客户端渲染 HTML 5 页面。

用户的登录信息通过 API 验证后,存储在本地的 Session 里。

这种架构的网页,我称之为 API-Friendly,因为这里面有明显的重复劳动:

  • 包含了 2 个后端,一个是网页的后端,一个是前者的后端 —— 公共 API
  • 有两层验证体系,一个是传统的用户名-密码体系,一个是使用签名和加密的 API 验证体系

而我所说的 API-First 设计,就是在任何情况下都以调用 API 为第一目标的设计。

还是以上述移动版本网页为例:

移动版本的页面是纯静态页面,Javascript 直接请求公共 API,拿到数据后由客户端渲染页面(AngularJS 或者 ReactJS 这种技术)。 这样做可以避免构建一个仅仅进行信息转发的后端,另外一个很大的好处是整个网站的所有页面都可以直接使用 CDN 缓存,也可以单独部署。

移动版本的验证,第一次使用用户名密码登录,登录后返回一个 token。之后的每次请求都带着 token 访问 API 进行身份验证,客户端只存储 token,token 过期后需要重新登录。这样将前端页面直接当作 API 的使用者,每次请求都重新验证身份。这样其实也就没有传统意义上的登录和登出了。整个网页是无状态的,也不需要构建 2 套不同的认证体系。

这样通过 API-First 的设计,就能够构建出现代的移动应用。