2022-03-03 16:10:21
在gRPC服务中,参数校验的位置选择是一个需要权衡的问题,它涉及到安全性、性能、可维护性等多个方面。以下是对在HTTP层还是RPC层进行gRPC服务参数校验的详细分析:
在HTTP层进行参数校验优点:
及时拦截非法请求:在HTTP参数传入时进行校验,可以确保在请求到达gRPC服务之前,非法参数已被阻止,从而避免浪费gRPC服务的资源。
减轻gRPC服务负担:通过提前校验,可以减少gRPC服务需要处理的无效请求,提高整体性能。
易于维护:HTTP服务的参数校验逻辑通常较为简单,且易于修改和扩展,不会对gRPC服务的核心逻辑造成干扰。
缺点:
可能增加HTTP服务的复杂性:如果HTTP服务本身已经较为复杂,再添加参数校验逻辑可能会进一步增加其复杂性。
无法完全替代RPC层校验:即使HTTP层进行了参数校验,RPC层仍可能需要进行额外的校验,以确保数据的完整性和一致性。
优点:
确保数据一致性:RPC层是gRPC服务的核心,进行参数校验可以确保传入的数据符合服务的预期格式和范围,从而维护数据的一致性。
防止恶意调用:在靠近数据库的一层进行校验,可以有效防止恶意调用对数据库造成的影响。
灵活性:RPC层可以根据实际需求进行灵活的校验逻辑设计,满足各种复杂的业务场景。
缺点:
性能隐患:在Interceptor中进行校验可能会造成性能损失,因为此时gRPC连接可能已经打开,而校验失败会导致连接被关闭,造成资源浪费。
维护困难:如果将来需要在HTTP服务中添加业务封装,而在Interceptor中进行校验可能会导致维护困难,因为校验逻辑与业务逻辑可能产生耦合。