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_BUCKETguarda os documentos OpenAPI que você envia. Veja Variáveis de ambiente do Flowker. - Um workflow em status
draftpara editar. Um workflow ativo fica travado. Desative ele primeiro, depois mova o workflow inativo paradraftantes de editar e ativar de novo.
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.
Onde a credencial fica
O segredo dentro deconfig.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 listaallowedHosts 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 entradaschemaBindings 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.
Exemplo de requisição
Exemplo de requisição
id da nova configuração. Guarde ele. A Etapa 4 coloca ele no providerConfigId de cada nó que chama este serviço.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_urlquando a configuração define esse campo, caso contrário a primeira entradaserversutilizável do documento, unida comoperation_path. - Um parâmetro
pathpega o valor dele primeiro dos dados resolvidos do nó e, em segundo lugar, do corpo da requisição. Cada parâmetropathprecisa de um valor. - Um parâmetro
queryouheaderresolve 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, comFLK-0954. Um valor estático deconfig.headersou a autenticação configurada pode satisfazer um parâmetro de header obrigatório. - O corpo da requisição com o
request_formatpadrão (json) é o que o seuinputMappingmonta. Comxml_converted, o Flowker serializa esse objeto mapeado como XML. Comxml_passthrough, o Flowker ignora o mapeamento e encaminha os bytes XML originais do gatilho de webhook. Escreva cadatargetexatamente 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.
Exemplo: um workflow que chama duas operações do documento
Exemplo: um workflow que chama duas operações do documento
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.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.
Versões de spec para os serviços do catálogo
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:
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.

