
Simple Weather 是一款基于 Go 的轻量级天气预报应用,通过集成百度地图服务(逆地理信息编码、经纬度转换等)支持网页查看当前位置天气:IP -> 经纬度 -> WeatherKit REST API,支持 API 调用返回天气预报,数据来自于 Apple WeatherKit,数据采用 SQLite 进行缓存。它简化了天气数据获取流程,提供高效、可靠的天气查询服务,适用于个人博客、移动应用后端或小型 IoT 项目。
1. 真实痛点驱动的工具演进
项目的初衷源于开发者作为 Apple Developer 账户持有者,每个月享有 50 万次 WeatherKit API 调用额度,希望充分利用这一资源。同时,多个个人项目(如博客、IoT 应用)需要集成当地天气功能,而通过请求者 IP 经百度地图 API 获取位置信息是最简单、方便的方式。然而,开发者常常面临如下痛点:
- 数据获取链路复杂:从用户 IP 获取位置信息,再转换为经纬度调用天气 API,涉及多个服务集成,容易出错。
- API 调用频繁与限额:天气数据实时性强,但免费 API 限额低,反复调用导致费用增加或服务中断。
- 多端支持不统一:需要同时支持网页显示和 API 接口,返回格式多样,开发维护成本高。
- 缓存与性能优化难:无缓存机制导致响应慢,数据重复查询浪费资源,且需处理离线场景。
早期方案
最初,开发者在每个项目中单独集成天气查询逻辑:使用百度地图 API 获取 IP 位置,然后调用 WeatherKit。但很快遇到以下问题:
- 操作繁琐,需要在每个项目中重复处理 API 密钥、错误重试,经纬度转换逻辑复杂,代码冗长。
- 没有缓存,每次查询都从头开始,响应时间长,且容易超出 API 调用限额,尽管有 50 万次额度,但分散在多个项目中管理不便。
- 网页和 API 支持割裂,网页需前端 JS 调用,后端 API 需额外开发,维护难度大。
- 数据持久化缺失,离线时无法提供历史天气信息,影响用户体验。
工具化演进
为解决上述问题,并充分利用 Apple Developer 的 WeatherKit 额度,开发者构建了 Simple Weather 作为一个独立的、易集成的服务。核心思路如下:
- 端到端集成:单一应用处理 IP -> 经纬度 -> 天气查询全链路,支持百度地图逆地理编码和 Apple WeatherKit 数据源,提供 API 以方便集成到其他项目中。
- 智能缓存机制:使用 SQLite 缓存天气数据,设定过期时间,减少 API 调用,提升性能,同时优化额度的使用效率。
- 多端支持:内置网页界面和 REST API 接口,一键部署,支持 JSON 返回格式,便于在多个项目中复用。
- 轻量级设计:纯 Go 实现,无外部依赖,易于容器化部署,支持密钥通过环境变量管理,确保在个人项目中的无缝集成。
2. 当前架构的核心优点
高效数据链路
- 从用户 IP 自动解析位置,经纬度转换后查询 WeatherKit,实现一站式天气预报,利用 Apple Developer 的高额度确保可靠调用。
- 支持实时查询和历史数据查看,数据来源可靠(Apple WeatherKit)。
智能缓存
- 使用 SQLite 作为本地数据库,缓存查询结果,支持自定义过期时间,减少 API 开销,高效利用 50 万次月额度。
- 自动处理缓存命中/失效逻辑,确保数据新鲜度与性能平衡。
多端适配
- 网页界面:简单 HTML 支持当前位置天气查看,无需额外前端框架。
- API 接口:RESTful 设计,支持 GET 请求返回 JSON 天气预报,便于集成到其他应用,如个人博客或 IoT 项目。
易于部署与维护
- 单一二进制文件,跨平台编译(Linux、macOS、Windows)。
- 环境变量配置密钥,避免硬编码,便于在多个项目中部署和集成。
3. 典型使用场景与示例
网页查看当前位置天气
运行应用后,访问 http://localhost:8080/weather
即可查看基于 IP 的当前位置天气。应用会自动从 IP 获取经纬度,查询 WeatherKit 并渲染简单网页。
API 调用返回天气预报
Simple Weather 的核心是为其他项目提供易集成的 API,例如在个人博客或 IoT 应用中调用以获取当地天气。支持通过 API 接口查询指定位置天气,例如:
curl "http://localhost:8080/api/weather?lat=39.9042&lon=116.4074"
在其他项目中集成时,只需通过 HTTP 请求调用此 API,即可轻松获取天气数据,无需重复实现 IP 到经纬度的转换逻辑。
4. 总结
Simple Weather 以简单、高效、集成为核心,充分利用 Apple Developer 的 WeatherKit API 额度,彻底简化了天气预报数据的获取与展示流程。通过百度地图从 IP 获取位置的最简单方式,并提供易集成的 API,它特别适合开发者在多个个人项目中复用天气功能。无论是网页实时查看还是 API 集成,都能快速实现,支持智能缓存减少开销,是个人开发者构建天气功能的理想选择。通过纯 Go 实现和轻量设计,它助力高效开发实践,提升应用的用户体验。