GenderAPI.io V2: godkendelse og gratis IP-prøveadgang
Godkend GenderAPI.io V2 med din eksisterende API-nøgle. Lær om Bearer-headers, nøglen i GET-forespørgsler, IP-prøveadgang og JSON-forespørgsler.
Godkendelse og gratis IP-prøveadgang
Parameter
Type
Påkrævet
Standard
Beskrivelse
ParameterAuthorization
Typestring
PåkrævetNej
Standard—
BeskrivelseSend Bearer YOUR_API_KEY for at bruge en konto. Manglende eller ukendte nøgler bruger den delte IP-prøveadgang.
ParameterContent-Type
Typestring
PåkrævetKun POST
Standard—
BeskrivelseSend application/json ved POST-forespørgsler.
Send Authorization: Bearer YOUR_API_KEY fra din server. Erstat YOUR_API_KEY med din eksisterende GenderAPI.io-nøgle. De to versioner deler din saldo, og du behøver hverken et separat V2-abonnement eller en separat nøgle.
Alle POST-forespørgsler kræver Content-Type: application/json. Brug din eksisterende API-nøgle i Bearer-headeren. Hver forespørgsel behandles uafhængigt, og gentagne forespørgsler opkræves efter de normale regler.
Kun GET /gender accepterer også forespørgselsparameteren key. Foretræk Authorization-headeren i integrationer, fordi URL'er kan blive gemt i browserhistorik og logfiler. Læg ikke private nøgler i frontend-kode.
En nøgle, der mangler, har et ugyldigt format eller ikke genkendes, fører til IP-prøveadgangen, som deles med V1. En genkendt nøgle, der er deaktiveret, udløbet eller begrænset, gør ikke. Kontrollér meta.access.mode: api_key, ip_trial eller unauthenticated. Årsagen til IP-prøveadgangen er api_key_missing, api_key_invalid eller api_key_not_found. En ugyldig nøgle kan altså give et gennemført svar via IP-prøveadgangen, så kontrollér altid adgangstilstanden i produktion.
Kreditterne i IP-prøveadgangen nulstilles efter en periode på 24 timer, ikke nødvendigvis ved midnat. Brug /usage til at læse resets_at. Alle bag den samme offentlige IP-adresse deler disse kreditter.
Kopiér din API-nøgle fra din GenderAPI.io-konto. Erstat YOUR_API_KEY nedenfor med nøglen, og kør derefter det valgte eksempel i den samme terminalsession. Kommandoerne sætter kun en miljøvariabel for den session. Den offentliggjorte pladsholder er ikke en gyldig nøgle.
I en applikation eller et deployment skal du konfigurere GENDERAPI_API_KEY som en hemmelighed på serversiden. Eksemplerne indlæser ikke automatisk en .env-fil. Hold nøglen ude af browserbundles, versionsstyring og offentlige URL'er.
Terminal i macOS/Linux
export GENDERAPI_API_KEY='YOUR_API_KEY'
Windows PowerShell
$env:GENDERAPI_API_KEY = 'YOUR_API_KEY'
Bekræft adgangen uden at bruge kreditter
Kald GET /usage med Bearer-headeren. En gyldig kontonøgle giver meta.access.mode: api_key. Hvis resultatet viser ip_trial, skal du kontrollere den kopierede nøgle, før du beder om forudsigelser. Denne forespørgsel er gratis, også for en konto uden resterende kreditter.
Det koster ingen kreditter at læse saldoen, men forespørgslen tæller stadig med i forespørgselsgrænserne.
Før du kører: adgang og fejlhåndtering
Kør eksemplerne på din server. Sæt GENDERAPI_API_KEY i procesmiljøet til din eksisterende API-nøgle. Bekræft, at meta.access.mode er api_key: En nøgle, der ikke genkendes, kan føre til IP-prøveadgangen.
JSON-svar med HTTP 4xx og 5xx bevarer fejlens body og returnerer en exitstatus, der ikke er nul. Kontrollér code, action og meta.usage.billing_status, før du prøver igen.
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+, standard-HTTP-klienten. Gem som GenderApiExample.java, og kør java GenderApiExample.java. Dokumentation for kørselsmiljøet
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.}
Konsolapplikation med .NET 8+. Brug som Program.cs i et konsolprojekt, og kør derefter dotnet run. Dokumentation for kørselsmiljøet
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) }}