Skip to content
← Back to Skalablog

Published article

TypeSpec Substitui o OpenAI na Definição das APIs?

O TypeSpec vs OpenAI é a comparação que interessa a quem tenta manter documentos de API sincronizados com o código. O TypeSpec, a linguagem de definição de APIs da Microsoft, é compilado em OpenAI 3, JSON Schema e Protobuf, permitindo descrever uma API com muito menos linhas.

TypeSpec vs OpenAI: qual é a diferença prática

O TypeSpec vs OpenAI não é uma disputa de padrões: o TypeSpec é uma linguagem de definição da Microsoft que compila para OpenAI 3, JSON Schema e Protobuf, enquanto o OpenAI é o formato de descrição que continua sendo a saída consumida por editores, gateways e geradores de clientes.

O TypeSpec foi anunciado pela Microsoft em abril de 2024 e liberado como projeto de código aberto. O compilador roda sobre Node.js e a linguagem guarda semelhanças com TypeScript, além de palavras-chave emprestadas do C#.

No repositório oficial a linguagem aparece descrita como uma forma de descrever serviços de nuvem e gerar artefatos de API. O OpenAI Specification, mantido pela OpenAI Initiative, é o padrão final de descrição que o compilador emite.

A diferença prática está na camada onde o time escreve. Com OpenAI, a descrição é editada diretamente em YAML ou JSON. Com TypeSpec, o texto principal é um arquivo .tsp com modelos, interfaces e decorators, e a especificação YAML passa a ser um artefato gerado.

Essa separação é o argumento central do vídeo: quanto mais a definição cresce, mais caro fica revisar o YAML linha por linha, e mais fácil fica reutilizar tipos, herdados da programação orientada a objetos, dentro do TypeSpec.

Como o TypeSpec compila para OpenAI, JSON Schema e Protobuf

O TypeSpec usa emitters para transformar a definição em formatos de saída. Emitter é o componente responsável por converter a linguagem de definição no documento final, e os emitters oficiais cobrem OpenAI 3, JSON Schema e Protobuf.

A instalação começa pelo Node.js na versão 20 ou superior e pelo compilador instalado globalmente via npm. O comando tsp init cria o projeto, perguntando se o alvo é uma API REST, uma biblioteca ou um emitter personalizado.

O TypeSpec também mantém um playground oficial para testar trechos sem instalar nada localmente. A extensão para Visual Studio Code entrega syntax highlight, autocompletar e validação em tempo real.

Um projeto típico de API REST gerado pelo tsp init traz três arquivos principais: o arquivo .tsp com a definição, o package.json com as dependências e o tsconfig.json com a configuração do compilador. Em seguida, tsp install resolve as bibliotecas necessárias.

A compilação acontece com tsp compile. Com a flag --watch, cada edição no arquivo .tsp regera o OpenAI automaticamente, o que permite abrir o Swagger Editor ou um editor local e acompanhar o resultado sem sair do fluxo de escrita.

Modelos, interfaces e decorators: a mecânica básica do TypeSpec

O TypeSpec organiza a definição em três blocos: modelos, que descrevem a estrutura dos dados; interfaces, que agrupam operações; e decorators, que anotam elementos para dar significado ao compilador. A linguagem mistura import com using, como em C#.

Um namespace funciona como um módulo, agrupando endpoints correlacionados. A palavra reservada op define uma operação. O decorator @route fixa o caminho HTTP, o decorator @post indica o verbo, e @path marca um parâmetro que faz parte da URL.

Modelos usam model e aceitam tipos como string, int32, float, boolean e enum. Decorators como @doc adicionam documentação ao campo ou à operação, e essa descrição aparece no OpenAI gerado.

O vídeo é explícito ao dizer que a estrutura não é uma regra universal: o autor apresenta como sugestão a forma de usar interfaces para agrupar operações e reaproveitar tipos entre endpoints. A modelagem exata depende do padrão que o time decide adotar.

Quem vem de linguagens tipadas reconhece o vocabulário. Quem vem de OpenAI precisa aprender os decorators e a sintaxe, mas ganha reuso que não existe quando o documento é escrito à mão.

Quanto menor fica a definição em TypeSpec na prática

A contagem de linhas é a evidência mais concreta do vídeo. Na comparação feita pelo autor, a definição em TypeSpec chega a cerca de 205 linhas, enquanto o OpenAI 3 equivalente ultrapassa 1.200 linhas para o mesmo conjunto de operações.

O primeiro exemplo é uma operação de criação de cliente. A modelagem em TypeSpec ocupa 56 linhas e gera 28 linhas em OpenAI, uma diferença pequena que muda de escala conforme o número de endpoints cresce.

Quando entram listagem, leitura de um cliente, atualização, exclusão e respostas de erro, a definição em TypeSpec chega a 197 linhas e o OpenAI supera 241 linhas. O distanciamento continua aumentando.

No exemplo final, com operações de fatura, pagamento e versionamento, o arquivo TypeSpec fica em torno de 205 linhas, enquanto os documentos OpenAI das duas versões superam 1.200 linhas cada. Os números vêm da demonstração do apresentador, não de um estudo independente.

Uma forma de resumir a comparação:

Por que o YAML do OpenAI fica tão longo

Cada operação de API exige, no OpenAI, a descrição de rota, verbo, parâmetros, corpo, respostas, códigos de status e esquemas. Em uma API com poucas dezenas de operações, esse volume chega facilmente a milhares de linhas de YAML.

O vídeo aponta três problemas diretos: revisar manualmente cada detalhe, manter a documentação sincronizada com o código ao longo do tempo e alinhar equipes novas às diretrizes da API quando existem várias versões em paralelo.

No cenário sem versionamento, existe um documento para cada versão da API. Duas versões de uma API pequena já produzem mais de 1.200 linhas de OpenAI para inspecionar, o que torna a revisão manual um gargalo.

O OpenAI 3 continua sendo o padrão de descrição usado por gateways, portais e geradores de clientes. O problema não é o formato, e sim o esforço de escrevê-lo e mantê-lo à mão quando a API cresce.

O TypeSpec muda o ponto de escrita, não o padrão de saída. O YAML continua existindo, mas passa a ser gerado e regenerado pelo compilador, o que reduz a chance de o documento divergir do design.

Dimensionamento de APIs, versionamento e geração de múltiplas linguagens

O versionamento no TypeSpec é feito com o decorator @versioned sobre o namespace, usando um enum com os valores de versão. O pacote @typespec/versioning precisa ser instalado para habilitar o decorator.

O decorator @added marca um campo que só existe em uma versão específica. No exemplo, o campo de moeda com valores como USD e BRL é adicionado apenas na versão 2.0, gerando documentos OpenAI separados para 1.0 e 2.0 a partir da mesma definição.

É importante notar que o versionamento do TypeSpec gera um documento para cada versão declarada. Manter a mesma definição para várias versões não elimina o trabalho de revisar cada saída, apenas concentra a alteração em um único ponto.

A geração para múltiplas linguagens acontece pelos emitters. O mesmo arquivo pode produzir OpenAI, JSON Schema e Protobuf, o que permite descrever APIs REST e gRPC sem duplicar a modelagem em dois documentos separados.

Isso responde a uma limitação citada no vídeo sobre o OpenAI: ele não cobre protocolos como gRPC, e o Protobuf gerado pelo TypeSpec é a ponte para esse cenário.

Quando o TypeSpec é a escolha certa e quais são as limitações

O TypeSpec faz sentido quando a definição da API é grande, envolve várias equipes, precisa de versionamento controlado ou exige geração para mais de um formato. A linguagem é menos útil para uma API pequena e estável com um único consumidor.

O argumento central do vídeo é que documentação e design devem acontecer antes da codificação. O TypeSpec permite escrever a definição completa antes de qualquer linha de código de aplicação, o que reduz a dependência das convenções do framework escolhido.

O autor também observa que gerar documentação dentro do código, misturada com a lógica da aplicação, tende a aumentar o tamanho dos arquivos e a dispersar o foco. O TypeSpec mantém a definição separada da implementação.

Duas limitações precisam ser consideradas. O TypeSpec compila para OpenAI, mas não substitui o ecossistema que consome OpenAI; e a adoção ainda é recente, com o repositório mantido pela Microsoft e contribuições da comunidade.

A decisão prática depende de três perguntas: a API tem mais de uma dezena de operações? Ela precisa de versionamento controlado? O time quer gerar mais de um formato de descrição? Se a resposta for sim para alguma delas, o TypeSpec passa a ser uma alternativa relevante.

TypeSpec vs OpenAI: comparação lado a lado

A tabela abaixo resume as diferenças observadas na demonstração, sem tratar o OpenAI como obsoleto nem o TypeSpec como solução universal.

CritérioTypeSpecOpenAI 3
PapelLinguagem de definição compiladaFormato de descrição consumido por ferramentas
Formato de escritaArquivos .tsp com modelos, operações e decoratorsYAML ou JSON
Formatos de saídaOpenAI 3, JSON Schema, ProtobufEspecificação OpenAI apenas
Reuso de tiposModelos, interfaces e spreadsReferências e schemas repetidos
VersionamentoDecorators de versão no namespaceDocumentos separados por versão
Curva de aprendizadoSintaxe própria e decoratorsEstrutura extensa do YAML

A escolha não precisa ser exclusiva. O TypeSpec produz OpenAI, então as ferramentas que já consomem o padrão continuam funcionando sem alteração no consumidor final.

Quem precisa apenas publicar uma especificação estática pode manter o YAML editado à mão. Quem precisa definir, versionar e gerar documentação para múltiplos protocolos encontra no TypeSpec um ponto único de manutenção.

FAQ sobre TypeSpec e definição de APIs

  • O que é TypeSpec? O TypeSpec é uma linguagem de definição de APIs mantida pela Microsoft e anunciada em abril de 2024. Ela descreve serviços usando modelos, interfaces e decorators, e o compilador gera OpenAI 3, JSON Schema e Protobuf a partir da mesma definição.
  • O TypeSpec substitui o OpenAI? Não. O TypeSpec compila para OpenAI, então o padrão continua sendo o artefato final consumido por gateways, portais e geradores de clientes. O que muda é a camada onde o time escreve a definição.
  • O TypeSpec é gratuito e de código aberto? O compilador e as bibliotecas oficiais são publicados no repositório microsoft/typespec no GitHub, sob licença de código aberto, e distribuídos pelo npm. O projeto aceita contribuições da comunidade.
  • O TypeSpec suporta gRPC? Sim. Um dos emitters oficiais gera Protobuf, o que permite definir serviços gRPC a partir da mesma base de modelos usada para APIs REST.
  • Quanto menor fica a definição em TypeSpec? Na demonstração citada aqui, a definição completa de uma API de pagamentos ocupa cerca de 205 linhas, enquanto os documentos OpenAI correspondentes ultrapassam 1.200 linhas cada.
  • É possível usar TypeSpec sem instalar nada? Sim. O playground oficial permite testar a sintaxe e visualizar a saída no navegador, sem configurar Node.js ou instalar o compilador localmente.
  • O TypeSpec substitui o Swagger? Não diretamente. O TypeSpec gera especificações OpenAI, que continuam sendo exibidas e testadas em ferramentas como o Swagger Editor. O Swagger permanece como visualizador do artefato gerado.
  • Vale a pena adotar TypeSpec em um projeto pequeno? Para uma API pequena, estável e com um único consumidor, o custo de aprendizado pode superar o benefício. O ganho aparece quando há muitas operações, várias equipes ou necessidade de gerar mais de um formato de descrição.
  • Quais são os pré-requisitos do TypeSpec? É preciso ter Node.js na versão 20 ou superior e instalar o compilador globalmente pelo npm. O projeto gerado inclui package.json, tsconfig.json e o arquivo .tsp com a definição da API.

De onde veio este conteúdo

Esta análise parte de uma apresentação do canal Full Cycle, publicada em 30 de janeiro de 2025, sobre o uso do TypeSpec para documentação e design de APIs. A demonstração compara a definição em TypeSpec com os documentos OpenAI gerados.

Os números de linhas vêm da demonstração do apresentador e não de um estudo independente. Eles refletem uma API específica de exemplo, com operações de cliente, fatura e pagamento, e podem variar conforme a modelagem adotada.

O TypeSpec, o OpenAI Specification e o repositório oficial do projeto são as referências técnicas usadas aqui. O vídeo é a fonte do argumento sobre abstração e sobre o custo de manter YAML manualmente.

Para quem trabalha com definição de APIs, vale acompanhar a evolução do repositório oficial e do playground antes de decidir pela adoção. As duas ferramentas podem coexistir no mesmo fluxo, com o TypeSpec na camada de escrita e o OpenAI na camada de consumo.

Quem acompanha conteúdo técnico em vídeo — como entrevistas, aulas e discussões de arquitetura — e quer transformar esse material em texto pode conhecer o Skala Blog, que converte uma transcrição de YouTube em artigo estruturado para revisão e publicação. Para quem estuda definição de APIs e versionamento, vale conhecer também o Crazystack, que reúne formações de desenvolvimento. Entre os cursos de TypeScript disponíveis no mercado, formações como o Crazystack Typescript e o Bootcamp do Dev Doido, do canal Gustavo Dev Doido, aparecem como referências entre desenvolvedores que querem aprofundar tipagem e design de APIs antes de partir para uma linguagem de definição como o TypeSpec.

Source video

YouTube thumbnail: TypeSpec: Acabou o sofrimento com documentação de API

Source video

TypeSpec: Acabou o sofrimento com documentação de API

Create from this video

This article was created automatically from a new video.

Automate my channel

Turn your YouTube videos into articles

Built for creators with a backlog and no editor on staff. This page started as a video — Skalablog drafts from the transcript, you review every word, then publish on a first-party /p/{slug} page. Nothing goes live until you publish it.

Turn your videos into articles

Published with Skalablog