Introdução¶
Target:
typescript_nodeserver
Maturidade: Estável
Para criar um servidor em Node.js você deve criar um projeto em TypeScript e instalar o pacote npm @sdkgen/node-runtime
. Instale também o @sdkgen/cli
para ter acesso aos comandos de terminal para gerar código. Descreva a sua API em arquivos .sdkgen
. A sugestão é criar um arquivo api.sdkgen
contendo as definições ou importando os demais arquivos que contém essas definições de tipos e funções.
Adicione este script ao seu package.json:
{
"scripts": {
"sdkgen": "sdkgen src/api.sdkgen -o src/api.ts -t typescript_nodeserver"
}
}
Com isso você poderá executar npm run sdkgen
para gerar novamente o arquivo src/api.ts
a partir do src/api.sdkgen
.
Estrutura do arquivo gerado¶
O arquivo api.ts
gerado pelo sdkgen é um módulo que importa @sdkgen/node-runtime
(por isso precisa estar instalado) e exporta alguns tipos/objetos:
- Cada um dos enums e tipos compostos são definidos e exportados. Os tipos compostos são representados como interfaces e os enums como união de strings literais dos seus valores possíveis.
- Para cada um dos erros definidos na descrição é criada uma classe estendida a partir de
Error
para que você possa utilizar comthrow
. - Uma classe
ApiConfig
com a qual você pode criar uma instância da configuração da API (descrito em mais detalhes abaixo). - Uma constante nomeada
api
, que é uma instância deApiConfig
.
Uso do sdkgen com um servidor HTTP existente ou Cloud Functions¶
O sdkgen expõe o método handleRequest
na sua instância do SdkgenHttpServer
, abrindo a possibilidade de utilizar o sdkgen com um servidor HTTP existente, como o Express ou, ainda, com uma Cloud Function.
import { SdkgenHttpServer } from "@sdkgen/node-runtime";
import { createServer } from "http";
import { api } from "./api";
const sdkgenServer = new SdkgenHttpServer(api, {});
// Primeira possibilidade: uso com um servidor HTTP existente:
const httpServer = createServer();
httpServer.on("request", sdkgenServer.handleRequest);
httpServer.listen(8080);
// Segunda possibilidade: uso com uma Cloud Function:
exports.api = sdkgenServer.handleRequest; // Aqui, será criada uma Cloud Function com o nome "api", que funciona normalmente como uma API em sdkgen.