协议:您下一个 API 文档站点的美丽起点

Adam Wathan

经过数月的努力,我很高兴终于发布我们的下一个网站模板—— 协议,这是一个美丽的入门套件,用于构建惊人的 API 参考网站。

了解关于协议模板

基于 Next.js 和 MDX,并使用 Tailwind CSS 进行样式设计,它的构建方式正是我们构建自己 API 参考文档的方式。

可以玩一下 实时演示,或者如果您拥有 Tailwind UI 的全访问许可证,可以 下载源代码——当然,这是对全访问客户的免费更新。

设计细节丰富

像往常一样,我们在设计上乐在其中,并在这些细节上增加了一层额外的打磨,使浏览网站变得更加愉悦。

我们有粘性代码块,在您查看该端点的请求和响应详细信息时保持在视图中:

主页卡片上还有这种美丽的悬停效果——它跟随您的鼠标光标,显示出一种渐变光辉,揭示出微妙的背景图案:

不过,我最喜欢的细节必须是侧边导航,它跟踪可见的页面内容,但使用一种“迷你地图”策略,所有可见的页面部分都被高亮显示:

在您滚动页面时观看这个动画真的是一场视觉盛宴——感谢 Framer Motion 一如既往地完成这项繁重的工作。即使我绝对讨厌 React,我也肯定会使用它,仅仅是为了使用这个库,实在是太棒了。

我们希望的开发者体验

我们花了很多时间决定如何连接这个项目的实际内容。我们探索了多种使用不同标准自动生成文档的选项,但就我个人而言,这一切感觉都有点限制。

我个人希望能够准确写出我想要的文档。因此,对于 Protocol,我们优化了最大控制,但提供了很多写作便利,使您能够快速准确地写出您想要的内容。

您可以用 MDX 编写端点文档,快速混合我们提供的一些小组件来构建结构:

messages.mdx
## 创建一条消息 {{ tag: 'POST', label: '/v1/messages' }}
<Row>
<Col>
发布一条新消息到特定对话中。
### 必需属性
<Properties>
<Property name="conversation_id" type="string">
消息所属对话的唯一标识符。
</Property>
<Property name="message" type="string">
消息内容。
</Property>
</Properties>
</Col>
<Col sticky>
<CodeGroup title="请求" tag="POST" label="/v1/messages">
```bash {{ title: 'cURL' }}
curl https://api.protocol.chat/v1/messages \
-H "Authorization: Bearer {token}" \
-d conversation_id="xgQQXg3hrtjh7AvZ" \
-d message="你就是法国人所说的 'les incompetents.'"
```
```js
import ApiClient from '@example/protocol-api'
const client = new ApiClient(token)
await client.messages.create({
conversation_id: 'xgQQXg3hrtjh7AvZ',
message: '你就是法国人所说的 'les incompetents.'',
})
```
</CodeGroup>
```json {{ title: '响应' }}
{
"id": "gWqY86BMFRiH5o11",
"conversation_id": "xgQQXg3hrtjh7AvZ",
"message": "你就是法国人所说的 'les incompetents.'",
"reactions": [],
"created_at": 692233200,
}
```
</Col>
</Row>

这将生成如下的文档:

MDX 源生成的文档示例

为了真正完善编写体验,我们甚至构建了 mdx-annotations——一个新库,将我们在使用 Markdoc 时喜爱的注释功能引入到 MDX。

它让您可以通过使用一个对象对标记进行注释,将 props 传递到 MDX 内容中的标签中,如下标题所示:

## 创建一条消息 { tag: 'POST', label: '/v1/messages' }

...这将被转换为以下 JSX:

<Heading level={2} tag="POST" label="/v1/messages">
创建一条消息
</Heading>

这使您可以更加快速地进行编写,因为您可以继续使用 Markdown,而不必深入到原始 JSX 中仅仅是为了传递一些额外的数据。

可调适的设计

我认为这个模板将对很多人非常有用,因此对我们来说,能够轻松自定义设计以匹配您品牌的样式非常重要。

我们故意设计了我们在网站中使用的插图背景图案,使其对基本上任何人都感觉“与品牌契合”——您可以看出这是专业设计师的作品,但它简单,并且主题偏向于“技术”,这正是所有 API 参考网站共通的特点。

包含在该模板中的插图背景图案

我们在代码中构建了该图案,而不是将其作为已经包含所有颜色的数据的资产输出,因此很容易调整以匹配您自己的配色方案。

在语法高亮方面,我们使用了 Shiki,搭配 css-variables 主题,使您只需选择 9 种颜色即可轻松更新语法高亮以符合您的品牌:

:root {
--shiki-color-text: theme("colors.white");
--shiki-token-constant: theme("colors.emerald.300");
--shiki-token-string: theme("colors.emerald.300");
--shiki-token-comment: theme("colors.zinc.500");
--shiki-token-keyword: theme("colors.sky.300");
--shiki-token-parameter: theme("colors.pink.300");
--shiki-token-function: theme("colors.violet.300");
--shiki-token-string-expression: theme("colors.emerald.300");
--shiki-token-punctuation: theme("colors.zinc.200");
}

这比尝试从头开始制作您自己的主题要简单得多!

除了我们在演示中使用的四个图标外,我们还包含了其他 24 个图标,用于一些常见的 API 资源类型:

看看这个截图,我们将协议模板调整为如果它被我们的朋友 ConvertKit 用于提供他们的 API 参考时的样子:

乍一看,确实看起来很不一样,但当您仔细查看时,其实没有发生太多变化——只是更新了一些按钮和链接的颜色、徽标、调整插图中的渐变,并选择了一些不同的语法高亮颜色。

暗黑模式

自然,网站包括暗黑模式支持——它是为开发者设计的,您真的认为我们可能这么无知吗?您绝对不会原谅我们。

协议模板在暗黑模式下的设计

暗黑模式版本同样具有许多独特的设计细节——例如,我喜欢不同的主要按钮处理。

集成 Algolia DocSearch 的命令面板

我们喜欢 Algolia 进行文档搜索,我们在 Tailwind CSS 网站以及我们的 Syntax 模板中使用它。

这次我们也为协议做好了准备,但这次使用的是 Algolia 的无头 自动完成库,所以我们可以完全控制搜索用户界面:

这种方法的好处是我们可以使用常规的工具类来样式化所有内容,而不必编写自定义 CSS 来样式化一个已经被样式化的部件,这在 Tailwind CSS 项目中感觉更“正确”。


这就是全部——这是完成 2022 年的最后一个 Tailwind UI 模板!我们还有 另一个 几乎准备好了,因此请在新的一年关注它。即将分享一些令人兴奋的 Tailwind CSS v4.0 新闻!

Get all of our updates directly to your inbox.
Sign up for our newsletter.