将集成保留在 Node.js 服务器上
本指南通过 Bearer 请求头中的 API 密钥调用 GenderAPI.io V2 端点 https://api.genderapi.io/api/v2/gender。请使用 Node.js 22 或更高版本,并把 genderapi-v2.mjs 下载到您的项目中。该 ES 模块使用原生的 fetch 和 AbortSignal.timeout;不需要任何 npm 软件包。由于使用 .mjs 扩展名,您无需修改 package.json 即可从其他 ES 模块导入它。
请在服务器环境中设置 GENDERAPI_API_KEY。不要把密钥放入 React、Vue 或任何其他在浏览器中运行的 JavaScript 代码。请让您的服务器对应用用户进行身份验证,并由服务器调用 GenderAPI.io。下面示例中的 YOUR_API_KEY 不是有效的密钥;导入该模块,或在没有显式运行选项的情况下执行它,都不会发送任何请求。
node --version
export GENDERAPI_API_KEY="YOUR_API_KEY"发送带有 JSON 和显式 AI 策略的 POST 请求
把代码保存为 single.mjs,放在下载的模块旁边,然后运行 node single.mjs。该请求会发送 V2 的 type 和 value 字段以及 options.ai_mode: off。预测位于 response.data 中,请求和计费信息位于 response.meta 中。
完成的查询消耗 1 个积分,即使 gender 为 null 也是如此;示例姓名并不保证得到特定的结果。
辅助模块要求显式的 AI 模式和 24 个字符的十六进制密钥,然后检查 meta.access.mode 的值是否为 api_key。IP 试用的成功响应会引发意外访问模式错误,而不是悄悄继续。在模块发现这一差异之前,服务器可能已经用掉了一个 IP 试用积分。
import { predict, GenderAPIError } from "./genderapi-v2.mjs";
try {
const response = await predict({
type: "name", value: "Alice", options: { ai_mode: "off" },
});
const result = response.data;
console.log(result.result_status, result.gender);
console.log(result.confidence, result.confidence_kind);
console.log(response.meta.usage);
} catch (error) {
if (!(error instanceof GenderAPIError)) throw error;
// Do not log error.body: it can include the submitted value.
console.error("Request failed:", error.code, error.requestId);
process.exitCode = 1;
}将结果与其依据一起保存
推断出的关联并不是本人自述的性别。请把原始输入、返回的依据以及本人提供的信息分开保存。未知结果是有效的结果,不应在您的应用中变成一个猜测出来的类别。
| 字段 | 使用方式 |
|---|---|
data.gender / data.result_status | 只有在 identified 时才使用 male 或 female。结果未知时,请保留 JSON 原生的 null 值。 |
data.name / data.match | 检查返回的名字和所选的候选项。子字符串匹配并不能证明该输入属于拥有这个名字的人。 |
data.confidence / data.confidence_kind | 置信度为 0–1 之间的值或 null。observed_frequency 来自存储的计数;model_reported 是 AI 给出的值。请针对每种类型分别评估阈值。 |
data.source / data.sample_count | 区分 dataset、ai 和 none。AI 结果没有存储的样本数。样本数并不是实测的准确率。 |
meta.access.mode | 在账户集成中,请确认值为 api_key。缺失或无法识别的密钥可能会转为使用共享的 IP 试用。 |
meta.usage | 读取 charged_credits 和 billing_status。成功完成的未知结果同样计费。响应丢失并不能证明该请求是免费的。 |
处理混合批量请求,并保留每一行的 id
GenderAPI.io V2 通过 POST https://api.genderapi.io/api/v2/gender/batch 处理混合批量请求:使用账户密钥时最多 50 个条目,使用 IP 试用时最多 10 个。这些示例需要账户密钥。请为每个条目设置稳定且唯一的 id 和显式的 AI 模式。一个批量请求可以混合姓名、电子邮箱地址和用户名,每个条目都可以带有可选的 country 背景。
请逐条读取 data 中的条目,并读取 meta.summary 中的汇总。HTTP 200 响应中可能包含单个条目的错误;所有条目都失败的批量请求可能返回带有结果的顶层 Problem 响应。成功完成的未知结果计入 succeeded。借助 index 和 id,您可以把每个结果对应到正确的原始行。
请把较大的任务拆分为每组最多 50 个条目,开始时一次只发送一组。在处理下一组之前,保存每个响应及对应的用量。遇到传输错误、账户访问错误或未确认的计费时请停止,先弄清当前这一组的情况。只有在核实账户的限制之后,才并行发送。批量请求的最大条目数并不保证特定的处理能力。
import { predictBatch, GenderAPIError } from "./genderapi-v2.mjs";
const items = [
{ id: "row-1", type: "name", value: "Alice", options: { ai_mode: "off" } },
{ id: "row-2", type: "email", value: "alex@example.com", options: { ai_mode: "off" } },
{ id: "row-3", type: "username", value: "sample_handle", options: { ai_mode: "off" } },
];
try {
const response = await predictBatch(items);
for (const item of response.data) {
if (item.error) {
console.log(item.id, "failed", item.error.code);
} else {
console.log(item.id, item.data.result_status, item.data.gender);
}
}
console.log(response.meta.summary, response.meta.usage);
if (response.meta.summary.failed > 0) process.exitCode = 2;
} catch (error) {
if (!(error instanceof GenderAPIError)) throw error;
// error.body can retain an all-failed batch and billing details.
console.error("Batch needs review:", error.code, error.requestId);
process.exitCode = 1;
}决定何时使用 AI
forceToGenderize 对姓名、电子邮箱地址和用户名都是可选的。启用时,请省略 ai_mode 或使用 fallback;off 和 always 不能与此选项组合,否则会返回 422。起始余额为正即可发起请求,即使最终扣费后余额变为负数。
昵称模式可能在 name: null 的同时返回性别,也可能得到未知结果。无论是普通的 AI 回退还是昵称解读,都不能保证答案正确或返回非 null 的值。
JavaScript 辅助模块始终要求提供 options.ai_mode。如需昵称解读,请同时发送 forceToGenderize: true 和 options: { ai_mode: 'fallback' }。
| 请求选项 | 行为 | 每次成功查询消耗的积分 |
|---|---|---|
| options.ai_mode: off | 仅使用数据集。 | 1,未知结果也是如此 |
| options.ai_mode: fallback | 先查询数据集;如果没有返回性别,再使用普通的 AI。这是单个请求的默认值。 | 总共 1,包括 AI 回退 |
| options.ai_mode: always | 直接使用 AI。 | 2 |
| forceToGenderize: true | 先查询数据集,然后允许 AI 解读个人昵称或别名,即使没有真实名字也可以。 | 数据集得出结果时为 1;使用 AI 时总共为 2 |
决定出错后的处理方式
示例中的每个操作只发送一次。它们从不自动重试:重新发送是一个新的操作,可能会计费。超时或连接错误表示客户端没有收到完整的响应。这并不能证明服务器停止了处理,也不能证明没有扣除积分。
请把返回的 request_id 和计费状态与您的任务记录一起保存。错误对象保留了响应以便进行受控分析,但其中可能包含原始输入:不要把整个对象、响应和 API 密钥写入普通日志文件。
| 情况 | 应用中的决定 |
|---|---|
| 成功完成的未知结果 | 保留 null、reason 和 usage。这是已完成且已计费的结果,而不是需要自动重试的失败行。 |
| 422 验证错误 | 先根据 Problem Details 字段中指出的问题修正输入,再发送新的请求。 |
| 401 / 403 | 检查账户访问权限或可用余额。重新发送相同的请求无法解决问题。 |
| 429 | 如有 Retry-After 请求头,请遵守它。检查错误和计费状态,然后审慎安排下一次尝试。 |
| 网络错误、超时或无法读取的响应 | 记录结果和计费均未确认。重新发送前先调查情况。客户端无法撤销服务器已经完成的处理。 |
| billing_status: unconfirmed | charged_credits 和 remaining_credits 可能为 null。重试前请联系支持团队并提供 request_id。不要把 null 替换为零积分。 |
| 批量请求中部分条目出错 | 先保存已完成的条目。检查失败的条目及其计费,只重新发送适合重试的错误条目,而不是整个批量请求。 |
了解 fetch 超时与响应检查
默认超时为 10,000 毫秒,通过 AbortSignal.timeout 实现,包括读取响应正文的时间。客户端中止并不能证明服务器上的处理或计费已经停止。该模块会禁用重定向,区分 HTTP 错误和无法读取的响应,并且从不自动重试。
使用模拟传输的测试覆盖成功响应、未知结果、部分成功的批量请求、凭据回退和错误。它们不会获取真实的预测,也不会执行消耗积分的操作,不衡量生产环境中的可用性或准确率。下面每个显式的演示命令都会发送自己的请求,并会计费。
node genderapi-v2.mjs --run-single
# Run separately to submit another billable sample batch:
node genderapi-v2.mjs --run-batch常见问题
可以在浏览器中运行的 JavaScript 里使用这段代码吗?
请把代码保留在您的服务器上。在浏览器中运行的应用代码会让用户看到 API 密钥。请从浏览器调用您自己的、经过身份验证的后端,再由后端向 GenderAPI.io 发送请求。
未知结果会消耗积分吗?
会。成功完成的普通查询消耗 1 个积分,即使 gender 为 null 也是如此。普通的自动 AI 回退已包含在这个积分中。always 模式消耗 2 个积分;使用 forceToGenderize 时,结果来自数据集则消耗 1 个积分,使用 AI 则消耗 2 个积分。
示例会重试失败的请求吗?
不会。每个新请求都是一个单独的操作。在决定是否重新发送之前,请检查错误、每个条目的结果和计费状态。没有收到响应并不能证明上一次尝试是免费的。
需要安装软件包吗?
不需要。请直接从本 GenderAPI.io 指南下载示例。它在运行时不依赖外部软件包,也不是通过 pip 或 npm 单独发布的 SDK。请审查代码并根据您的应用进行调整。API 约定以 GenderAPI.io V2 文档为准。
来源
API 文档定义了请求和响应。运行时文档介绍了所使用的 HTTP 工具。