Function: Basic cURL GET

    +

    Goal: Perform a simple cURL GET using an external REST endpoint.

    • This function basicCurlGet communicates with a public REST service.

    • Requires Eventing Storage (or metadata collection) and a "source" collection.

    • Needs a Binding of type URL Alias (as documented in the Scriptlet).

    • Will operate on any mutation of the KEY "make_curl_request::1".

    • The actual cURL request from the Eventing Function will be equivalent to either of the following (but test to make sure the service is live):

      curl -q -X GET 'https://api.frankfurter.app/latest'
      curl -q -X GET 'https://api.ratesapi.io/api/latest'
    • Only logs the REST response JSON payload to the Application log file.

    • For a more complete example using this public REST endpoint (or to make your own service), refer to External REST via cURL GET.

    • basicCurlGet

    • Input Data/Mutation

    • Output Data/Logged

    // To run configure the settings for this Function, basicCurlGet, as follows:
    //
    // Version 7.1+
    //   "Function Scope"
    //     *.* (or try bulk.data if non-privileged)
    // Version 7.0+
    //   "Listen to Location"
    //     bulk.data.source
    //   "Eventing Storage"
    //     rr100.eventing.metadata
    //   Binding(s)
    //    1. "binding type", "alias name...",   "URL...",                       "misc.",
    //       "URL alias",    "exchangeRateApi", "https://api.frankfurter.app/", "no auth"
    //
    // Version 6.X
    //   "Source Bucket"
    //     source
    //   "MetaData Bucket"
    //     metadata
    //   Binding(s)
    //    1. "binding type", "alias name...",   "URL...",                       "misc.",
    //       "URL alias",    "exchangeRateApi", "https://api.frankfurter.app/", "no auth"
    
    function OnUpdate(doc, meta) {
        // You would typically filter to mutations of interest
        if (meta.id !== 'make_curl_request::1') return;
        try {
            // only make a cURL GET request id we see a mutation on the above KEY
            var request = { path: "latest" }; // easiest API call could supply YYYY-MM-DD
            //  perform the cURL request using the URL alias from the settings
            var response = curl('GET', exchangeRateApi, request);
            if (response.status != 200 && response.status != 302) {
                log("cURL GET failed response.status:",response.status)
            } else {
                log("cURL GET success, response.body:",response.body)
                // optional write to a bucket - requires a binding alias in settings
                // dst_col[meta.id] = response.body;
            }
        } catch (e) {
            log("cURL request had an exception:",e)
        }
    }
    INPUT: KEY make_curl_request::1
    
    {
      "anything": 1
    }
    2021-07-18T18:13:57.566-07:00 [INFO] "cURL GET success, response.body:"
    {
        "amount": 1,
        "base": "EUR",
        "date": "2021-07-16",
        "rates": {
            "AUD": 1.5907,
            "BGN": 1.9558,
            "BRL": 6.0146,
            "CAD": 1.4856,
            "CHF": 1.0853,
            "CNY": 7.6373,
            "CZK": 25.538,
            "DKK": 7.4381,
            "GBP": 0.85298,
            "HKD": 9.1684,
            "HRK": 7.4968,
            "HUF": 359.73,
            "IDR": 17083,
            "ILS": 3.8796,
            "INR": 88.03,
            "ISK": 145.9,
            "JPY": 130.03,
            "KRW": 1347.94,
            "MXN": 23.459,
            "MYR": 4.9681,
            "NOK": 10.3878,
            "NZD": 1.6836,
            "PHP": 59.364,
            "PLN": 4.5867,
            "RON": 4.9285,
            "RUB": 87.52,
            "SEK": 10.2428,
            "SGD": 1.5993,
            "THB": 38.669,
            "TRY": 10.0521,
            "USD": 1.1802,
            "ZAR": 16.984
        }
    }