序
一切始于一个鼓套装。2019年夏天,我的一个朋友让我开始玩电子鼓,我全身心投入其中。有时我确实会打鼓,但我花了相当大一部分时间编写代码,使用MIDI SysEx命令与我的电子鼓进行交互。
当COVID-19大流行爆发时,我的优先事项突然变得不同,需要考虑我当地教堂的音频/视觉需求,无论我们是否远程礼拜还是考虑如何再次亲自相聚。这涉及了学习VISCA、NDI和OSC等协议(用于摄像机和音频混音器),以及与Zoom、VLC、PowerPoint、Stream Deck等更多软件相关的集成。
这些项目没有太多的业务逻辑。几乎所有的代码都是集成代码,这既令人一度感到沮丧而后又非常有力量。令人沮丧的原因是,有些协议文档含糊不清或实际上不适合我尝试实现的用途,或者它们彼此之间不一致。但它也非常有力,因为一旦你掌握了集成方面,你可以借助多个强大的工具非常轻松地编写有用的应用程序。
尽管我在过去几年的经验主要是本地集成,但与Web API相关的工作也存在着类似的令人沮丧和鼓舞的平衡。我接触过的每个新的Web API都会引发一系列情感反应,包括兴奋、困惑、烦恼、接受以及最终的平和。一旦你充分理解了一个强大的API,你会感觉自己就像一个壮丽交响乐团的指挥,随时准备演奏任何你提供的音乐,即便有时在指挥的时候会出现一些莫名其妙的问题。
这本书本身并不会改变这一点。它只是一本书。但如果你阅读它并遵循其指导,你可以帮助改善用户的体验。如果有很多人阅读它并遵循它的指导,我们可以共同推动更一致和不那么令人沮丧的Web API体验。
重要的是要理解这本书的价值不仅仅是其各个方面的总和。对于JJ所深入探讨的任何一个方面,任何一个团队都可以做出合理的选择(尽管可能会忽略这里指出的某些特殊情况)。由于上下文的有限要求,该选择甚至可能比本书中提供的建议更适合特定情况。这种方法实现了大量局部最佳决策,但整体局面高度分散,甚至在同一公司的API之间可能采用了几种不同的方法。
除了为任何特定问题提供一致性外,这本书还提供了跨API设计多个领域的一致性方法。很少有API设计师有机会深入思考这一点,我很庆幸自己能与JJ和其他人(特别是Luke Sneeringer)一起讨论本书内的许多主题。我很高兴Google在API设计方面的投资可以通过这本书和https://google.aip.dev上的AIP系统回馈给其他开发人员。
尽管我对这本书的价值有很大信心,但它并不会让API设计变得容易。相反,它消除了伴随API设计而来的许多附带复杂性,使你能够专注于对你要构建的API真正独特的方面。你仍然应该期望需要思考,而且需要深入思考,但要有信心,思考的结果可以是一个令人愉快的API。你的用户可能永远不会明确地感谢你;一个良好设计的API通常需要付出大量辛勤劳动。但你可以放心,用户们不会经历即使API能正常工作但仍然感觉使用不适的烦恼。
将这本书视为一个脚凳,帮助你的API成为一个为其他人提供支持的巨人。
——Jon Skeet, Staff Developer Relations Engineer, Google