对基于Web的应用程序的基本理解是设计能够正常工作的Web API的良好基础。但如果你的目标是创建一个好的API,那还不够。设计一个优秀的API是一个困难的过程,如果它恰好是你目前的工作,你很可能会感到不知所措。
在开始设计API之前,我们必须了解它的用途。在您手动设计API之前,您应该知道为什么要设计API,如果您需要这个领域的帮助,有很多可用的参考资料。然而,定义你的动机只是第一步,真正的诀窍是在你实现之前一直做正确的设计决定。
成功的API设计意味着设计一个符合其目的的接口。作为API设计师,我们做出的每一个决定都可以决定产品的成败。一些重大决策是在设计过程中做出的,例如API使用的传输协议,或者它支持的消息格式。但除此之外,还有许多相关的辅助决策,例如接口的控制、名称、关联和顺序。当您将所有决策集中在一起时,它们将驱动API使用模式。如果你能做出正确的决定,这个模型将会得到API的完美支持和提升。
如果你要做出正确的设计决策,你可能会先做出错误的决定,然后从中吸取教训。事实上,在你做出正确决定之前,你可能会犯很多错误。它也是迭代的关键,因为没有人可以一次成功,但如果你有足够的机会,你可以接近完美。
很容易说API设计是迭代完成的,但是在实践中很难做到这一点。我们面临的共同挑战之一是,在API发布之后很难改变。事实上,对使用的API进行更改的成本非常高,而且风险很大。或者聚和数据借用Joshua Bloch的话说:“开放api就像钻石;他们是不可变的。”
解决这个问题的一种方法是,每次更改时都不要破坏现有的接口,这是一个好习惯,也是好的API设计的主要原则。但有时破坏性的改变是不可避免的,而根本性的设计变化尤其具有侵略性。
换句话说,我们应该在接口发布之前做出这些更改。在理想的情况下,您应该消除可用性和设计问题,在更改成本变得禁止之前。在当时,只有在第一次发布之前开始迭代并维护频繁的迭代,才能找到并解决问题。
在每次迭代中,我们都有机会评估设计人员的使用。例如,开发人员可以通过使用我们创建的产品实现他的目标吗?这个接口真的可以实现吗?如果我们让其他人使用这个API,他们会有什么感觉?
通过设计和实现多个接口而不发布它们,您应该能够实现最好的API设计。通过审查和测试每个接口,我们将对如何改进最终产品有很好的了解。
但实际上,这种壮观的迭代设计是不可能的。很少有人有足够的时间、金钱和耐心来不断地设计和实现运行的api。对于任何具有一定复杂性的接口,这种迭代设计占用了您太多的时间。
在设计过程的早期,一个更合理的方法是迭代,这些早期设计应该有足够的细节,可以显示出最好的改进的机会,但是如果没有过多的设计,就会导致实现的困难。随着时间的推移,我们可以逐步提高细节(或逼真度),最终得到一个完整的实现。