声明式 API(和命令式 API 的区别)

500 阅读1分钟

概念和区别

声明式 API 只定义期望的状态,关注结果不关注细节,执行过程由系统按指定状态来执行,API 交付指定配置后可以做其他事情。例如,SQL 就是一种声明式语言,告诉数据库想要的结果集,数据库会帮我们设计获取这个结果集的执行路径,并返回结果集。众所周知,使用 SQL 语言获取数据,要比自行编写处理过程去获取数据容易的多。
而命令式api需要调用者直接下达执行命令,并监控状态,再进行下一步命令的下达。

image.png

类型

  • 水平触发(LT)
    Level Triggering,也被称为条件触发,满足某个条件,就触发一个事件。只要该事件没有确认被获取,就不断通知。
  • 边缘触发(ET)
    Edge Triggering),每当状态变化时,触发一个事件,但不会确认事件是否被获取。

比较

两种声明式 API 各有各的优势与应用场景。例如 Kubernetes 使用的是 LT 方式,虽然在正常情况下 ET 比 LT 更节省资源,但如果在状态变化的时候,使用 ET 的方式并且正好丢掉了消息(在实际复杂网络环境下很有可能发生),就会使状态与实际预想的不一致。而 Kubernetes 架构中最重要的就是状态的声明,如果消息丢失,则会引发各种不受控的问题出现。