# Pipeline

A Digibee Integration Platform tem como peça central o *pipeline*, que é uma sequência de componentes que permite conectar sistemas e estabelecer fluxos de dados entre eles.

Um *pipeline* é composto por:

* Um *trigger*
* Pelo menos um componente

{% hint style="info" %}
O *trigger* precisa estar conectado aos componentes.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/cO0A6g1dOsu8BiHYqO67/blobs/uEbP63nCbCQhEkNgJO7Z/trigger-and-component.png" alt="" width="398"><figcaption></figcaption></figure>

O *trigger* é a condição de disparo do *pipeline*, ou seja, é um elemento que define como a execução do *pipeline* será iniciada – por exemplo, através de uma chamada externa, em resposta a um evento ou por um agendamento. Para saber mais, leia a [documentação sobre *Triggers*](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/triggers/overview).

Um componente é um elemento que recebe uma mensagem, podendo interagir ou utilizar as informações contidas nela para executar uma das seguintes atividades:

* Chamar serviços externos, como uma chamada a um endpoint [**REST**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/web-protocols/rest-v2).
* Processar mensagens transformando o conteúdo da mensagem.
* Alterar o fluxo de execução com uma bifurcação que permite direcionar o fluxo do *pipeline* com base em uma condição, como o componente [**Choice**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/logic/choice) faz.
* Percorrer coleções, como o componente [**For Each**](https://app.gitbook.com/s/SKBJ6ZiEWBU93x170HH4/connectors/logic/for-each) faz.

Este último caso é um pouco mais sofisticado e, para entendê-lo, precisamos examiná-lo mais de perto.

Quando você utiliza um componente que itera em coleções, cada item da coleção é processado em um fluxo separado chamado *subpipeline*. Veja a imagem abaixo:

<figure><img src="https://content.gitbook.com/content/cO0A6g1dOsu8BiHYqO67/blobs/vdn1IiCUmiWPjO4W7fXH/[PT]%20pipeline-e-subpipeline.png" alt=""><figcaption></figcaption></figure>

1. A execução do fluxo principal acontece até chegar ao componente onde o *subpipeline* é criado (no exemplo acima, o componente é o **For Each**, que foi nomeado como “Processa registros”).
2. A execução passa para o *subpipeline*, onde cada item da coleção será tratado individualmente.
3. Ao término da execução do item 2, o controle volta ao início do *subpipeline*, que inicia o processamento do próximo item e assim sucessivamente, até que a coleção seja totalmente processada.
4. Uma vez que toda a coleção tenha sido processada, o controle retorna ao componente **For Each,** que direciona o fluxo para o próximo componente do fluxo principal (no caso, o componente **Object Store** nomeado como “Lê todos os dados”).

Para saber mais, leia o artigo[ *Subpipelines*](https://docs.digibee.com/documentation/developer-guide/pt-br/development-cycle/build-overview/pipelines/subpipelines).
