OpenAPI & Gerador de Serviço
Script Node opcional fornecido separadamente do cliente HTTP Core. Usado apenas ao gerar tipos TypeScript e arquivos de serviço a partir do JSON OpenAPI/Swagger.
Funcionalidade opcional: não necessária para uso do Core
Usuários comuns de @byeolnaerim/typed-rx-http, /next ou /rsocket não precisam executar este script e não precisam instalar openapi-typescript em seu projeto.
Isolamento da dependência openapi-typescript
A geração de tipos OpenAPI requer o CLI openapi-typescript, mas o pacote não o inclui nas dependências comuns. As devDependencies.typescript do typed-rx-http mantêm a versão 6.0.3 do TypeScript, e o script auto node OpenAPI usa um ambiente temporário npx separado.
Na fase básica de geração do OpenAPI, openapi-typescript e [email protected] são executados juntos, portanto, não altera ou usa a versão do TypeScript/openapi-typescript instalada no projeto do usuário.
Se necessário, o comando completo pode ser fixado como openApiTypescriptCommand.
Ou você pode apenas alterar a versão do pacote que compõe o comando básico.
Primeiro: prepare o arquivo do projeto que commonServiceFile apontará.
Antes que commonServiceFile apareça no exemplo do gerador, você deve entender este arquivo primeiro. commonServiceFile é o caminho do arquivo que possui as funções HTTP comuns que o serviço gerado importará, não é uma opção que cria arquivos. O nome do arquivo pode ser escolhido livremente, como rxjsHttpService.ts, commonService.ts, etc.
Código completo mínimo funcional
O arquivo abaixo cria uma vez o createHttpClient no projeto e exporta callApi e callApiStream para reutilização pelo serviço gerado. Se cache ou autenticação de sessão não forem necessários, você pode começar com esta estrutura.
rxjsHttpService.ts
tsCódigo completo incluindo cache de sessão/CSR/SSR
Se o serviço gerado usar callApiClientCache ou callApiServerCache, ou se você quiser tratar cabeçalhos por solicitação e autenticação de sessão de forma comum no Next.js, expanda para a forma completa a seguir.
rxjsHttpService.ts
tsMétodo de execução
Arquivos gerados
As configurações padrão geram os arquivos abaixo.
apiUnionArrays.tsgera não apenas enums de schema OpenAPI, mas também arrays constantes readonly de enums de parâmetros de query, path, header e cookie, além de processar os items.enum de parâmetros de query array.
Opcional: conectar o Swagger do backend ao commonService do projeto
A partir daqui, um exemplo de como conectar o gerador ao projeto real. WebFlux/webflux-fe-dev-assistant é apenas uma das maneiras de fornecer Swagger, não é uma dependência obrigatória.
Preparar documentação Swagger
O Swagger pode ser do Springdoc, de outras ferramentas OpenAPI ou de arquivos escritos manualmente. Se você usar o endpoint funcional do WebFlux, webflux-fe-dev-assistantVocê também pode usar a forma de fornecer documentação Swagger.
Exemplo de geração especificando opções no projeto
Você pode especificar o endpoint do backend, o swagger.json a ser salvo, o caminho de saída de tipos/serviços e commonServiceFile de acordo com a estrutura do projeto.
generateSwagger.cjs
jsEm ambientes onde não é possível receber documentos via HTTP, você pode usar junto com as mesmas opções de saída. generateSwaggerFromFilepara isso.
commonServiceFile é o caminho de importação
commonServiceFileé o caminho do arquivo que possui as funções callApi, callApiStream e o wrapper de cache que o serviço gerado importará. O gerador não é uma opção para criar ou sobrescrever este arquivo.
ApiBusinessService.ts
tsExemplo de onde os resultados da geração são colocados no projeto
Um arquivo público designado como commonServiceFile, como rxjsHttpService.ts, é gerenciado diretamente pelo projeto. Os resultados abaixo de auto e @types/auto são regenerados quando o documento muda.
Regras de nome de arquivo e função
O nome do arquivo de serviço é determinado pelos dois primeiros segmentos da URL, e o nome da função é determinado a partir do terceiro segmento. Variáveis de caminho são incluídas no nome da função no formato By + PascalCase.
GET /api/business/workplaces/search
ApiBusinessService.ts → workplacesSearch({ params })
GET /api/business/workplaces/{id}
ApiBusinessService.ts → workplacesById({ path })
GET /api/orders/history/search
ApiOrdersService.ts → historySearch({ params })
POST /oauth2/login
Oauth2LoginService.ts → post({ body })
Argumentos de chamada da função de geração
GeneratedServiceUsage.tsx
tsxAs chaves dos parâmetros de query do serviço gerado são params, as variáveis de caminho são path, e o corpo da solicitação é body. Dentro da função de geração, cada um é convertido em ServiceArguments de queryString, pathVariable e body.