API: HTTP-pyynnöt

Funktiot HTTP-pyyntöjen tekemiseen ulkoisiin palveluihin ja rajapintoihin.

C++-rekisteröinti: regWeb(js). Toteutus: jsWeb.h + NetCurl.h (libcurl-kääre).


http_get

http_get(url: string) → object

Suorittaa HTTP GET -pyynnön.

Parametrit:

Parametri Tyyppi Kuvaus
url merkkijono Koko URL-osoite protokolloineen (https://...)

Tulos:

Kenttä Tyyppi Kuvaus
status numero HTTP-vastauskoodi (200, 404, 500 jne.)
body merkkijono Vastauksen runko
error merkkijono curl-virheilmoitus tai ""

Esimerkki:

let r = http_get("https://api.example.com/health");

if (r.error) {
    console.log("Pyynnön virhe:", r.error);
} else if (r.status !== 200) {
    console.log("HTTP-virhe:", r.status);
} else {
    let data = JSON.parse(r.body);
    console.log("Vastaus:", JSON.stringify(data));
}

http_post

http_post(url: string, body: string, headers?: string[]) → object

Suorittaa HTTP POST -pyynnön.

Parametrit:

Parametri Tyyppi Kuvaus
url merkkijono Koko URL-osoite
body merkkijono Pyynnön runko (JSON, lomakedata jne.)
headers string[] (valinnainen) HTTP-otsikoiden taulukko

Otsikkomuoto:

["Content-Type: application/json", "Authorization: Bearer TOKEN"]

Tulos:

Kenttä Tyyppi Kuvaus
status numero HTTP-vastauskoodi
body merkkijono Vastauksen runko
error merkkijono Virheilmoitus tai ""

Esimerkkejä:

// Lähetä JSON
let payload = JSON.stringify({ event: "alert", level: "critical" });
let r = http_post(
    "https://api.example.com/events",
    payload,
    ["Content-Type: application/json"]
);
console.log(r.status, r.body);

// Autentikoinnilla
let r2 = http_post(
    "https://api.example.com/data",
    JSON.stringify({ value: 42 }),
    [
        "Content-Type: application/json",
        "Authorization: Bearer my_token_here"
    ]
);

// Ilman otsikoita (esim. lomakedata)
let r3 = http_post(
    "https://example.com/form",
    "name=John&age=30"
);

Webhookien käyttö

Discord

let url = "https://discord.com/api/webhooks/ID/TOKEN";
let r = http_post(url, JSON.stringify({
    content: "Hälytys! Palvelu on alhaalla."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 204 = onnistunut

Slack

let url = "https://hooks.slack.com/services/T.../B.../...";
let r = http_post(url, JSON.stringify({
    text: "Hälytys! Palvelu on alhaalla."
}), ["Content-Type: application/json"]);
console.log(r.status);  // 200 = onnistunut

Telegram

let token = "BOT_TOKEN";
let chatId = "CHAT_ID";
let text = encodeURIComponent("Hälytys! Palvelu on alhaalla.");
let r = http_get(
    "https://api.telegram.org/bot" + token +
    "/sendMessage?chat_id=" + chatId + "&text=" + text
);
let resp = JSON.parse(r.body);
console.log(resp.ok);  // true = onnistunut

Virheenkäsittely

function safePost(url, payload, headers) {
    let r = http_post(url, payload, headers);

    // Verkkovirhe (curl)
    if (r.error) {
        console.log("[VIRHE] Verkkovirhe:", r.error);
        return false;
    }

    // HTTP-virhe
    if (r.status < 200 || r.status >= 300) {
        console.log("[VIRHE] HTTP", r.status, ":", r.body);
        return false;
    }

    return true;
}

HTTP-vastauskoodit

Koodi Merkitys
200 OK
201 Luotu
204 Ei sisältöä (Discord-webhook onnistuminen)
400 Väärä pyyntö
401 Ei valtuutettu
403 Kielletty
404 Ei löytynyt
429 Liian monta pyyntöä (rajoitus)
500 Sisäinen palvelinvirhe