服务端Operation
最后更新于
接着,我们复盘下上文提到的3中类型时序图。他们都能用该HTTP请求流程图表示。
即,客户端发起REST请求,飞布服务查找并解析对应OPERATION,根据指令调用不同的拦截器,根据命名空间拆分请求到不同数据源,或控制请求不同数据源的流程,如串行或并行。
并将请求结果组装后,以JSON的方式返回给客户端。
一般情况下,基于GraphQL的服务直接对外暴露gql 端点,operation一般写在客户端,而飞布反其道而行,把operation放到服务端。
这样做有如下好处:
前端开发者无需感知GraphQL的存在,因此无需任何学习成本。
飞布对外暴露REST API,可以复用HTTP基础设施,如CDN等。
OPERATION保存在服务端,攻击者无法触达OPERATION,保证了安全。
无论客户端还是服务端OPERATION,都能利用GraphQL按需取用、类型系统的优势。
GraphQL的指令系统实现更加复杂的业务逻辑,但如果将指令放到客户端,就无法保证安全。得益于服务端OPERATION的第三点优势,Fireboom充分发挥了GraphQL指令系统的优势。
飞布的指令面板用于可视化插入指令,除了跨源关联外,指令分为三大类:全局指令(包括角色和私有),入参指令(用于修饰OPERATION入参)、出参指令(用于修饰operation字段)。
全局指令:作用于Operation,用于定义整个operation的行为,例如设置权限或声明其为内部操作。
入参指令:作用于 入参变量,用于为参数设置默认值,默认值可能源于当前登录用户或固定函数(环境变量)
字段指令:作用于 输出字段,用于修改字段的行为,如transform拍平响应结构
跨源关联指令:用于实现多API的流程编排,详情见 关联查询
在飞布中,指令本质上用于实现HTTP的切面功能,与JAVA等的注解类似。