在单独的 API 中抽象出常见的客户关注点是否有意义
Does it make sense to abstract common client concerns in a separate API
最近我在不同的客户端 API 工作,例如 HTTP ReST 客户端、消息传递客户端和数据库客户端。
在每种情况下,都出现了同样的问题,具体如下:
- 连接池
- 异步和非阻塞 I/O 具有干净的错误处理
- 请求使用退避策略重试(对于 ReST 和消息传递更是如此)
- 请求批处理(数据库更是如此)
在我看来,上述问题可以在单独的 API 中从底层请求中抽象出来。此外,由于对上述问题进行编码的复杂性,不多次支付成本是有道理的。
因此,我希望有一个通用的客户端助手 API,它允许我重试和批处理任何类型的请求,同时异步执行所有请求。
它将是一种任务执行器 API,但没有其他复杂性(例如调度,因为只有一个任务需要执行)。
因此我的问题,还是我遗漏了什么?
我会说将它们分开。我的猜测是您会为其中的每一个找到第 3 方解决方案,但我不知道有任何库可以同时完成这三个。
我不确定您的编程是否在 Java,但我认为 apache 项目在其 commons-* 库中分割实用程序方面做得很好。你可能想从那里汲取一些灵感。
最近我在不同的客户端 API 工作,例如 HTTP ReST 客户端、消息传递客户端和数据库客户端。 在每种情况下,都出现了同样的问题,具体如下:
- 连接池
- 异步和非阻塞 I/O 具有干净的错误处理
- 请求使用退避策略重试(对于 ReST 和消息传递更是如此)
- 请求批处理(数据库更是如此)
在我看来,上述问题可以在单独的 API 中从底层请求中抽象出来。此外,由于对上述问题进行编码的复杂性,不多次支付成本是有道理的。
因此,我希望有一个通用的客户端助手 API,它允许我重试和批处理任何类型的请求,同时异步执行所有请求。 它将是一种任务执行器 API,但没有其他复杂性(例如调度,因为只有一个任务需要执行)。
因此我的问题,还是我遗漏了什么?
我会说将它们分开。我的猜测是您会为其中的每一个找到第 3 方解决方案,但我不知道有任何库可以同时完成这三个。
我不确定您的编程是否在 Java,但我认为 apache 项目在其 commons-* 库中分割实用程序方面做得很好。你可能想从那里汲取一些灵感。