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:

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

For more information on the FlowSync configuration properties, see Cybus:Node.

flowsync-example-5-full-transactional-data-flow-http.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
                    }
                  )

Last updated

Was this helpful?