GenderAPI.io V2: autentizace a bezplatný zkušební režim podle IP
Autentizujte GenderAPI.io V2 svým stávajícím API klíčem. Seznamte se s hlavičkou Bearer, klíčem v dotazu GET, zkušebním režimem podle IP a požadavky JSON.
Autentizace a bezplatný zkušební režim podle IP
Parametr
Typ
Povinné
Výchozí hodnota
Popis
ParametrAuthorization
Typstring
PovinnéNe
Výchozí hodnota—
PopisChcete-li použít účet, pošlete Bearer YOUR_API_KEY. Chybějící nebo neznámé klíče používají sdílený zkušební režim podle IP.
ParametrContent-Type
Typstring
PovinnéPouze POST
Výchozí hodnota—
PopisU požadavků POST posílejte application/json.
Ze svého serveru posílejte Authorization: Bearer YOUR_API_KEY. Nahraďte YOUR_API_KEY svým stávajícím klíčem GenderAPI.io. Obě verze sdílejí váš zůstatek; samostatné předplatné ani klíč pro V2 nepotřebujete.
Všechny požadavky POST vyžadují Content-Type: application/json. Použijte svůj stávající API klíč v hlavičce Bearer. Každý požadavek se zpracovává samostatně; opakované požadavky se účtují běžným způsobem.
Parametr dotazu key přijímá pouze GET /gender. V integracích dávejte přednost hlavičce Authorization, protože URL se mohou ukládat do historie prohlížeče a do protokolů. Soukromé klíče nevkládejte do kódu frontendu.
Chybějící, chybně formátovaný nebo nerozpoznaný klíč přejde na zkušební režim podle IP sdílený s V1. Rozpoznaný klíč, který je zakázaný, má prošlou platnost nebo je omezený, na zkušební režim nepřejde. Zkontrolujte meta.access.mode: api_key, ip_trial nebo unauthenticated. Důvodem zkušebního režimu je api_key_missing, api_key_invalid nebo api_key_not_found. Neplatný klíč tedy může vést k úspěšné odpovědi ve zkušebním režimu; v produkci proto režim přístupu ověřujte.
Kredity zkušebního režimu podle IP se obnovují po uplynutí 24hodinového období, ne nutně o půlnoci. Čas resets_at zjistíte přes /usage. Lidé za stejnou veřejnou IP adresou tento limit sdílejí.
Zkopírujte API klíč ze svého účtu GenderAPI.io. Nahraďte níže YOUR_API_KEY tímto klíčem a pak spusťte zvolený příklad ve stejné relaci terminálu. Tyto příkazy nastaví proměnnou prostředí jen pro danou relaci; zveřejněný zástupný text není funkční klíč.
Pro aplikaci nebo nasazení nastavte GENDERAPI_API_KEY jako tajný údaj na straně serveru. Příklady soubor .env automaticky nenačítají. Klíč nevkládejte do balíčků pro prohlížeč, do správy verzí ani do veřejných URL.
Terminál macOS / Linux
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'
Ověřte přístup bez spotřeby kreditů
Zavolejte GET /usage s hlavičkou Bearer. Platný klíč účtu vrátí meta.access.mode: api_key. Pokud výsledek uvádí ip_trial, zkontrolujte zkopírovaný klíč dříve, než začnete posílat požadavky na odhad. Tento požadavek je zdarma, a to i pro účet bez zbývajících kreditů.
Vyberte programovací jazyk.Nastavte API klíč, potom spusťte příklad na svém serveru.
Zjištění zůstatku nestojí žádné kredity. Započítává se však do limitů počtu požadavků.
Před spuštěním: přístup a zpracování chyb
Tyto příklady spouštějte na svém serveru. V prostředí procesu nastavte GENDERAPI_API_KEY na svůj stávající API klíč. Ověřte, že meta.access.mode je api_key: nerozpoznaný klíč může přejít na zkušební režim podle IP.
U odpovědí JSON s HTTP 4xx a 5xx příklady zachovají tělo chyby a skončí s nenulovým návratovým kódem. Před opakováním požadavku zkontrolujte code, action a meta.usage.billing_status.
import jsonimport osimport sysimport urllib.errorimport urllib.requestapi_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 Nonerequest = 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.
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+; standardní HTTP klient. Uložte jako GenderApiExample.java a spusťte java GenderApiExample.java. Dokumentace běhového prostředí
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.}
Konzolová aplikace .NET 8+. Použijte jako Program.cs v konzolovém projektu a potom spusťte dotnet run. Dokumentace běhového prostředí
Go
package mainimport ( "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) }}