範例
examples/ 底下每個目錄都是一個能直接編譯的專案,含 TypeSpec 原始碼、編譯時用的 tspconfig.yaml,以及編出來的輸出。輸出已經 commit,不必執行任何東西就能對照輸入與輸出。
範例一覽
| 範例 | 內容 |
|---|---|
| Hello world | 最小可用的完整文件。只有 @service 與 @info。 |
| Payload schemas | schema 層的各種形狀:model、scalar、enum、陣列、record,以及它們的限制。 |
| Schema composition | 用既有 schema 組出新 schema 的四種方式,以及沒有專屬 decorator 時用的 @jsonSchemaExtension。 |
| Message metadata | payload 周邊的一切:headers、correlation id、範例、tag 與連結。 |
| Channels and parameters | channel id、位址模板,以及位址宣告的參數。 |
| Servers and security | server、server 變數,以及 server 提供的安全機制。 |
| Request and reply | 三個 operation,以及 AsyncAPI 回覆的兩種形態。 |
| Kafka user signup | 一份真實的 Kafka 契約,四層 Kafka binding 齊全,另有 Avro 與 Protobuf payload。 |
| MQTT bindings | 三個 MQTT decorator,以及通用 @binding 現在唯一適用的名稱類型。 |
| Streetlights | AsyncAPI 官方經典範例的 TypeSpec 版。 |
| Multiple protocols | 同一個應用、同一個 payload model,同時走 Kafka、WebSocket 與 SQS。 |
| HTTP callbacks | webhook 上的 HTTP binding,包含回覆的 statusCode。 |
| Enterprise brokers | AMQP、JMS、IBM MQ 與 Anypoint MQ 用四種方式描述同一個目的地。 |
| Streaming platforms | NATS、Pulsar、Google Cloud Pub/Sub 與 Solace,以及各自的必填欄位。 |
| 規格擴充 | 規格留給作者自己填的 x- 欄位,四種能承載它的物件各一例。 |
| Protobuf payload | 兩個 Protobuf package 走 RabbitMQ,.proto 檔案與文件一起輸出。 |
| Avro schema | 一個訂單領域寫成 Avro schema 檔案,由 tsp-avro 產生,沒有 AsyncAPI 文件。 |
| Avro payload | 兩個 Avro record 走 Kafka,.avsc 檔案與文件寫在一起。 |
執行其中一個
把 repository clone 下來,在想看的目錄裡編譯:
bash
git clone https://github.com/marvin-hsu/tsp-asyncapi.git
cd tsp-asyncapi
pnpm install && pnpm build
cd examples/01-hello-world
pnpm exec tsp compile .emitter 會把 asyncapi.yaml 寫在 main.tsp 旁邊,覆蓋 repository 裡的那一份。接著用 git diff 就能看出你建置出來的結果和 commit 的是否一致。