Protocol:您下一個 API 文件網站的美好起點

Adam Wathan

經過幾個月的製作,我很高興終於發布我們的下一個網站範本 — Protocol,一個用於構建令人驚嘆的 API 參考網站的美麗入門套件。

Learn about the Protocol template

它由 Next.js 和 MDX 提供支持,並使用 Tailwind CSS 設計樣式,完全按照我們構建自己的 API 參考文件的做法來構建。

如果您擁有 Tailwind UI 全面訪問許可證,可以試玩線上演示下載原始碼 — 當然,這對所有全面訪問客戶來說都是免費更新。

充滿設計細節

像往常一樣,我們在設計上玩得很開心,並且在事物上添加了額外的潤飾層,使其在瀏覽網站時真正令人愉快。

我們有粘性的程式碼區塊,當您捲動瀏覽該端點的請求和響應詳細資訊時,這些程式碼區塊會保持在視圖中。

首頁卡片上也有這種美麗的懸停效果 — 它會跟隨您的滑鼠游標,並以漸層發光來揭示微妙的背景圖案。

我最喜歡的細節還是側邊欄導覽,它會追蹤可見的頁面內容,但使用一種「迷你地圖」策略,其中會突出顯示所有可見的頁面區段。

看著它在您捲動頁面時進行動畫,真是令人賞心悅目 — 感謝 Framer Motion 像往常一樣在這裡進行繁重的工作。 即使我非常討厭 React,我仍然很確定我會使用它只是為了使用這個庫,它真的太棒了。

我們自己想要的開發人員體驗

我們花了很多時間來決定如何在此處連接實際內容。 我們探索了許多不同的選項,以使用不同的標準自動產生文件,但無論如何就我的口味而言,感覺都有點受限制。

就我個人而言,我希望能夠直接編寫我想要的文件。 因此,對於 Protocol,我們針對最大控制進行了優化,同時提供了許多編寫便利,使您可以真正輕鬆地快速編寫您想要的內容。

您可以使用 MDX 編寫端點文件,混合使用我們提供的一些小組件來快速構建內容。

messages.mdx
## Create a message {{ tag: 'POST', label: '/v1/messages' }}<Row>  <Col>    Publishes a new message to a specific conversation.    ### Required attributes    <Properties>      <Property name="conversation_id" type="string">        Unique identifier for the conversation the message belongs to.      </Property>      <Property name="message" type="string">        The message content.      </Property>    </Properties>  </Col>  <Col sticky>    <CodeGroup title="Request" 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="You're what the French call 'les incompetents.'"    ```    ```js    import ApiClient from '@example/protocol-api'    const client = new ApiClient(token)    await client.messages.create({      conversation_id: 'xgQQXg3hrtjh7AvZ',      message: 'You're what the French call 'les incompetents.'',    })    ```    </CodeGroup>    ```json {{ title: 'Response' }}    {      "id": "gWqY86BMFRiH5o11",      "conversation_id": "xgQQXg3hrtjh7AvZ",      "message": "You're what the French call 'les incompetents.'",      "reactions": [],      "created_at": 692233200,    }    ```  </Col></Row>

這將產生如下所示的文件

Example of generated documentation from MDX source

為了真正實現編寫體驗,我們甚至建立了 mdx-annotations — 一個新的函式庫,將我們在使用 Markdoc 時喜歡的註解功能引入 MDX。

它讓您可以通過使用物件註解它們,將屬性傳遞到 MDX 內容中的標籤,例如這個標題

## Create a message { tag: 'POST', label: '/v1/messages' }

...它會轉換為這個 JSX

<Heading level={2} tag="POST" label="/v1/messages">  Create a message</Heading>

這讓您可以更快地移動,因為您可以繼續使用 Markdown 編寫,而不必為了傳遞一些額外的資料而掉入原始 JSX 中。

適應性設計

我認為這個範本對於許多人來說會非常有用,因此對我們來說,重要的是它很容易自訂設計以符合您的品牌。

我們刻意設計了在網站中使用的插圖背景圖案,讓基本上任何人都會覺得「符合品牌形象」 — 您可以看出來它出自專業設計師之手,但它很簡單,並傾向於「技術」主題,這也是所有 API 參考網站都會有的共同之處。

The illustrated background pattern included in this template

我們在程式碼中構建了該圖案,而不是將其匯出為帶有所有內建色彩的資產,因此可以很容易地調整它以符合您自己的配色方案。

對於語法突出顯示,我們使用 Shikicss-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 資源類型

查看此螢幕快照,其中我們已經調整了 Protocol 範本,就像我們的朋友在 ConvertKit 使用它來支持他們的 API 參考一樣

乍看之下看起來很不同,但當您真正深入研究時,實際上這裡並沒有太多變化 — 只是更新了一些按鈕和連結顏色、標誌、調整插圖中的漸層,並選擇了一些不同的語法突出顯示顏色。

深色模式

當然,該網站包括深色模式支援 — 它是為開發人員設計的,您真的認為我們可能如此無知嗎?您永遠不會原諒我們。

The Protocol template design in dark mode

深色模式版本也有許多其自己的酷炫設計細節 — 例如,我喜歡不同的主要按鈕處理方式。

帶有 Algolia DocSearch 整合的命令調色板

我們非常喜歡 Algolia 用於文件搜尋,我們將其用於 Tailwind CSS 網站以及我們的 Syntax 範本中。

我們也為 Protocol 連線了它,但這次使用 Algolia 的無頭 自動完成函式庫,因此我們可以完全控制搜尋 UI

這種方法的好處是,我們可以使用普通的實用程式類別來設計所有內容的樣式,而不是編寫自訂 CSS 來設計已設定樣式的小組件的樣式,這在 Tailwind CSS 專案中感覺更加正確


就是這樣 — 完成 2022 年的最後一個 Tailwind UI 範本! 我們還有 另一個 也快準備好了,因此請在新的一年裡密切關注。 也將很快分享一些非常令人興奮的 Tailwind CSS v4.0 新聞!

直接將我們所有的更新發送到您的收件匣中。
註冊我們的電子報。