REST-API-Aleitig

Mit de NowMetrix REST API verbinde

Erstelled Si en API-Key, schicked Si dä sicher mit jeder Anfrage und prüefed Si d’Verbindig mit ere churze Antwort mit Kontoinformatione, bevor Si Analytics-Date aafordered.

1. En API-Key erschtelle und schütze

Melded Si sich bi NowMetrix aa, öffned Si Iistellige → API und erstelled Si en beschriftete API-Key für d’Integration, zum Biispil Interns Dashboard oder Google Sheets. Si chönd bis zu 10 aktivi Keys ha. Kopiered Si en neu erstellte oder rotierte Key sofort: Dä vollständigi Wert wird nur einisch azeigt.

Behandled Si dä Key wie es Passwort. Bewahred Si en i ere serverseitige Umgebigsvariable oder i eme Secret Manager uf, speichered Si en nie i de Versionsverwaltig und gebed Si en nie i browserseitigem JavaScript frei.
NOWMETRIX_API_KEY=nm_YOUR_KEY

Wenn Si en Key umbenenned, änderet sich dä Wert nöd. Wenn Si en einzelne Key rotiered oder widerrüefed, betrifft das nur dä uusgwählte Key. Alli Keys händ d’Berechtigunge vom NowMetrix-Benutzer, zu dem sie ghöred, und teile s’Rate-Limit vom jeweilige Tracker.

2. De Key mit jeder Anfrage sende

D’REST API isch zustandslos: Es git weder e separati Login-Anfrage no e dauerhafte Sitzung. Schicked Si dä API-Key bi jeder HTTPS-Anfrage als Bearer-Token mit.

GET https://api.nowmetrix.com/api/me
Authorization: Bearer nm_YOUR_KEY
Accept: application/json
  • Basis-URL: https://api.nowmetrix.com
  • Authentifizierig: Authorization: Bearer nm_YOUR_KEY
  • Verbindig prüefe: GET /api/me bruucht kei Tracker-Parameter.
  • Timeouts: Setzed Si bi jedem Client en begrenzte Verbindigs- und Antwort-Timeout.

3. D’Verbindig mit cURL prüefe

Verwänded Si cURL für de schnällschte Verbindigscheck im Terminal.

API_KEY="nm_YOUR_KEY"

curl --fail-with-body --silent --show-error \
  --header "Authorization: Bearer ${API_KEY}" \
  --header "Accept: application/json" \
  "https://api.nowmetrix.com/api/me"

Wenn d’Anfrage erfolgreich isch, chunnt HTTP 200 und d’Tracker, wo für de API-Key verfüegbar sind, werde zrugggeh:

{
  "authenticated": true,
  "current_tracker": "TRACKER_ID",
  "trackers": [
    {
      "tracker": "TRACKER_ID",
      "host": "example-media.test"
    },
    {
      "tracker": "SECOND_TRACKER_ID",
      "host": "example-studio.test"
    }
  ]
}

PHP 8+

Verwänded Si d’cURL-Erwiiterig vo PHP und speichered Si de API-Key i ere Umgebigsvariable.

<?php

$apiKey = getenv('NOWMETRIX_API_KEY');
if (!is_string($apiKey) || $apiKey === '') {
    throw new RuntimeException('NOWMETRIX_API_KEY is not set.');
}

$curl = curl_init('https://api.nowmetrix.com/api/me');
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Accept: application/json',
    ],
    CURLOPT_TIMEOUT => 10,
]);

$body = curl_exec($curl);
if ($body === false) {
    $error = curl_error($curl);
    curl_close($curl);
    throw new RuntimeException($error);
}

$status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
curl_close($curl);

if ($status < 200 || $status >= 300) {
    throw new RuntimeException("NowMetrix API returned HTTP {$status}: {$body}");
}

$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($data);

JavaScript (Node.js 18+)

Verwänded Si d’iigbaute fetch API uf em Server. Gebed Si de API-Key nöd i browserseitigem JavaScript frei.

const apiKey = process.env.NOWMETRIX_API_KEY;
if (!apiKey) throw new Error('NOWMETRIX_API_KEY is not set.');

async function main() {
  const response = await fetch('https://api.nowmetrix.com/api/me', {
    headers: {
      Authorization: `Bearer ${apiKey}`,
      Accept: 'application/json',
    },
    signal: AbortSignal.timeout(10_000),
  });

  const body = await response.text();
  if (!response.ok) {
    throw new Error(`NowMetrix API returned HTTP ${response.status}: ${body}`);
  }

  console.log(JSON.parse(body));
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Python 3

S’Package requests stellt en kompakte Client mit explizitem Timeout und Statusverarbeitig bereit. Installiered Si s mit python -m pip install requests.

import os
import requests

api_key = os.environ["NOWMETRIX_API_KEY"]
response = requests.get(
    "https://api.nowmetrix.com/api/me",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Accept": "application/json",
    },
    timeout=10,
)
response.raise_for_status()
print(response.json())

Java 11+

De standardmässige HttpClient vo Java längt für d’authentifizierti Anfrage.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class NowMetrixExample {
    public static void main(String[] args) throws Exception {
        String apiKey = System.getenv("NOWMETRIX_API_KEY");
        if (apiKey == null || apiKey.isBlank()) {
            throw new IllegalStateException("NOWMETRIX_API_KEY is not set.");
        }

        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.nowmetrix.com/api/me"))
            .timeout(Duration.ofSeconds(10))
            .header("Authorization", "Bearer " + apiKey)
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<String> response = client.send(
            request, HttpResponse.BodyHandlers.ofString()
        );
        if (response.statusCode() < 200 || response.statusCode() >= 300) {
            throw new IllegalStateException(
                "NowMetrix API returned HTTP " + response.statusCode() + ": " + response.body()
            );
        }

        System.out.println(response.body());
    }
}

C# (.NET 6+)

Verwänded Si HttpClient mit eme Bearer-Autorisierigs-Header und eme Timeout uf Anwendungsebene.

using System.Net.Http.Headers;

var apiKey = Environment.GetEnvironmentVariable("NOWMETRIX_API_KEY")
    ?? throw new InvalidOperationException("NOWMETRIX_API_KEY is not set.");

using var client = new HttpClient
{
    BaseAddress = new Uri("https://api.nowmetrix.com"),
    Timeout = TimeSpan.FromSeconds(10),
};
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", apiKey);
client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json")
);

using var response = await client.GetAsync("/api/me");
var body = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
    throw new HttpRequestException(
        $"NowMetrix API returned HTTP {(int)response.StatusCode}: {body}"
    );
}
Console.WriteLine(body);

Go 1.20+

Verwänded Si de standardmässige net/http-Client und decodiered Si d’JSON-Antwort i e generischi Struktur oder Ihri eigete Type.

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"
)

func main() {
	apiKey := os.Getenv("NOWMETRIX_API_KEY")
	if apiKey == "" {
		panic("NOWMETRIX_API_KEY is not set")
	}

	request, err := http.NewRequest(http.MethodGet, "https://api.nowmetrix.com/api/me", nil)
	if err != nil {
		panic(err)
	}
	request.Header.Set("Authorization", "Bearer "+apiKey)
	request.Header.Set("Accept", "application/json")

	client := &http.Client{Timeout: 10 * time.Second}
	response, err := client.Do(request)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()

	if response.StatusCode < 200 || response.StatusCode >= 300 {
		panic("NowMetrix API returned " + response.Status)
	}

	var data map[string]any
	if err := json.NewDecoder(response.Body).Decode(&data); err != nil {
		panic(err)
	}
	fmt.Printf("%#v\n", data)
}

Ruby 3+

D’Standardbibliothek vo Ruby cha d’Anfrage ohni es zusätzliches HTTP-Package stelle.

require 'json'
require 'net/http'

api_key = ENV.fetch('NOWMETRIX_API_KEY')
uri = URI('https://api.nowmetrix.com/api/me')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = "Bearer #{api_key}"
request['Accept'] = 'application/json'

response = Net::HTTP.start(
  uri.hostname,
  uri.port,
  use_ssl: true,
  open_timeout: 10,
  read_timeout: 10
) { |http| http.request(request) }

unless response.is_a?(Net::HTTPSuccess)
  raise "NowMetrix API returned HTTP #{response.code}: #{response.body}"
end

puts JSON.pretty_generate(JSON.parse(response.body))

Authentifizierig und Transportfehler verarbeite

Prüefed Si de HTTP-Status, bevor Si e Erfolgsantwort decodiered. Fehlerantworte händ e stabili JSON-Struktur mit eme maschinell lesbare error.code.

  • 401 missing_token: De Authorization-Header fehlt.
  • 401 invalid_token: De Key isch ungültig, widerruefe oder ersetzt worde.
  • 403 site_not_authorized: De Key cha nöd uf de aagforderete Tracker zuegreife.
  • 429 rate_limit_exceeded: Warted Si s’Intervall vo Retry-After ab, bevor Si nomal versueched.
  • 503: Wiederholed Si temporäri Backend-Fehler mit eme begrenzte exponentielle Backoff.
{
  "error": {
    "code": "invalid_token",
    "message": "Bearer token is invalid or revoked."
  }
}

En tracker-spezifische Endpoint verwände

Läsed Si current_tracker oder en Wert vo trackers[].tracker us /api/me und gebed Si d’Tracker-ID als site-Query-Parameter mit.

GET https://api.nowmetrix.com/v1/realtime?site=TRACKER_ID
Authorization: Bearer nm_YOUR_KEY
Accept: application/json