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.

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?