搜索
写经验 领红包
 > 设计

接口代理是什么意思啊(接口代码是什么)

导语:架构实战(7)——接口代理

按照分层的设计理念,互联网应用一般分为多个层 接入层:一般是负载均衡器或者Nginx,是流量的入口,按照特定的规则,转发流量到内部服务器。 web层:用户登录的验证、鉴权等,和具体的业务解耦,业务实现则由服务层完成。一般的原则是:web层不依赖于数据库。Tips:在前后端分离的开发模式下,web层的项目,可以用nodejs开发,由前端工程师维护;也可以采用的后端技术栈开发,由后端工程师维护。我们团队采用的是后者,web层的项目由SpringBoot技术开发。 服务层:根据业务实际,划分成多个独立的服务,每个服务独立承担一项业务职责。

当然还有数据层、缓存层等,因为和此文章无关,不做详细描述。

图1 - 互联网应用分层架构

从这个部署架构图上可知,浏览器的所有接口访问请求,都需要通过web层的转发,才能调用到内部的具体业务实现。

web层调用内部的业务接口,主要有两种实现的方案

方案一:单独实现。对浏览器提供的每一个接口,在web层中定义controller,组装参数后调用服务层的接口,然后把结果返回给浏览器。

优点:对每一个接口做具体详细的控制,个性化能力更强。 缺点:微服务化的项目实践中,一般是按模块/微服务来分配工作的,例如A负责用户微服务,B负责流程微服务等等。按照这种模式,工程师不仅关注自己的微服务项目,还需要关注web项目的实现,不利于工作职责的专注,增加了工作量。从架构的角度看,web层实现的工作流程是一样的:验证用户状态-->调用内部服务。每个人都去写几乎同样的逻辑,既不经济,又容易导致不可控。

方案二:接口代理。在web项目中,增加接口代理模块,约定浏览器接口和内部服务接口的映射规则,例如/webapi/1/usr/info/get映射到用户服务的/webapi/1/info/get接口。在接口代理模块,根据接口的路径,转发调用到特定的服务实例上。这样做的优点很明显,工程师不需要再关注web项目了,只要做好的自己负责的微服务就好;对架构师也很友好,把接口调用的入口统一了,做调整或优化的时候,更容易入手。

图2 - 接口代理实现

引入接口代理的概念,有两个细节需要探讨。

1、接口访问越权问题。接口代理的实现,是根据url的规则进行转发的,恶意的攻击者,可以构造一些符合规则的url,试图访问内部服务的非公开接口。解决此问题,引入了接口代理白名单的机制,只有在白名单中声明的接口,才能被转发到内部服务。

2、非法参数透传。接口代理进行接口转发的时候,需要附带上浏览器提交的参数。用户相关的敏感字段,例如当前用户Id,需要从session中读取,而不能由透传浏览器传递的参数。解决此问题,引入参数黑名单机制,转发请求时,忽略在黑名单中的请求字段。

本文内容由快快网络小彤创作整理编辑!