Panduan REST API

Hubungkan ke REST API NowMetrix

Buat API key, kirimkan dengan aman di setiap permintaan, lalu verifikasi koneksi dengan respons konteks akun sederhana sebelum meminta data analitik.

1. Buat dan lindungi API key

Masuk ke NowMetrix, buka Pengaturan → API, lalu buat API key berlabel untuk integrasi, misalnya Dasbor internal atau Google Sheets. Anda dapat menyimpan hingga 10 key aktif. Segera salin key baru atau key yang baru dirotasi karena nilainya secara lengkap hanya ditampilkan sekali.

Perlakukan key seperti kata sandi. Simpan di variabel lingkungan sisi server atau pengelola secret, jangan pernah memasukkannya ke kontrol versi, dan jangan pernah mengeksposnya dalam JavaScript sisi browser.
NOWMETRIX_API_KEY=nm_YOUR_KEY

Mengganti nama key tidak mengubah nilainya. Merotasi atau mencabut satu key hanya memengaruhi key yang dipilih. Semua key menggunakan izin pengguna NowMetrix masing-masing dan berbagi batas laju setiap tracker.

2. Kirim key di setiap permintaan

REST API bersifat stateless: tidak ada permintaan login terpisah atau sesi persisten. Kirim API key sebagai token Bearer pada setiap permintaan HTTPS.

GET https://api.nowmetrix.com/api/me
Authorization: Bearer nm_YOUR_KEY
Accept: application/json
  • URL dasar: https://api.nowmetrix.com
  • Autentikasi: Authorization: Bearer nm_YOUR_KEY
  • Uji koneksi: GET /api/me tidak memerlukan parameter tracker.
  • Batas waktu: tetapkan batas waktu koneksi dan respons yang pasti di setiap klien.

3. Verifikasi koneksi dengan cURL

Gunakan cURL untuk memeriksa koneksi dengan cepat dari 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"

Permintaan yang berhasil mengembalikan HTTP 200 dan tracker yang tersedia untuk API key:

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

PHP 8+

Gunakan ekstensi cURL PHP dan simpan API key dalam variabel lingkungan.

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

Gunakan fetch API bawaan di server. Jangan mengekspos API key dalam JavaScript sisi browser.

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 menyediakan klien ringkas dengan penanganan batas waktu dan status yang eksplisit. Instal dengan 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 standar Java sudah memadai untuk permintaan terautentikasi.

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

Gunakan HttpClient dengan header otorisasi Bearer dan batas waktu tingkat aplikasi.

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+

Gunakan klien net/http standar dan dekode respons JSON ke dalam struktur generik atau tipe Anda sendiri.

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+

Pustaka standar Ruby dapat membuat permintaan tanpa paket HTTP tambahan.

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

Tangani kesalahan autentikasi dan transportasi

Periksa status HTTP sebelum mendekode payload yang berhasil. Respons kesalahan menggunakan struktur JSON yang konsisten dengan error.code yang dapat dibaca mesin.

  • 401 missing_token: header Authorization tidak ada.
  • 401 invalid_token: key tidak valid, telah dicabut, atau telah diganti.
  • 403 site_not_authorized: key tidak dapat mengakses tracker yang diminta.
  • 429 rate_limit_exceeded: tunggu interval Retry-After sebelum mencoba lagi.
  • 503: coba lagi kegagalan backend sementara dengan exponential backoff yang dibatasi.
{
  "error": {
    "code": "invalid_token",
    "message": "Bearer token is invalid or revoked."
  }
}

Gunakan endpoint khusus tracker

Baca nilai current_tracker atau trackers[].tracker dari /api/me, lalu teruskan ID tracker tersebut sebagai parameter kueri site.

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