知了常识站
白蓝主题五 · 清爽阅读
首页  > 软件使用

API设计实战案例:从零构建一个天气查询接口

API设计实战案例:从零构建一个天气查询接口

你在开发一个小程序,需要实时获取城市天气。最直接的方式不是自己去爬气象局网页,而是调用一个结构清晰、易于使用的API。这背后,就是API设计的功夫。

我们以设计一个天气查询API为例,看看实际项目中该怎么动手。

明确需求:用户到底要什么?

假设你的产品只需要展示“城市今天的温度、天气状况、风速”。不需要历史数据、不需要逐小时预报。这时候,接口就不该堆一堆用不上的字段,简洁才是王道。

用户输入城市名,返回三个关键信息就够了。比如请求北京天气,响应应该是这样:

{
  "city": "北京",
  "temperature": "26°C",
  "condition": "晴",
  "wind_speed": "3.5m/s"
}

URL怎么定?直观最重要

别整花里胡哨的路径。用户要查天气,就用 /weather 最直白。城市名通过查询参数传进来:

GET /weather?city=上海

如果城市名带空格或中文,浏览器会自动编码,服务端再解码处理就行。这种设计谁看了都懂,前端同事接起来也省心。

状态码别乱用,按规矩来

城市输错了,比如“北平”,查不到怎么办?不能返回200加个错误提示。正确做法是返回404:

HTTP/1.1 404 Not Found
{
  "error": "City not found"
}

参数没传city?那是客户端犯错,返回400更合适。服务器炸了?500甩出去,顺便记个日志排查问题。这些状态码就像交通信号灯,各司其职,前后端沟通才顺畅。

加个版本号,以后好升级

上线三个月后,产品经理说要加“空气质量”字段。直接往原接口加?万一老版本App崩溃了呢。聪明的做法是发布v2:

GET /v2/weather?city=深圳

v1照常运行,v2慢慢推广。等所有客户端都切过去了,再下线旧版。这种小细节,能避免半夜被报警电话吵醒。

限流保护,别让接口被刷崩

你这个接口火了,有人写脚本每秒请求几百次。不设防的话,服务器资源很快就被耗尽。简单加个限流策略:

同一个IP每分钟最多60次请求。超过就返回429:

HTTP/1.1 429 Too Many Requests
{
  "error": "Rate limit exceeded"
}

用Redis记录每个IP的请求次数,几行代码就能搞定。别等到系统瘫痪才想起来补漏。

真实的API设计,就是在功能、性能和维护性之间找平衡。不是写完能跑就行,而是要考虑谁会调、怎么调、出问题怎么查。每一个字段、每一个状态码,都是在和未来对话。