Skip to main content
O Flowker vem com conectores para os serviços do catálogo dele. O serviço que você quer chamar também pode ser o seu: uma API interna, uma API de parceiro, qualquer coisa com um documento OpenAPI publicado. Você envia esse documento, e um nó de workflow chama as operações dele diretamente. Você faz isso uma vez por documento. Envie ele, crie uma configuração de provedor que aponta para ele, depois enderece uma operação a partir de cada nó que chama o serviço.

Antes de começar


  • O documento OpenAPI 3.x do seu serviço como arquivo, com no máximo 8 MiB, declarando pelo menos uma operação.
  • As credenciais que o seu serviço exige e o método de autenticação que ele espera. Veja Autenticação para os métodos aos quais o Flowker oferece suporte.
  • Um deploy cujo registro de schemas tem armazenamento de blobs configurado. SCHEMA_REGISTRY_S3_BUCKET guarda os documentos OpenAPI que você envia. Veja Variáveis de ambiente do Flowker.
  • Um workflow em status draft para editar. Um workflow ativo fica travado. Desative ele primeiro, depois mova o workflow inativo para draft antes de editar e ativar de novo.
O Lerian Console cobre o mesmo caminho. Em Providers → + Novo Provider → Adicionar sua própria API, você seleciona um documento já enviado e define a URL base e a autenticação. Veja Adicionando um provider.

Etapa 1: Envie o documento OpenAPI


1

Envie o arquivo

Chame Enviar um schema OpenAPI como multipart/form-data com três partes: o file, um name e uma version.
2

Guarde o id

A resposta 201 descreve o que o Flowker leu do arquivo. O id dela é o valor que toda etapa posterior referencia.

Pelo que um documento armazenado é indexado

name e version são seus para escolher, com até 255 caracteres cada. O par é único no seu tenant: enviar o mesmo name e a mesma version de novo responde FLK-0812. O id que o Flowker retorna é um UUID novo a cada envio. Todo o resto referencia esse id, nunca o nome nem a versão. O Flowker faz o parse do arquivo antes de armazenar. Um arquivo que não é um documento OpenAPI 3.x, ou um que não declara nenhuma operação, responde FLK-0900. Um arquivo acima de 8 MiB responde FLK-0901. Os documentos que você envia são apenas seus. Um documento é visível apenas para o tenant que o enviou, e um id de outro tenant nunca resolve.

Etapa 2: Leia as operações que você pode chamar


1

Liste o que você tem armazenado

Listar schemas OpenAPI retorna os seus documentos apenas como metadados, sem o conteúdo deles. É paginado: limit, cursor, sortBy e sortOrder, e a resposta leva nextCursor e hasMore.
2

Leia as operações de um documento

Obter um schema OpenAPI retorna os mesmos metadados mais content (o arquivo armazenado) e operations, uma entrada por operação que o documento declara.Copie o path e o method da operação que você quer. A Etapa 4 coloca eles no nó.
3

Leia os nomes de campo de uma operação

Derivar o schema de uma operação recebe um path e um method e retorna inputSchema para o corpo de requisição application/json da operação e outputSchema para a primeira resposta application/json 2xx dela. Cada um desses campos fica ausente quando o documento não declara esse schema. Para um corpo de requisição que não é JSON, use hasBody, bodyRequired e bodyContentType. Ele também retorna params, uma entrada por parâmetro que a operação declara, cada uma com o name, a localização in e se ela é required.Esses são os nomes de campo que você escreve como alvos e origens de mapeamento na Etapa 4. Os dois parâmetros de query são obrigatórios, e method não diferencia maiúsculas de minúsculas e deve ser um de GET, PUT, POST, DELETE, OPTIONS, HEAD, PATCH ou TRACE. Um path ausente ou um method não reconhecido responde FLK-0304. Um caminho e um método que o documento não declara respondem FLK-0902.

Etapa 3: Aponte uma configuração de provedor para o documento


Chame Criar uma configuração de provedor com kind definido como external_openapi. Esse kind referencia o documento que você enviou em vez de um provedor do catálogo.
O config.headers é armazenado com a configuração de provedor e pode ser retornado por leituras da configuração. Nunca coloque chaves de API, tokens, cookies ou outros segredos ali. Coloque as credenciais em config.auth, cujos valores secretos são apenas de escrita e ficam no backend de segredos configurado.

Onde a credencial fica

O segredo dentro de config.auth é apenas de escrita na criação e na atualização. O Flowker envia ele para o seu backend de segredos e remove ele do documento de configuração antes de salvar o documento. O Flowker resolve o segredo a partir do backend em tempo de execução. Para uma configuração external_openapi, a busca por id não resolve nem retorna os valores secretos em config.auth. Mantenha as credenciais em config.auth. Uma leitura pode retornar outros valores de configuração. Para rotacionar um segredo depois, envie o novo valor em uma atualização. Para manter o atual, omita o campo ou envie ele em branco enquanto auth.type continua o mesmo. Veja Autenticação.

Onde as listas de hosts permitidos são definidas

As duas listas de permissão pertencem a esta chamada de criação e, depois, a Atualizar uma configuração de provedor. A lista allowedHosts nomeia os hosts que cada nó que chama por esta configuração pode alcançar. O Flowker confere a URL da requisição e cada salto de redirecionamento contra ela em tempo de execução. Uma entrada com ponto inicial casa com subdomínios, então .acme-kyc.example.com casa com api.acme-kyc.example.com. As entradas são apenas nomes de host, sem IP literal, sem curinga e sem porta. allowedPrivateHosts é a lista complementar para um serviço que fica em uma rede privada. Ela não sobrescreve allowedHosts: quando allowedHosts não está vazia, ela também deve incluir o host privado. Uma entrada allowedPrivateHosts correspondente apenas levanta o bloqueio de IP privado ou de loopback. Endereços de metadados de nuvem e link-local continuam bloqueados.

Vincule o documento

Adicione uma entrada schemaBindings para o documento que você referenciou. Cada entrada nomeia um documento armazenado. Defina type como "openapi" e schemaId com o mesmo id que você colocou em config.openapi_schema_id. O array operations opcional delimita o vínculo armazenado. O Flowker valida esse array contra o documento quando você salva a configuração. Esse array não verifica o que os nós de workflow chamam, e não limita um nó external_openapi em tempo de execução. O nó usa config.openapi_schema_id, operation_path e operation_method. O vínculo é o que torna visíveis os dependentes do documento. Com ele, Listar recursos que referenciam um schema OpenAPI informa esta configuração, e uma exclusão do documento é recusada enquanto a configuração está ativa. Veja Removendo um documento. O Flowker resolve cada vínculo quando você salva. Um schemaId que não nomeia nenhum documento no seu tenant responde FLK-0942, e uma entrada operations que o documento não declara responde FLK-0943, cada um nomeando a entrada que falhou. Uma entrada malformada responde FLK-0293. Malformada significa um type desconhecido, um schemaId que não é um UUID, operations em um vínculo que não é openapi, ou uma operação sem caminho ou sem método.
A resposta retorna o id da nova configuração. Guarde ele. A Etapa 4 coloca ele no providerConfigId de cada nó que chama este serviço.
O Flowker confere a configuração antes de armazenar. Um config sem openapi_schema_id, ou um cujo valor não é um UUID, responde FLK-0946. Um id que não nomeia nenhum documento no seu tenant responde FLK-0947. Um bloco config.auth que o Flowker não consegue ler (um tipo desconhecido, ou um tipo sem um dos campos obrigatórios dele) responde FLK-0948. Um bloco config.headers malformado responde FLK-0955. O Flowker não chama a sua API de destino aqui. Ele lê o documento referenciado e, quando config.auth contém um segredo, escreve esse segredo no backend de segredos configurado antes de persistir a configuração.

Etapa 4: Enderece uma operação a partir de um nó de workflow


Um nó executor nomeia uma operação do documento com dois campos no data dele, ao lado do providerConfigId da configuração da Etapa 3. Não envie executorId em um nó desses. O Flowker resolve a configuração de provedor, reconhece o kind e preenche o campo por você antes de validar o workflow. O caminho de salvamento pode persistir um nó sem um dos campos de operação, mas a execução então falha com FLK-0950 antes de o Flowker enviar uma requisição. Todos os outros campos do nó se comportam como Referenciar a configuração de provedor a partir de um nó de workflow descreve.

Como a requisição é montada

O Flowker lê a operação do documento armazenado em tempo de execução e monta a requisição a partir dela:
  • O destino é config.base_url quando a configuração define esse campo, caso contrário a primeira entrada servers utilizável do documento, unida com operation_path.
  • Um parâmetro path pega o valor dele primeiro dos dados resolvidos do nó e, em segundo lugar, do corpo da requisição. Cada parâmetro path precisa de um valor.
  • Um parâmetro query ou header resolve do mesmo jeito. Um parâmetro opcional sem valor fica de fora. Um parâmetro obrigatório sem valor faz o nó falhar antes de qualquer requisição sair do Flowker, com FLK-0954. Um valor estático de config.headers ou a autenticação configurada pode satisfazer um parâmetro de header obrigatório.
  • O corpo da requisição com o request_format padrão (json) é o que o seu inputMapping monta. Com xml_converted, o Flowker serializa esse objeto mapeado como XML. Com xml_passthrough, o Flowker ignora o mapeamento e encaminha os bytes XML originais do gatilho de webhook. Escreva cada target exatamente como o schema de requisição da operação o nomeia. Não há objeto invólucro nem prefixo a acrescentar. Trabalhando com dados de requisição e resposta cobre mapeamentos e transformações por completo.
O nó open-check envia POST https://api.acme-kyc.example.com/v1/checks com o corpo que o inputMapping dele montou. O outputMapping dele levanta dois campos da resposta, então o próximo nó lê ${open-check.checkId}.Um nó que chama GET /v1/checks/{checkId} em vez disso lê o parâmetro do mesmo escopo de nó. Mapeie um valor para checkId, e o Flowker substitui ele no caminho.
Um gatilho de webhook pode validar o payload de entrada contra uma operação do mesmo documento. Defina input_contract como "openapi" e dê ao gatilho openapi_schema_id, operation_path e operation_method. Veja Configurando um gatilho de webhook.

Etapa 5: Rode e confirme que funcionou


1

Ative o workflow

Chame Ativar um workflow. A ativação registra a rota de webhook e resolve o que o contrato do gatilho referencia.
2

Rode ele

Chame Executar um workflow com um header Idempotency-Key novo, ou envie uma requisição para a rota de webhook.
3

Leia os resultados das etapas

Um nó que alcançou o seu serviço registra a resposta sob o próprio id. Com um outputMapping, os nomes mapeados ficam diretamente sob esse id: open-check.checkId. Sem um outputMapping, a saída do nó mantém o envelope da resposta, então o corpo da resposta fica um nível abaixo, sob body.

Publicando uma nova versão do seu documento


Um documento armazenado não muda. Para entregar uma revisão, envie o arquivo de novo sob uma version nova. Isso dá a você um segundo documento armazenado com o próprio id. Enviar um documento novo não muda as configurações existentes. Porém, cada nó executor lê a configuração de provedor dele quando roda. Atualizar config.openapi_schema_id pode mudar o documento usado por nós posteriores de uma execução em andamento, então coordene a virada. Envie o config da configuração de provedor com o id novo por Atualizar uma configuração de provedor. O campo config substitui o mapa armazenado em vez de se fundir a ele. Inclua na mesma chamada os valores base_url e auth configurados que você precisa manter. O Flowker revalida o id novo contra o seu tenant e responde FLK-0947 quando ele não resolve. Verifique Listar recursos que referenciam um schema OpenAPI no documento anterior antes de aposentar ele. A resposta é uma lista de exibição, não um inventário completo: ela retorna até 100 entradas em cada um dos dois grupos dela. Uma configuração de provedor ativa além desse limite de exibição ainda bloqueia a exclusão.
Os serviços do próprio catálogo do Flowker resolvem contra um registro compartilhado e separado de specs publicadas. Três operações gerenciam esse registro. Elas nunca tocam em um documento que você enviou na Etapa 1. A fixação é por tenant. Publicar uma versão não muda nada para um tenant até que esse tenant a fixe. Um envio novo, portanto, nunca move um workflow em execução para uma spec diferente. O Flowker lê a sua versão fixada quando informa os schemas de executor daquele serviço no catálogo, então Obter um executor do catálogo descreve a versão que você escolheu.

Removendo um documento


1

Verifique o que quebraria

Listar recursos que referenciam um schema OpenAPI retorna dois grupos, providerConfigurations e workflows. Os dois estão sempre presentes, cada um leva até 100 entradas, e cada entrada leva um id, um name e um status. É uma lista de exibição, não um inventário completo. Uma configuração de provedor ativa além do limite de exibição ainda bloqueia a exclusão, enquanto uma entrada inativa apenas avisa.
2

Exclua ele

Excluir um schema OpenAPI responde conforme o que ainda referencia o documento:
Para liberar um bloqueio, desabilite a configuração de provedor ou desative o workflow ativo. Mova um workflow inativo para draft apenas se você precisa editar ele.

O que dá errado


Veja a lista de erros do Flowker para todos os códigos.

O que vem depois


Trabalhando com dados de requisição e resposta

Mapeie valores para o corpo de requisição da operação e leia a resposta dela de volta.

Configurando um gatilho de webhook

Valide um payload de entrada contra uma operação do mesmo documento.

Guia de integração

Defina a autenticação, as novas tentativas e o circuit breaker que toda configuração de provedor compartilha.

API de schemas OpenAPI

Conheça os endpoints do registro de schemas.