# Example 5 - Full Transactional Data Flow (HTTP)

This example demonstrates a complete FlowSync implementation that creates a bridge between an external DNS service and a local endpoint. The configuration establishes a transaction flow where requests to resolve DNS entries are processed through dns.google. This request requires a `name` as the request parameter and returns dns details. The service exposes a south-side HTTP endpoint at `../dns/resolve` that accepts DNS requests, forwards them to dns.google, and returns the results through the FlowSync mechanism.

* To call the HttpNode in the example below, run the following command:

{% code lineNumbers="true" %}

```yaml
curl --insecure \
--location 'https://127.0.0.1/data/flowsync/example5?entry=cybus.io' \
--header 'Authorization: Bearer <replace with your token>'
```

{% endcode %}

For more information on the FlowSync configuration properties, see [Cybus:Node](/documentation/services/service-commissioning-files/resources/cybus-node.md#operation).

<figure><img src="/files/eUVYvDsDCX8ofKlmT6py" alt=""><figcaption></figcaption></figure>

{% file src="/files/bzCVnbyS4MoAtBkvP6bv" %}

{% code title="flowsync-example-5-full-transactional-data-flow-http.yaml" lineNumbers="true" %}

```yaml
description: FlowSync - Example 5
metadata:
  name: example 5
  version: 1.0.0
resources:
  # ------------------------------------------------
  # Our Endpoints for dns.google (north side)
  # ------------------------------------------------

  googleDnsConnection:
    type: Cybus::Connection
    properties:
      protocol: Http
      connection:
        scheme: https
        host: dns.google

  dnsEndpoint:
    type: Cybus::Endpoint
    properties:
      topic: dns
      protocol: Http
      connection: !ref googleDnsConnection
      publishError: true
      read:
        path: /resolve

  # ---------------------------------------
  # Our HTTP Server and Nodes  (south side)
  # ---------------------------------------

  server:
    type: Cybus::Server::Http
    properties:
      basePath: /flowsync

  dnsNode:
    type: Cybus::Node::Http
    properties:
      parent: !ref server
      method: GET
      route: /example5
      operation: transaction

  # ------------------------------------------------
  # The mappings forwarding requests and responses
  # ------------------------------------------------

  Mapping:
    type: Cybus::Mapping
    properties:
      mappings:
        - subscribe:
            endpoint: !ref dnsNode
          publish:
            endpoint: !ref dnsEndpoint
          rules:
            - transform:
                expression: >-
                  (
                    {
                      "id": $.id,
                      "query": {
                         "name": $.value.query.entry
                      }
                    }
                  )
        - subscribe:
            endpoint: !ref dnsEndpoint
          publish:
            endpoint: !ref dnsNode
          rules:
            - transform:
                expression: >-
                  (
                    {
                      "id": $.id,
                      "timestamp": $.timestamp,
                      "value" : $.value
                    }
                  )
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cybus.io/documentation/services/flowsync/flowsync-example-5.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
