一个用于随时间变化数据的API
内容提要
文章讨论了数据随时间变化的API标准化问题。当前不同系统使用各自的API,导致不便。作者提议建立统一的编程API和网络协议,以便实时获取数据变化,支持版本控制和增量更新,从而提高系统间的互操作性,简化开发过程,促进实时协作编辑和监控分析。
延伸解读
版本信息:解决数据时效性的关键
文章指出,许多API缺乏显式的时间概念,导致获取的数据无法判断其有效性。例如,两次查询可能不在同一时间点,数据可能已变化。引入版本信息(如递增数字、ETag或哈希)后,每次获取都附带版本,使数据成为不可变事实,便于后续查询和订阅变更。这类似于HTTP的ETag,但需要扩展到订阅场景。
现有流式API的不足与标准化需求
文章认为,现有的流式API(如Kafka、Observables)和发布-订阅系统各有局限:流式API难以获取初始快照和重连,发布-订阅可能丢失消息,Observables通常发送整个对象而非增量。因此,需要标准化的API,支持获取快照、订阅增量更新以及从指定版本重连,以提高互操作性和开发效率。
标准化更新格式与工具生态
文章建议定义标准的更新操作格式(如JSON-patch),并像HTTP的Content-Type一样为不同数据类型(纯文本、JSON、富文本)定义更新类型。这样能构建通用库和工具,用于调试、监控和扩展,类似REST生态中的cURL和nginx。标准化后,前端框架(如Svelte)可精确更新DOM,提升性能。
最小可行API规范与扩展
文章提出两个基本API:fetch(query)返回数据和版本,subscribe(query, version)返回更新流。此外,可扩展fetchAndSubscribe、getOps和mutate等操作。mutate带版本参数可实现乐观并发控制,支持实时协作编辑。这些API应支持版本、标准更新操作和重连能力,并广泛应用于数据库、应用和内核。
Q&A
为什么需要统一的数据变化API?
统一的数据变化API可以提高系统间的互操作性,简化开发过程,促进实时协作编辑和监控分析。
当前不同系统的API有什么问题?
不同系统使用各自的API,导致数据变化的获取不便,缺乏标准化使得开发和维护变得复杂。
如何实现数据变化的版本控制?
可以通过引入明确的版本信息,使得每次数据获取都能标明时间,从而判断数据的有效性。
标准化API应具备哪些功能?
标准化API应支持版本、更新操作和从某个时间点重新连接的能力,以便实时获取数据变化。
实时协作编辑如何受益于新的API标准?
新的API标准可以支持增量更新和语义化的变化通知,从而实现更高效的实时协作编辑。
缺乏时间概念对数据有效性有什么影响?
缺乏时间概念使得无法判断数据在获取时是否仍然有效,可能导致数据不一致的问题。