API:如何让开发人员编写他们不会讨厌的代码
介绍
啊,API——开发人员之间写的情书(有时是用一种没人能理解的神秘语言写的)。无论您是编写优雅的方法交响曲,还是发布一堆难以阅读的意大利面条式代码,本指南都将帮助您设计不会让您的同事哭泣(或至少不会哭泣)的 API。让我们开始吧!
优秀 API 的特征
1. 易于学习和记忆
好的 API 应该非常简单,甚至你的祖母都可以使用它。如果你的 API 感觉像需要火箭科学博士学位,那你就做错了。假设你正在构建一个计算器 API。
**糟糕的 API 示例**:
calculate(1, "plus", 2, { round: false, mode: "basic", verbosity: "low" });
“呃,什么?我为什么需要知道基本加法的详细程度?”
**良好的 API 示例**:
calculator.add(1, 2); // Ah, so simple even my pet goldfish gets it!
2. 代码更易读
可读的 API 是那些你可以浏览而不需要质疑你的生活选择的 API。
**讽刺场景**:想象一下,凌晨 2 点,你一手拿着咖啡,一手绝望地调试代码。你更喜欢哪种代码?
**糟糕的 API 示例**:
const res = x.A(1, 2).B(3).C(); // What is A? What is B? Are we building a spaceship or solving math?
**良好的 API 示例**:
const result = calculator.add(1, 2).multiply(3).getResult(); // Ah, now I know what I’m doing. I'm multiplying happiness.
3. 难以滥用
容易被滥用的 API 就像一台吞食你钱财的自动售货机。让我们保护开发人员免受自身伤害。
**糟糕的 API 示例**:
calculator.add("apple", "banana"); // Hmm, should this work? It does. But why?
**良好的 API 示例**:
calculator.add(1, 2); // Only numbers allowed, sorry fruit enthusiasts.
当然,还会抛出一个尖叫的错误:
“参数类型无效:我们接受数字,而不是您的购物清单!”
设计过程
4.了解要求
在编写任何代码之前,请问自己:
**示例**:如果用户需要 `Todo API`,就不要构建火箭发射器 API。保持专注。
5. 首先编写用例
有没有试过不借助说明书就组装宜家家具?编写没有用例的代码有点像那样,但更糟糕。
**用例**:
// BEFORE implementation: todo.addTask("Write blog").completeTask(1).deleteTask(1);
现在,构建与之匹配的 API。没有多余的内容,也没有过度设计。
6. 准备扩展
不要创建一个僵化的 API,因为当有人想要添加某个功能时,它就会崩溃。
**可扩展 API 示例**:
interface Calculator { add(a: number, b: number): Calculator; subtract(a: number, b: number): Calculator; withOptions(options: { precision?: number; mode?: "basic" | "scientific" }): Calculator; }
7. 有疑问时,就放弃吧
开发人员喜欢添加功能,就像添加配料一样。但有时,最好的配料就是什么都没有。
**讽刺例子**:
// Bad API with unnecessary features: todo.addTask("Cook dinner", { priority: "urgent", notifyVia: "pigeon", withEmojis: true });
真的吗?表情符号和鸽子通知?冷静点。
设计指南
8. 选择不言自明的名称
您的 API 应该非常清晰,甚至 5 岁的孩子都可以解释它。
**坏例子**:
t.api(1, "xyz"); // What is this sorcery?
**好的例子**:
todo.addTask("Learn TypeScript").completeTask(1);
看到了吗?简洁明了,让你看起来很聪明。
9.避免使用缩写
缩写是 Twitter 的,而不是 API。
**坏例子**:
usrMgmt.addUsr("John");
这是拼写错误还是代码?
**好的例子**:
userManagement.addUser("John");
10. 最好的 API 就是没有 API
有时,简单意味着根本不要编写 API。没有它你能解决问题吗?如果可以,那就这样做。
**例子**:
无需使用自定义的 `fetchData` API,只需使用:
fetch("https://example.com/data").then((res) => res.json());