Vodič za REST API

Povezivanje s REST API-jem NowMetrix

Izradite API ključ, sigurno ga šaljite sa svakim zahtjevom i provjerite vezu kratkim odgovorom s kontekstom računa prije nego što zatražite analitičke podatke.

1. Izradite i zaštitite API ključ

Prijavite se u NowMetrix, otvorite Postavke → API i izradite imenovani API ključ za integraciju, primjerice Interna nadzorna ploča ili Google Sheets. Možete imati najviše 10 aktivnih ključeva. Novi ili rotirani ključ kopirajte odmah: njegova se potpuna vrijednost prikazuje samo jednom.

S ključem postupajte kao s lozinkom. Čuvajte ga u poslužiteljskoj varijabli okruženja ili upravitelju tajnama, nikada ga nemojte spremati u sustav za upravljanje izvornim kodom i nikada ga nemojte izlagati u JavaScriptu koji se izvršava u pregledniku.
NOWMETRIX_API_KEY=nm_YOUR_KEY

Preimenovanje ključa ne mijenja njegovu vrijednost. Rotacija ili opoziv jednog ključa utječe samo na taj ključ. Svi ključevi upotrebljavaju dopuštenja svojeg korisnika NowMetrix i dijele ograničenje broja zahtjeva pojedinog trackera.

2. Šaljite ključ sa svakim zahtjevom

REST API je bez stanja: nema zasebnog zahtjeva za prijavu ni trajne sesije. API ključ šaljite kao Bearer token sa svakim HTTPS zahtjevom.

GET https://api.nowmetrix.com/api/me
Authorization: Bearer nm_YOUR_KEY
Accept: application/json
  • Osnovni URL: https://api.nowmetrix.com
  • Autentifikacija: Authorization: Bearer nm_YOUR_KEY
  • Provjera veze: GET /api/me ne zahtijeva parametar trackera.
  • Vremenska ograničenja: u svakom klijentu postavite vremensko ograničenje za povezivanje i odgovor.

3. Provjerite vezu pomoću cURL-a

Upotrijebite cURL za najbržu provjeru veze iz terminala.

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"

Uspješan zahtjev vraća HTTP 200 i trackere dostupne API ključu:

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

PHP 8+

Upotrijebite PHP-ovo proširenje cURL i API ključ čuvajte u varijabli okruženja.

<?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+)

Na poslužitelju upotrijebite ugrađeni fetch API. API ključ nemojte izlagati u JavaScriptu koji se izvršava u pregledniku.

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

Paket requests pruža sažet klijent s izričitim upravljanjem vremenskim ograničenjem i statusom. Instalirajte ga naredbom 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+

Standardni Java HttpClient dovoljan je za autentificirani zahtjev.

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+)

Upotrijebite HttpClient sa zaglavljem autorizacije Bearer i vremenskim ograničenjem na razini aplikacije.

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+

Upotrijebite standardni klijent net/http i dekodirajte JSON odgovor u generičku strukturu ili vlastite tipove.

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+

Rubyjeva standardna biblioteka može poslati zahtjev bez dodatnog HTTP paketa.

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))

Upravljanje pogreškama autentifikacije i prijenosa

Provjerite HTTP status prije dekodiranja uspješnog sadržaja. Odgovori s pogreškom upotrebljavaju stabilnu JSON strukturu sa strojno čitljivim kodom error.code.

  • 401 missing_token: nedostaje zaglavlje Authorization.
  • 401 invalid_token: ključ je nevažeći, opozvan ili zamijenjen.
  • 403 site_not_authorized: ključ nema pristup traženom trackeru.
  • 429 rate_limit_exceeded: prije ponovnog pokušaja pričekajte interval Retry-After.
  • 503: privremene pogreške pozadinskog sustava ponovite uz ograničeno eksponencijalno povećavanje intervala čekanja.
{
  "error": {
    "code": "invalid_token",
    "message": "Bearer token is invalid or revoked."
  }
}

Upotrijebite endpoint za određeni tracker

Iz odgovora na current_tracker pročitajte trackers[].tracker ili vrijednost /api/me, a zatim taj ID trackera proslijedite kao parametar upita site.

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