Tham chiếu các trường type, value, country, forceToGenderize và ai_mode của GenderAPI.io V2, cùng khác biệt giữa truy vấn GET và JSON của POST.
Tham số JSON của POST
Tham số
Kiểu
Bắt buộc
Mặc định
Mô tả
Tham sốtype
Kiểustring
Bắt buộcCó
Mặc định—
Mô tảLoại đầu vào: name, email hoặc username.
Tham sốvalue
Kiểustring
Bắt buộcCó
Mặc định—
Mô tảBắt buộc. 1–254 ký tự; không để trống, không chứa ký tự điều khiển. Giá trị email phải đúng cú pháp email.
Tham sốcountry
Kiểustring
Bắt buộcKhông
Mặc định—
Mô tảMã ISO 3166-1 alpha-2 viết hoa, tùy chọn, ví dụ TR hoặc US. Tra cứu theo quốc gia có thể chuyển sang tập dữ liệu toàn cầu.
Tham sốforceToGenderize
Kiểuboolean
Bắt buộcKhông
Mặc địnhfalse
Mô tảTra tập dữ liệu trước, sau đó dùng AI có phân tích biệt danh nếu chưa xác định được. Hỗ trợ name, email và username.
Tham sốoptions
Kiểuobject
Bắt buộcKhông
Mặc định—
Mô tảĐối tượng chứa tùy chọn AI cho từng đầu vào.
Tham sốoptions.ai_mode
Kiểustring
Bắt buộcKhông
Mặc địnhfallback
Mô tảGiá trị hợp lệ: off, fallback, always. Với forceToGenderize: true, bỏ qua trường này hoặc dùng fallback.
Tham sốid
Kiểustring
Bắt buộcKhông
Mặc định—
Mô tảMã định danh tùy chọn dài 1–64 ký tự trong JSON của POST. Được trả về cùng từng kết quả trong lô; phải là duy nhất trong một lô. Yêu cầu đơn lẻ chấp nhận trường này nhưng không trả lại. Không hỗ trợ trong truy vấn GET.
Dấu gạch (—) nghĩa là không có giá trị mặc định. Bỏ qua các đầu vào tùy chọn không dùng; không gửi null. Ví dụ phản hồi chỉ để minh họa, không phải giá trị mặc định. “Có thể là null” nghĩa là trường có thể chứa JSON null; trường bị bỏ qua được mô tả riêng.
Bỏ qua các trường tùy chọn khi không dùng; không gửi null hoặc chuỗi rỗng thay cho country hay options. Giá trị boolean trong JSON phải là true hoặc false, không phải chuỗi. Văn bản UTF-8 được hỗ trợ; không cần chuyển tên sang ASCII.
Tham số truy vấn GET
Tham số
Kiểu
Bắt buộc
Mặc định
Mô tả
Tham sốtype
Kiểustring
Bắt buộcKhông
Mặc địnhname
Mô tảLoại đầu vào: name, email hoặc username.
Tham sốvalue
Kiểustring
Bắt buộcCó
Mặc định—
Mô tảBắt buộc. 1–254 ký tự; không để trống, không chứa ký tự điều khiển. Giá trị email phải đúng cú pháp email.
Tham sốcountry
Kiểustring
Bắt buộcKhông
Mặc định—
Mô tảMã ISO 3166-1 alpha-2 viết hoa, tùy chọn, ví dụ TR hoặc US. Tra cứu theo quốc gia có thể chuyển sang tập dữ liệu toàn cầu.
Tham sốforceToGenderize
Kiểuboolean
Bắt buộcKhông
Mặc địnhfalse
Mô tảTra tập dữ liệu trước, sau đó dùng AI có phân tích biệt danh nếu chưa xác định được. Hỗ trợ name, email và username.
Tham sốai_mode
Kiểustring
Bắt buộcKhông
Mặc địnhfallback
Mô tảGiá trị hợp lệ: off, fallback, always. Với forceToGenderize: true, bỏ qua trường này hoặc dùng fallback.
Tham sốkey
Kiểustring
Bắt buộcKhông
Mặc định—
Mô tảKhóa API hiện có cho yêu cầu GET. Nên dùng tiêu đề Authorization; khóa bị thiếu hoặc không được nhận diện sẽ dùng thử theo IP.
GET dùng trực tiếp type, value, country, forceToGenderize và ai_mode trong chuỗi truy vấn, cùng key tùy chọn. Mã hóa giá trị bằng bộ mã hóa tham số URL của HTTP client; ví dụ @ trở thành %40. Với boolean trong GET, gửi true hoặc false. Trường không xác định và giá trị không hợp lệ sẽ bị từ chối.
Trước khi gửi yêu cầu
Gửi JSON đến POST https://api.genderapi.io/api/v2/gender. Dùng khóa API hiện có trong Authorization: Bearer YOUR_API_KEY và Content-Type: application/json. Mỗi yêu cầu được xử lý độc lập.
Chọn ngôn ngữ lập trình trong ví dụ mã. Đặt GENDERAPI_API_KEY trong biến môi trường của tiến trình trước khi chạy. Khóa bị thiếu hoặc không được nhận diện có thể dùng thử theo IP dùng chung, vì vậy khi tích hợp một tài khoản, hãy xác nhận meta.access.mode là api_key.
Ví dụ này dùng các trường yêu cầu chung để tra cứu một tên. Đổi type và value để dùng địa chỉ email hoặc tên người dùng, hoặc đặt options.ai_mode và forceToGenderize như mô tả ở trên.
Chọn ngôn ngữ lập trình.Thiết lập khóa API, sau đó chạy ví dụ trên máy chủ của bạn.
Mỗi yêu cầu dự đoán là một thao tác mới bị tính phí, kể cả khi thử lại. Các ví dụ này không tự động thử lại. Kiểm tra trạng thái tính phí trước khi gửi yêu cầu khác.
Trước khi chạy: quyền truy cập và xử lý lỗi
Chạy các ví dụ này trên máy chủ của bạn. Đặt GENDERAPI_API_KEY trong biến môi trường của tiến trình bằng khóa API hiện có. Xác nhận meta.access.mode là api_key: khóa không được nhận diện có thể chuyển sang dùng thử theo IP.
Với phản hồi JSON HTTP 4xx và 5xx, ví dụ giữ nguyên nội dung lỗi và kết thúc với mã thoát khác 0. Kiểm tra code, action và meta.usage.billing_status trước khi thử lại.
// 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 body = { "type": "name", "value": "Tuấn", "country": "VN"};const response = await fetch("https://api.genderapi.io/api/v2/gender", { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json", }, body: JSON.stringify(body), 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 tích hợp sẵn. Lưu thành example.mjs và chạy node example.mjs. Tài liệu môi trường chạy
Python
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")body = json.loads("{\"type\":\"name\",\"value\":\"Tuấn\",\"country\":\"VN\"}")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/gender", method="POST", data=json.dumps(body).encode("utf-8"), headers={ "Authorization": "Bearer " + api_key, "Content-Type": "application/json", },)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+; thư viện chuẩn. Lưu thành example.py và chạy python3 example.py. Tài liệu môi trường chạy
PHP 8+ với tiện ích mở rộng cURL. Lưu thành example.php và chạy php example.php. Tài liệu môi trường chạy
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"); String body = "{\"type\":\"name\",\"value\":\"Tuấn\",\"country\":\"VN\"}"; 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/gender")) .timeout(Duration.ofSeconds(30)) .header("Authorization", "Bearer " + apiKey) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8)) .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 client chuẩn. Lưu thành GenderApiExample.java và chạy java GenderApiExample.java. Tài liệu môi trường chạy
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.Post, "https://api.genderapi.io/api/v2/gender");request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);request.Content = new StringContent("{\"type\":\"name\",\"value\":\"Tuấn\",\"country\":\"VN\"}", Encoding.UTF8, "application/json");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.}
Ứng dụng console .NET 8+. Dùng làm Program.cs trong một dự án console, sau đó chạy dotnet run. Tài liệu môi trường chạy
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") body := "{\"type\":\"name\",\"value\":\"Tuấn\",\"country\":\"VN\"}" request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/gender", strings.NewReader(body)) if err != nil { return err } request.Header.Set("Authorization", "Bearer " + apiKey) request.Header.Set("Content-Type", "application/json") 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) }}