ΤΕΚΜΗΡΙΩΣΗ API V2

GenderAPI.io V2: έλεγχος ταυτότητας και δωρεάν δοκιμαστική πρόσβαση IP

Χρησιμοποιήστε το υπάρχον κλειδί GenderAPI.io σας με έλεγχο ταυτότητας Bearer. Μάθετε για το κοινό υπόλοιπο του V1 και του V2, τη δοκιμαστική πρόσβαση IP και τον έλεγχο του τύπου πρόσβασης.

Έλεγχος ταυτότητας και δωρεάν δοκιμαστική πρόσβαση

ΠαράμετροςΤύποςΥποχρεωτικόΠροεπιλογήΠεριγραφή
AuthorizationstringΌχι—Στείλτε Bearer YOUR_API_KEY για να χρησιμοποιήσετε έναν λογαριασμό. Τα κλειδιά που λείπουν ή είναι άγνωστα χρησιμοποιούν την κοινόχρηστη δοκιμαστική πρόσβαση IP.
Content-TypestringΜόνο POST—Στείλτε application/json στα αιτήματα POST.

Στείλτε Authorization: Bearer YOUR_API_KEY από τον διακομιστή σας. Αντικαταστήστε το YOUR_API_KEY με το υπάρχον κλειδί GenderAPI.io σας. Οι δύο εκδόσεις χρησιμοποιούν το ίδιο υπόλοιπο. Δεν χρειάζεται ξεχωριστή συνδρομή ούτε ξεχωριστό κλειδί για το V2.

Όλα τα αιτήματα POST απαιτούν Content-Type: application/json. Χρησιμοποιήστε το υπάρχον κλειδί API σας στην κεφαλίδα Bearer. Κάθε αίτημα επεξεργάζεται ανεξάρτητα και τα επαναλαμβανόμενα αιτήματα χρεώνονται κανονικά.

Μόνο το GET /gender δέχεται επιπλέον την παράμετρο ερωτήματος key. Στις ενσωματώσεις προτιμήστε την κεφαλίδα Authorization, επειδή τα URL μπορεί να αποθηκευτούν στο ιστορικό του προγράμματος περιήγησης και σε αρχεία καταγραφής. Μην τοποθετείτε ιδιωτικά κλειδιά σε κώδικα frontend.

Ένα κλειδί που λείπει, έχει μη έγκυρη μορφή ή δεν αναγνωρίζεται οδηγεί στη δοκιμαστική πρόσβαση IP, την οποία το V2 μοιράζεται με το V1. Ένα αναγνωρισμένο κλειδί που είναι απενεργοποιημένο, έχει λήξει ή υπόκειται σε περιορισμούς δεν οδηγεί στη δοκιμαστική πρόσβαση IP. Ελέγξτε το meta.access.mode: api_key, ip_trial ή unauthenticated. Οι λόγοι μετάβασης στη δοκιμαστική πρόσβαση IP είναι api_key_missing, api_key_invalid ή api_key_not_found. Ένα μη έγκυρο κλειδί μπορεί επομένως να λάβει επιτυχή απόκριση μέσω της δοκιμαστικής πρόσβασης IP. Γι' αυτό ελέγχετε πάντα τον τύπο πρόσβασης στο περιβάλλον παραγωγής.

Οι πιστώσεις της δοκιμαστικής πρόσβασης IP επαναφέρονται στο τέλος μιας περιόδου 24 ωρών, όχι απαραίτητα τα μεσάνυχτα. Διαβάστε το resets_at μέσω του /usage. Όλοι όσοι χρησιμοποιούν την ίδια δημόσια διεύθυνση IP μοιράζονται αυτό το όριο.

Ρυθμίστε το κλειδί API σας

Αντιγράψτε το κλειδί API από τον λογαριασμό σας στο GenderAPI.io. Αντικαταστήστε παρακάτω το YOUR_API_KEY με αυτό το κλειδί και έπειτα εκτελέστε το παράδειγμα που επιλέξατε στην ίδια συνεδρία τερματικού. Αυτές οι εντολές ορίζουν μια μεταβλητή περιβάλλοντος μόνο για τη συγκεκριμένη συνεδρία. Το δημοσιευμένο σύμβολο κράτησης θέσης δεν είναι λειτουργικό κλειδί.

Σε μια εφαρμογή ή μια ανάπτυξη, ρυθμίστε το GENDERAPI_API_KEY ως μυστικό στην πλευρά του διακομιστή. Τα παραδείγματα δεν φορτώνουν αυτόματα αρχείο .env. Κρατήστε το κλειδί εκτός των πακέτων κώδικα του προγράμματος περιήγησης, του συστήματος ελέγχου εκδόσεων και των δημόσιων URL.

Τερματικό macOS/Linux
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'

Ελέγξτε την πρόσβαση χωρίς να χρησιμοποιήσετε πιστώσεις

Καλέστε το GET /usage με την κεφαλίδα Bearer. Ένα έγκυρο κλειδί λογαριασμού επιστρέφει meta.access.mode: api_key. Αν το αποτέλεσμα είναι ip_trial, ελέγξτε το κλειδί που αντιγράψατε πριν ζητήσετε προβλέψεις. Αυτό το αίτημα είναι δωρεάν, ακόμη και για λογαριασμό χωρίς υπόλοιπο πιστώσεων.

Επιλέξτε γλώσσα προγραμματισμού. Ρυθμίστε το κλειδί API σας, και έπειτα εκτελέστε το παράδειγμα στον διακομιστή σας.

Η ανάγνωση του υπολοίπου δεν κοστίζει πιστώσεις, αλλά υπολογίζεται στα όρια ρυθμού αιτημάτων.

Πριν από την εκτέλεση: πρόσβαση και χειρισμός σφαλμάτων

Εκτελέστε αυτά τα παραδείγματα στον διακομιστή σας. Ορίστε στο περιβάλλον της διεργασίας το GENDERAPI_API_KEY με το υπάρχον κλειδί API σας. Ελέγξτε ότι το meta.access.mode έχει την τιμή api_key, επειδή ένα κλειδί που δεν αναγνωρίζεται μπορεί να οδηγήσει στη δοκιμαστική πρόσβαση IP.

Στις αποκρίσεις JSON με HTTP 4xx και 5xx διατηρείται το σώμα του σφάλματος και το παράδειγμα τερματίζει με μη μηδενικό κωδικό εξόδου. Ελέγξτε τα code, action και meta.usage.billing_status πριν δοκιμάσετε ξανά.

Οδηγός για σφάλματα και νέες προσπάθειες →
cURL
curl --silent --show-error --fail-with-body --max-time 30 \
  --request GET 'https://api.genderapi.io/api/v2/usage' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}"

cURL 7.76+ σε κέλυφος POSIX. Εκτελέστε το στο τερματικό. Τεκμηρίωση του περιβάλλοντος εκτέλεσης

JavaScript / Node.js
// Server-side Node.js. Save as example.mjs.
const apiKey = process.env.GENDERAPI_API_KEY;
if (!apiKey) throw new Error("Set GENDERAPI_API_KEY");

const response = await fetch("https://api.genderapi.io/api/v2/usage", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${apiKey}`,
  },
  signal: AbortSignal.timeout(30_000),
  redirect: "error",
});
const raw = await response.text();
if (!(response.headers.get("content-type") ?? "").includes("json")) {
  throw new Error(`HTTP ${response.status}: expected JSON; request ID ${response.headers.get("x-request-id")}`);
}
const result = JSON.parse(raw); // Also accepts application/problem+json.
if (!response.ok) {
  console.error(`HTTP ${response.status}`, result);
  process.exitCode = 1; // A retry is a new operation; inspect billing first.
} else {
  console.log(JSON.stringify(result, null, 2));
  // For batches, inspect every item: HTTP 200 may contain item errors.
}

Node.js 22+ με ενσωματωμένο fetch. Αποθηκεύστε ως example.mjs και εκτελέστε node example.mjs. Τεκμηρίωση του περιβάλλοντος εκτέλεσης

Python
import json
import os
import sys
import urllib.error
import urllib.request

api_key = os.environ.get("GENDERAPI_API_KEY")
if not api_key:
    raise RuntimeError("Set GENDERAPI_API_KEY")

class NoRedirect(urllib.request.HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

request = urllib.request.Request(
    "https://api.genderapi.io/api/v2/usage",
    method="GET",
    headers={
        "Authorization": "Bearer " + api_key,
    },
)
opener = urllib.request.build_opener(NoRedirect())
try:
    response = opener.open(request, timeout=30)
except urllib.error.HTTPError as error:
    response = error  # Keep the Problem Details body on non-2xx responses.
with response:
    status = response.status
    raw = response.read().decode("utf-8")
    if "json" not in response.headers.get("Content-Type", ""):
        raise RuntimeError(f"HTTP {status}: expected a JSON response")
    result = json.loads(raw)
print(json.dumps(result, indent=2), file=sys.stderr if status >= 300 else sys.stdout)
if not 200 <= status < 300:
    sys.exit(1)  # Inspect code, action and billing before retrying.
# For batches, inspect every item even when HTTP status is 200.

Python 3.10+ με την τυπική βιβλιοθήκη. Αποθηκεύστε ως example.py και εκτελέστε python3 example.py. Τεκμηρίωση του περιβάλλοντος εκτέλεσης

PHP
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}

$ch = curl_init('https://api.genderapi.io/api/v2/usage');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
    ],
]);
$raw = curl_exec($ch);
if ($raw === false) {
    throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: '';
curl_close($ch);
if (strpos($contentType, 'json') === false) {
    throw new RuntimeException("HTTP $status: expected a JSON response");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$output = json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;
if ($status < 200 || $status >= 300) {
    fwrite(STDERR, $output); // Preserve the Problem Details body.
    exit(1);
}
echo $output;
// For batches, inspect every item; HTTP 200 can contain item errors.

PHP 8+ με την επέκταση cURL. Αποθηκεύστε ως example.php και εκτελέστε php example.php. Τεκμηρίωση του περιβάλλοντος εκτέλεσης

Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class GenderApiExample {
    private static String requiredEnv(String name) {
        String value = System.getenv(name);
        if (value == null || value.isBlank()) throw new IllegalStateException("Set " + name);
        return value;
    }

    public static void main(String[] args) throws Exception {
        String apiKey = requiredEnv("GENDERAPI_API_KEY");
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .followRedirects(HttpClient.Redirect.NEVER)
            .build();
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.genderapi.io/api/v2/usage"))
            .timeout(Duration.ofSeconds(30))
            .header("Authorization", "Bearer " + apiKey)
            .GET()
            .build();
        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
        if (!response.headers().firstValue("content-type").orElse("").contains("json")) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": expected JSON");
        }
        // JSON text; parse with your application's JSON library when integrating.
        if (response.statusCode() < 200 || response.statusCode() >= 300) {
            System.err.println(response.body()); // Includes Problem Details.
            System.exit(1);
        }
        System.out.println(response.body());
        // For batches, inspect each item's data or error, including on HTTP 200.
    }
}

Java 17+ με τον τυπικό πελάτη HTTP. Αποθηκεύστε ως GenderApiExample.java και εκτελέστε java GenderApiExample.java. Τεκμηρίωση του περιβάλλοντος εκτέλεσης

C# / .NET
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

string RequiredEnv(string name) =>
    !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(name))
        ? Environment.GetEnvironmentVariable(name)!
        : throw new InvalidOperationException($"Set {name}");

var apiKey = RequiredEnv("GENDERAPI_API_KEY");
using var handler = new HttpClientHandler { AllowAutoRedirect = false };
using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.genderapi.io/api/v2/usage");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);

using var response = await client.SendAsync(request);
var raw = await response.Content.ReadAsStringAsync();
if (!(response.Content.Headers.ContentType?.MediaType?.Contains("json") ?? false))
    throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: expected JSON");
using var result = JsonDocument.Parse(raw);
if (!response.IsSuccessStatusCode)
{
    Console.Error.WriteLine(result.RootElement); // Preserve Problem Details.
    Environment.ExitCode = 1;
}
else
{
    Console.WriteLine(result.RootElement);
    // For batches, inspect every item even on HTTP 200.
}

Εφαρμογή κονσόλας .NET 8+. Χρησιμοποιήστε το ως Program.cs σε ένα έργο κονσόλας και έπειτα εκτελέστε dotnet run. Τεκμηρίωση του περιβάλλοντος εκτέλεσης

Go
package main

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

func requiredEnv(name string) string {
    value := os.Getenv(name)
    if value == "" { panic("Set " + name) }
    return value
}

func run() error {
    apiKey := requiredEnv("GENDERAPI_API_KEY")
    request, err := http.NewRequest("GET", "https://api.genderapi.io/api/v2/usage", nil)
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + apiKey)
    client := &http.Client{
        Timeout: 30 * time.Second,
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    response, err := client.Do(request)
    if err != nil { return err }
    defer response.Body.Close()
    raw, err := io.ReadAll(response.Body)
    if err != nil { return err }
    if !strings.Contains(response.Header.Get("Content-Type"), "json") || !json.Valid(raw) {
        return fmt.Errorf("HTTP %d: expected a JSON response", response.StatusCode)
    }
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        return fmt.Errorf("HTTP %d: %s", response.StatusCode, raw)
    }
    fmt.Println(string(raw))
    // For batches, inspect every item even on HTTP 200.
    return nil
}

func main() {
    if err := run(); err != nil {
        fmt.Fprintln(os.Stderr, err) // Keep Problem Details for error handling.
        os.Exit(1)
    }
}

Go 1.22+ με την τυπική βιβλιοθήκη. Αποθηκεύστε ως main.go και εκτελέστε go run main.go. Τεκμηρίωση του περιβάλλοντος εκτέλεσης

Επόμενα βήματα