简介
Steam 公开了基于 HTTP 的 Web API,用于访问多个 Steamworks 功能。 从任何可进行 HTTP 请求的应用程序,如游戏客户端或服务器,均可访问该 API 所包含的公开方法。 该 API 还包含需要验证的受保护方法,应从受信任的后端应用程序访问。
举例而言,安全的发行商服务器通常将 Web API 方法用于:
- 向该服务器验证 Steam 用户的凭据;
- 检查用户是否拥有特定的应用程序;
- 设置或检索用户的统计数据、成就或排行榜分数;
- 进行游戏内购买。
您可在
Steamworks Web API 索引找到 Steamworks Web API 完整列表。
请求格式
可向
api.steampowered.com 发出 HTTP (80 端口)或 HTTPS (443 端口)请求以访问公开的 Steamworks Web API。
如您为发行商,Steam 也提供托管于
https://partner.steam-api.com 的、仅面向合作伙伴的 Web API 服务器。 这项服务意在提供比公共主机更好的可用性。所有从您安全服务器发出的请求均应使用该服务。 更多信息请参见
Web API 主机地址、防火墙注意事项部分。
Web API 与 Steamworks C++ API 相似,已划分为包含相关方法的多个接口。 每个 API 请求的 URI 格式为:
https://api.steampowered.com/<接口>/<方法>/v<版本>/
大部分方法支持一系列必需和可选参数。 根据具体的方法,这些参数在请求中须以 GET 或 POST 参数传递。
如可能,所有请求应用 HTTP 1.1 发送并使用安全 TLS 连接。 内容类型(Content-Type)应为
“application/x-www-form-urlencoded”,而 POST 参数应位于请求正文,并使用标准 URL 编码格式。 文本必须以 UTF-8 传送。
验证
许多 Web API 方法有访问限制,如想访问需有专门密钥,更多信息请参见
使用 Web API 密钥进行验证。
数组参数
有些方法需要参数数组。 这是通过参数名称中的后缀
[0] 来指定的。 传递数组时总是会有
count 参数来指定数组中参数的数量。 如:
?count=2&name[0]=SomeNameHere&name[1]=SomeOtherName
服务接口
除常规 Web API 调用之外还有服务接口。 这些接口的功能与常规接口非常相似,主要区别在于,所有服务 API 除了可以通过 GET 或 POST 参数传递参数外,还可以将参数作为单个 JSON 数据块传入。 如需将数据以 JSON 传入,请调用 Web API 方法,将
input_json 参数设为:
?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&input_json={"steamid":76561197972495328}
请注意 JSON 需进行 URL 编码。 “key”字段及 “format”字段仍应像以往那样作为单独参数传递。 POST 请求也同样支持。
可从接口名称判断 WebAPI 是否是“服务”接口。如名称以“Service”结尾,如
IPlayerService,则该接口支持这一额外的参数数据传递方法。 某些“服务”方法具有结构更为复杂的参数,需要这种不同的输入格式。
查询示例
以下示例检索了《军团要塞 2》最新的 3 条新闻条目。
检索请求指明响应应以 JSON 返回。该请求包含:必需的 AppID 参数(《军团要塞 2》的 AppID 为 440),以及可选的计数参数,以限制所返回结果的数量。
GET /ISteamNews/GetNewsForApp/v2/?appid=440&count=3\r\n
Host: api.steampowered.com/r/n
Content-Length: 0\r\n\r\n
您可以使用以下链接执行此查询并查看结果:
https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/?appid=440&count=3您可在此查阅更多有关该调用的详情:
ISteamNews/GetNewsForApp。
获取用户 SteamID
Steamworks Web API 通过使用用户独有的 64 位 Steam ID 来识别每位用户。 如想了解如何安全获取用户 Steam ID,请参见
用户验证与所有权。
Web API 主机地址、防火墙注意事项
公开的 Web API (
api.steampowered.com)位于 Akamai 的边缘缓存之后,因此您所看到的名称的实际 IP 地址会随您所在位置及所提供服务的变化而变化。 IP 地址可能会迅速而随机地变化,因此如果您的 Web API 调用是穿越防火墙进行的出站请求,请继续往下阅读。
对于从您的安全服务器所发出的所有请求,您应使用只面向合作伙伴的节点 (
https://partner.steam-api.com)。 该主机与公共主机有以下不同的属性:
- 该主机只可通过 HTTPS 访问。
- 该主机并非位于 Akamai 的边缘缓存之后。
- 向该主机发出任何请求必须使用您的发行商 Web API 密钥,即便是通常无需密钥的请求也不例外。 无有效发行商密钥的请求会被返回错误代码 403。
- 产生 403 状态代码的请求(通常在使用普通 Web API 密钥而非您自己的发行商密钥时发生)会针对所连接的 IP 产生严格的速率限制。 此举是为了确保高度的可用性。
- 如您向此 API 服务发出请求的主机有针对传出请求的防火墙筛选器,您应在允许列表中添加 DNS 名称 “partner.steam-api.com”。 如您的防火墙只支持数字地址,则在允许列表中添加以下 CIDR 块:
208.64.200.0/22。
注意:您不应通过 IP 地址连接至 Web API 服务器。请使用 DNS 名称。 这些地址只提供给那些需要将其加入防火墙白名单的客户端。
将 IP 地址加入白名单
我们允许出于 WebAPI 调用的目的而将 IP 地址加入白名单。 这是一层额外安全保护,防止您的 WebAPI 密钥遭泄露,因为它确保了只有从白名单中的 IP 地址进行 WebAPI 调用才会成功。 任何 IP 地址列入白名单后,所有其他来自白名单以外的地址的请求都将会被屏蔽,并返回 403 - Forbidden 响应。
将 IP 地址添加至白名单很容易。 在任何含有 WebAPI 密钥的组页面上,点击“管理 WebAPI 密钥”按钮,然后遵循指示即可。
每个 WebAPI 密钥都拥有自己的白名单。将 IP 地址添加至白名单
并不是必须的。
注意:加入白名单并不能保障 WebAPI 密钥的安全。 请保护您的密钥,勿分享密钥,并在其泄露时立即更改。