受 TypeScript 启发,微软又搞了一个神器!

TypeSpec 是什么

TypeSpec[1] 是一种高度可扩展的语言,可轻松描述 RESTOpenAPIgRPC 和其他协议中常见的 API 结构。TypeSpec 在生成多种不同的 API 描述格式、客户端和服务端代码、文档等方面表现出色。有了 TypeSpec,你就可以摆脱那些拖慢你速度的手写文件,并在几秒钟内生成符合标准的 API Schemas。

TypeSpec 的特点

  • 简洁轻量:受 TypeScript 的启发,TypeSpec 是一种极简语言,可帮助开发人员以熟悉的方式描述 API。
  • 易集成:编写 TypeSpec,发布为各种格式,快速与其它生态系统集成。
  • 支持多种协议:TypeSpec 标准库支持主流的 OpenAPI 3.0,JSON Schema 2020-12,Protobuf,和 JSON RPC 等协议。
  • 功能强大:受益于庞大的 OpenAPI 工具生态系统,可用于配置 API 网关、生成代码和验证数据。
  • 保证数据一致性:定义要在 API 中使用的通用模型,使用 JSON Schema 发射器获取类型的 JSON Schema,并使用它们验证数据。
  • 友好的开发体验:在 VSCode 和 Visual Studio 编辑器中为了 TypeSpec 提供了全面的语言支持。比如,语法高亮、代码补全等功能。

TypeSpec 使用示例

生成 OpenAPI 描述文件

生成 JSON Schema

生成 Protobuf

TypeSpec Playground

要快速体验 TypeSpec 的功能,推荐你使用 TypeSpec 官方提供的 playground[2]。该 playground 预设了 API versioningDiscriminated unionsHTTP serviceREST frameworkProtobuf KioskJson Schema 6 个不同的使用示例,并支持 FileSwagger UI 两种视图。

File 视图

Swagger UI 视图

TypeSpec 快速上手

1.安装 @typespec/compiler 编译器

npm install -g @typespec/compiler

2.安装 VSCode 扩展

在 VSCode 中搜索 TypeSpec 安装 TypeSpec for VS Code 扩展,或在浏览器中打开 TypeSpec for VS Code[3] 网址后点击 Install 按钮。

3.创建 TypeSpec 项目

首先新建一个新的目录,然后在项目的根目录下执行以下命令:

tsp init

4.安装项目依赖

tsp install

成功执行上述命令后,在当前目录下会生成以下目录结构:

.
├── main.tsp
├── node_modules
├── package-lock.json
├── package.json
└── tspconfig.yaml

之后,打开 main.tsp 文件,输入以下代码:

import "@typespec/http";

using TypeSpec.Http;
@service({
  title: "Widget Service",
})
namespace DemoService;

model Widget {
  @visibility("read""update")
  @path
  id: string;

  weight: int32;
  color: "red" | "blue";
}

@error
model Error {
  code: int32;
  message: string;
}

@route("/widgets")
@tag("Widgets")
interface Widgets {
  @get list(): Widget[] | Error;
  @get read(@path id: string): Widget | Error;
  @post create(...Widget): Widget | Error;
  @patch update(...Widget): Widget | Error;
  @delete delete(@path id: string): void | Error;
  @route("{id}/analyze"@post analyze(@path id: string): string | Error;
}

完成输入后,运行 tsp compile . 命令执行编译操作。成功编译后,在 tsp-output/@typespec/openapi3 目录下就会生成 openapi.yaml 文件:

有关 TypeSpec 的相关内容就介绍到这里,如果你想进一步了解 TypeSpec 的基础使用和高级用法,推荐你阅读官方的使用文档[4]

参考资料[1]

TypeSpec: https://typespec.io/

[2]

playground: https://typespec.io/playground

[3]

TypeSpec for VS Code: https://marketplace.visualstudio.com/items?itemName=typespec.typespec-vscode

[4]

使用文档: https://typespec.io/docs


往期推荐


京东一面:浏览器跨标签页通信的方式都有什么?
解锁前端难题:亲手实现一个图片标注工具
开源分享!GPT自动投简历,一周斩获三offer

最后

  • 欢迎加我微信,拉你进技术群,长期交流学习...

  • 欢迎关注「前端Q」,认真学前端,做个专业的技术人...

点个在看支持我吧

相关推荐

  • 今年这情况,我劝各位别轻易离职。。。
  • 阿里开源的 JetCache-Alibaba 缓存框架,来了解一下?
  • 心酸,又是一个铜三铁四。。。
  • 面试官:为什么忘记密码要重置而不是告诉你原密码?
  • 规则引擎与机器学习比较与结合
  • 在AI时代,普通小白如何通过AI赚钱?
  • 半年赚70万,我抓住了视频号的红利
  • 超炫酷,直接上源码!!!Three.js 实现大型风力发电机监控平台!!!
  • 沪语版的桃园三结义是怎么样的?来试试这款自带492种语音的免费文本转语音工具!
  • 聊聊 order by
  • 面试官:说一下TCP和UDP协议的原理和区别?
  • 北漂到底有多绝望?女朋友在字节,年收入250000,我北邮28岁年薪70多万,因为没有户口,导致感情破裂各奔东西!
  • 18 张图手把手教你使用 Canal Adapter 同步 MySQL 数据到 ES8,建议收藏!
  • 大模型放进推荐系统怎么玩?微软亚研全面总结
  • 马斯克的首款多模态大模型来了,GPT-4V又被超越了一次
  • 安徽省委书记:对中国科大有求必应、不讲条件,我和省长随叫随到
  • [开源]企业协同任务管理系统,主流管理工具,一应俱全,开箱即用
  • 文本增强实现统一跨域时间序列预测
  • 实现Vue3响应式系统核心-MVP 模型
  • SpringBoot 动态加载 jar 包,动态配置方案