Οδηγός REST API

Σύνδεση με το NowMetrix REST API

Δημιουργήστε ένα κλειδί API, στείλτε το με ασφάλεια σε κάθε αίτημα και επαληθεύστε τη σύνδεση με μια σύντομη απόκριση που περιέχει τα στοιχεία του λογαριασμού, πριν ζητήσετε δεδομένα αναλυτικών στοιχείων.

1. Δημιουργία και προστασία κλειδιού API

Συνδεθείτε στο NowMetrix, ανοίξτε τις Ρυθμίσεις → API και δημιουργήστε ένα κλειδί API με περιγραφική ονομασία για την ενσωμάτωση, όπως Εσωτερικός πίνακας ελέγχου ή Google Sheets. Μπορείτε να διατηρείτε έως και 10 ενεργά κλειδιά. Αντιγράψτε αμέσως ένα νέο ή ανανεωμένο κλειδί: η πλήρης τιμή του εμφανίζεται μόνο μία φορά.

Αντιμετωπίστε το κλειδί σαν κωδικό πρόσβασης. Αποθηκεύστε το σε μεταβλητή περιβάλλοντος στην πλευρά του διακομιστή ή σε διαχειριστή μυστικών, μην το αποθηκεύσετε ποτέ σε σύστημα ελέγχου εκδόσεων και μην το εκθέσετε ποτέ σε JavaScript στην πλευρά του προγράμματος περιήγησης.
NOWMETRIX_API_KEY=nm_YOUR_KEY

Η μετονομασία ενός κλειδιού δεν αλλάζει την τιμή του. Η ανανέωση ή η ανάκληση ενός κλειδιού επηρεάζει μόνο το συγκεκριμένο κλειδί. Όλα τα κλειδιά χρησιμοποιούν τα δικαιώματα του αντίστοιχου χρήστη στο NowMetrix και μοιράζονται το όριο ρυθμού του tracker τους.

2. Αποστολή του κλειδιού σε κάθε αίτημα

Το REST API δεν διατηρεί κατάσταση: δεν υπάρχει ξεχωριστό αίτημα σύνδεσης ή μόνιμη συνεδρία. Στείλτε το κλειδί API ως διακριτικό Bearer σε κάθε αίτημα HTTPS.

GET https://api.nowmetrix.com/api/me
Authorization: Bearer nm_YOUR_KEY
Accept: application/json
  • Βασικό URL: https://api.nowmetrix.com
  • Έλεγχος ταυτότητας: Authorization: Bearer nm_YOUR_KEY
  • Έλεγχος σύνδεσης: Το GET /api/me δεν απαιτεί παράμετρο tracker.
  • Χρονικά όρια: ορίστε πεπερασμένο χρόνο σύνδεσης και απόκρισης σε κάθε πελάτη.

3. Επαλήθευση της σύνδεσης με cURL

Χρησιμοποιήστε το cURL για τον ταχύτερο έλεγχο σύνδεσης από ένα τερματικό.

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"

Ένα επιτυχές αίτημα επιστρέφει HTTP 200 και τους tracker που είναι διαθέσιμοι στο κλειδί API:

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

PHP 8+

Χρησιμοποιήστε την επέκταση cURL του PHP και αποθηκεύστε το κλειδί API σε μεταβλητή περιβάλλοντος.

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

Χρησιμοποιήστε το ενσωματωμένο fetch API στον διακομιστή. Μην εκθέτετε το κλειδί API σε JavaScript στην πλευρά του προγράμματος περιήγησης.

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

Το πακέτο requests παρέχει έναν σύντομο πελάτη με ρητό χειρισμό του χρονικού ορίου και της κατάστασης. Εγκαταστήστε το με την εντολή 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+

Το τυπικό HttpClient της Java επαρκεί για το αίτημα με έλεγχο ταυτότητας.

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

Χρησιμοποιήστε το HttpClient με κεφαλίδα εξουσιοδότησης Bearer και χρονικό όριο σε επίπεδο εφαρμογής.

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+

Χρησιμοποιήστε τον τυπικό πελάτη net/http και αποκωδικοποιήστε την απόκριση JSON σε μια γενική δομή ή στους δικούς σας τύπους.

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+

Η τυπική βιβλιοθήκη της Ruby μπορεί να εκτελέσει το αίτημα χωρίς πρόσθετο πακέτο HTTP.

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

Χειρισμός σφαλμάτων ελέγχου ταυτότητας και μεταφοράς

Ελέγξτε την κατάσταση HTTP πριν αποκωδικοποιήσετε μια απόκριση επιτυχίας. Οι αποκρίσεις σφαλμάτων χρησιμοποιούν σταθερή δομή JSON με τον κωδικό error.code, σε μορφή αναγνώσιμη από μηχανές.

  • 401 missing_token: λείπει η κεφαλίδα Authorization.
  • 401 invalid_token: το κλειδί δεν είναι έγκυρο, έχει ανακληθεί ή έχει αντικατασταθεί.
  • 403 site_not_authorized: το κλειδί δεν έχει πρόσβαση στον ζητούμενο tracker.
  • 429 rate_limit_exceeded: περιμένετε το διάστημα Retry-After πριν επαναλάβετε το αίτημα.
  • 503: επαναλάβετε τα προσωρινά σφάλματα του backend με περιορισμένη εκθετική καθυστέρηση.
{
  "error": {
    "code": "invalid_token",
    "message": "Bearer token is invalid or revoked."
  }
}

Χρήση endpoint συγκεκριμένου tracker

Διαβάστε την τιμή current_tracker ή trackers[].tracker από το /api/me και, στη συνέχεια, περάστε το ID του tracker ως παράμετρο ερωτήματος site.

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