能否为 Google Maps JavaScript API 和 Static Maps API 使用同一 API_KE
支付小周
结论
可以。只要同一个 Google Cloud 项目启用了 Maps JavaScript API 和 Maps Static API,一个 API_KEY 就能调用这两个 API。API Key 本身并不限定只能用于某一种 Maps API。
不过,生产环境通常更适合分别创建两个 Key。两种 API 的调用方式不同,适用的应用限制也不同:
- Maps JavaScript API:Key 会出现在浏览器端,通常配置 HTTP referrer(网站)限制
- Maps Static API:如果请求由后端生成,通常配置 IP 地址限制,并配合 URL 签名
配置步骤
1. 启用所需 API
在 Google Cloud Console 中选择对应项目,然后启用:
Maps JavaScript APIMaps Static API
生产环境还需要为项目关联有效的结算账号。免费额度、计费方式和 SKU 可能发生调整,请以当前 Google Maps Platform 官方计费页面为准。
2. 配置 API 限制
如果确实需要共用一个 Key,请在该 Key 的 API restrictions 中选择 限制密钥,并同时允许:
- Maps JavaScript API
- Maps Static API
如果只允许其中一个,另一个 API 的请求会因权限限制而失败。
3. 配置应用限制
共用 Key 时,应用限制是最容易出现问题的部分。一个 Key 只能采用一种主要的应用限制类型,而浏览器端和服务端通常需要不同的限制策略。
如果两个 API 都由网页直接请求,可以为 Key 配置允许访问的 HTTP referrer,例如:
https://example.com/*
https://www.example.com/*
如果 Static Maps 请求由服务器发起,更稳妥的方案是拆分 Key:
Browser key:
Application restriction: HTTP referrers
API restriction: Maps JavaScript API
Server key:
Application restriction: IP addresses
API restriction: Maps Static API
拆分后可以缩小 Key 泄露的影响范围,也更方便分别监控和轮换密钥,以及排查配额问题。
调用示例
Maps JavaScript API
<script
async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_BROWSER_API_KEY&callback=initMap">
</script>
function initMap() {
const map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 31.2304, lng: 121.4737 },
zoom: 12
});
}
Maps Static API
<img
src="https://maps.googleapis.com/maps/api/staticmap?center=31.2304,121.4737&zoom=12&size=600x400&key=YOUR_STATIC_MAPS_API_KEY"
alt="Static map">
如果决定共用 Key,把两个示例中的 Key 替换成同一个值即可。这个 Key 必须同时获得两个 API 的调用权限。
注意事项
- 不要因为 Key 会出现在前端代码或 URL 中,就取消所有限制。API Key 通常不是传统意义上的密码,但仍需配置应用限制和 API 限制。
- Maps Static API 的 URL 可能出现在 HTML、浏览器历史记录、访问日志或代理日志中,应避免记录不必要的完整请求地址。
- 如果 Static Maps 请求由可信后端生成,建议使用独立 Key,并按照当前官方方案配置数字签名。
- 共用 Key 时,项目账单仍可按不同 API 或 SKU 区分,但密钥轮换、异常流量定位和权限隔离会更困难。
- Standard plan 是较早期的产品表述。生产环境的实际配置应以当前 Google Maps Platform 的项目、Billing Account、API 配额和 SKU 规则为准。
功能上,Maps JavaScript API 和 Maps Static API 可以共用一个 API_KEY。考虑到生产环境的安全和运维需求,通常应为两种 API 分别创建 Key,并配置相应限制。
备注:内容仅供参考。
