跳至主要內容

Web开发中,如何向二方和三方提供服务,应该如何思考

Neo大约 7 分钟编程业务

张三法外狂徒公司有两个团队,坑蒙拐骗团队a和敲诈勒索团队b,a负责人员系统,已有查询所有法外狂徒的成员信息的业务功能,b团队(二方)的敲诈系统想要使用a系统人员数据,防止敲诈到自己人,问a系统应该如何向b系统提供数据服务,如何思考?

我们经常需要为不同的客户或合作伙伴提供服务,例如API、SDK、组件等。这些服务可能是二方的,也就是只针对某个特定的客户或合作伙伴,也可能是三方的,也就是面向多个客户或合作伙伴。那么,作为Web开发者,我们应该如何思考和设计这些服务呢?

二方服务的特点和挑战

二方服务是指只为某个特定的客户或合作伙伴提供的服务,通常是基于某种协议或合同的。二方服务的优点是可以更加贴合客户或合作伙伴的需求和场景,提供更加定制化和专业化的解决方案。二方服务的缺点是可能导致代码的重复和冗余,以及维护和升级的困难。因此,当我们设计二方服务时,应该注意以下几点:

  • 尽量复用已有的代码和组件,避免重复造轮子
  • 尽量保持代码的可读性和可维护性,遵循一些编码规范和最佳实践
  • 尽量保持代码的可测试性和可部署性,使用一些自动化工具和流程
  • 尽量保持代码的可扩展性和可适应性,考虑未来可能的变化和需求
  • 尽量保持与客户或合作伙伴的沟通和反馈,及时了解他们的需求和满意度

三方服务的特点和挑战

三方服务是指面向多个客户或合作伙伴提供的服务,通常是基于某种标准或规范的。三方服务的优点是可以提高代码的复用率和效率,以及扩大服务的影响力和价值。三方服务的缺点是可能导致代码的复杂度和难度,以及兼容性和安全性的问题。因此,当我们设计三方服务时,应该注意以下几点:

  • 尽量遵循一些公认的标准或规范,例如RESTful API、OAuth、OpenID Connect等
  • 尽量提供清晰和完善的文档和示例,帮助客户或合作伙伴快速理解和使用
  • 尽量提供灵活和可配置的选项和参数,满足不同客户或合作伙伴的需求和偏好
  • 尽量提供稳定和可靠的性能和质量,使用一些监控和报警工具
  • 尽量提供安全和保密的机制和措施,使用一些加密和认证技术

思考方向

从业务耦合、数据隐私、安全性、合规性等方面进行考虑

业务耦合

首先,这个数据a和b系统都需要使用,b依赖于a,如果直接使用原来接口,那么a和b的耦合度就很高,a和b的修改都会影响到对方,所以这里必须重新封装一个接口以提供给b使用,b使用接口时,b系统不需要关心a系统如何实现,只需要关心接口如何使用即可。 直接给表可以消除业务耦合问题,但是,这样会相应给出数据库相关信息,带来其他风险,并且由于给表,a系统便无法对b用户进行鉴权和流量控制,弊远大于利。

数据隐私

数据隐私问题,主要考虑数据脱敏,a系统提供给b系统的人员数据,a系统需要对数据进行脱敏处理,只提供必要的数据,以防止敏感信息泄露。

安全性和合规性

一个合理的数据提供,须满足以下条件

  • 定义清晰的API接口: 确保提供清晰、稳定、易于理解的API接口,以便二方团队能够方便地调用和集成。

  • 访问控制和权限管理: 在服务提供方(a团队系统)中实现严格的访问控制和权限管理机制,确保只有授权的人员能够访问敏感数据。可以使用 API 密钥、OAuth 认证等方式。

  • 数据脱敏和最小化原则: 考虑在服务提供方中对返回的数据进行脱敏处理,仅返回二方团队所需的最小化数据,以减少敏感信息的泄露风险。

  • 合同和协议: 签订明确的服务合同和协议,明确数据使用的条件、期限、限制等。这有助于规范数据共享的方式,并为双方提供法律保障。

  • 日志和监控: 在服务提供方实现详细的日志记录和监控机制,以便随时追踪和审计数据的访问情况,确保在出现问题时能够进行有效的调查。

  • 版本控制: 如果可能,考虑实现API的版本控制,以确保对接口进行变更时不会影响到二方系统的正常运行。这可以通过在API路径中包含版本号来实现。

  • 故障处理: 在API设计中考虑到可能的故障情况,实现适当的错误处理机制,提供有用的错误信息,以便二方团队能够更好地排除问题。

  • 沟通和培训: 建立良好的沟通渠道,确保两个团队之间能够及时交流和解决问题。为二方团队提供必要的培训和文档,以便他们更好地使用服务。

以上建议旨在确保数据的安全性和合规性,同时提供方便、可靠的服务。在实际应用中,还可能需要根据具体情况进一步定制解决方案。

日常开发中虽然不能说完全满足上述条件,但是有些条件必须是要考虑的,比如:API接口文档、访问控制和权限管理、数据脱敏和最小化原则、故障处理,最好是要有版本控制方便后续跟进。

调用方式

数据传递可以有多种方式,比如导出excel等文件交给b团队,提供接口给b团队调用,这里又可以有多种实现方式,比如:HTTP调用,RPC调用,MQ调用等

  • 导出文件的方式:这种方式比较简单,适合办公类的数据,比如:销售数据,财务数据等,但是缺点也很明显,就是数据量大的时候,导出的文件会比较大,而且文件格式、文本排版比较麻烦。

  • HTTP调用: HTTP调用相对来说比较简单易用。它使用明文文本进行通信,方便调试和排查问题。但是相对于二进制协议,如gRPC等,HTTP的文本格式和头部信息较多,导致传输的数据量较大,可能会增加性能开销。同时需要绑定ip或域名,扩展性相对RPC来说较弱。

  • RPC调用: RPC调用是使用二进制协议进行通信,传输的数据量小,性能好,后期扩展方便。但是相对于HTTP调用,RPC相对要复杂一些,需要额外的开发工作。

  • MQ调用:同RPC调用一样,需要额外的开发工作,MQ调用不适合本例子的使用场景,所以不做讨论。

特别感谢好友 dragonyu的指导。