You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从英国空气质量公开API获取JSON数据并创建新端点重命名字段

最优解决方案:第三方空气质量API代理与数据转换

刚好之前做过类似的第三方API代理转换需求,给你分享几个落地性强的方案,适配不同技术栈场景:

方案1:Node.js + Express(轻量快速,前端/全栈团队首选)

这是最常用的轻量方案,用Express搭建新API端点,通过Axios请求第三方数据后做转换:

步骤&代码示例

  1. 安装依赖:
npm install express axios
  1. 编写API服务:
const express = require('express');
const axios = require('axios');
const app = express();

// 自定义API端点,供你的第三方系统调用
app.get('/transformed-air-quality', async (req, res) => {
  try {
    // 1. 请求英国空气质量公开API(这里替换成你实际用的API地址)
    const rawResponse = await axios.get('https://api.erg.ic.ac.uk/AirQuality/Data/SiteSpecies/SiteCode=MY1/SpeciesCode=NO2/json', {
      timeout: 5000 // 加超时避免阻塞
    });

    // 2. 核心数据转换逻辑:重命名字段+丢弃冗余
    const transformedData = {
      Weather: rawResponse.data.data.flatMap(item => [
        { newName: item.intensity.forecast },
        { newName2: item.intensity.actual }
      ])
    };

    // 3. 返回转换后的数据给对接系统
    res.json(transformedData);
  } catch (error) {
    // 友好的错误处理,避免暴露第三方API细节
    const errorMsg = error.response?.status 
      ? `Third-party API error: ${error.response.status}` 
      : 'Failed to fetch or process air quality data';
    res.status(500).json({ error: errorMsg });
  }
});

// 启动服务
app.listen(3000, () => {
  console.log('Transformed air quality API running on http://localhost:3000');
});

方案优势

  • 代码简洁易维护,转换逻辑直观
  • 可快速添加缓存层(比如用node-cache),减少重复请求第三方API,提升响应速度
  • 适合小团队快速落地

方案2:Python + Flask(Python技术栈首选)

如果你的团队用Python,Flask/Django是很好的选择,下面是Flask的实现示例:

步骤&代码示例

  1. 安装依赖:
pip install flask requests
  1. 编写API服务:
from flask import Flask, jsonify
import requests

app = Flask(__name__)

@app.route('/transformed-air-quality')
def transformed_air_quality():
    try:
        # 请求第三方API
        raw_response = requests.get(
            'https://api.erg.ic.ac.uk/AirQuality/Data/SiteSpecies/SiteCode=MY1/SpeciesCode=NO2/json',
            timeout=5
        )
        raw_response.raise_for_status() # 主动抛出HTTP错误
        raw_data = raw_response.json()

        # 数据转换
        transformed = {"Weather": []}
        for item in raw_data['data']:
            transformed['Weather'].append({"newName": item['intensity']['forecast']})
            transformed['Weather'].append({"newName2": item['intensity']['actual']})

        return jsonify(transformed)
    except requests.exceptions.RequestException as e:
        return jsonify({"error": f"Failed to fetch data: {str(e)}"}), 500
    except KeyError as e:
        return jsonify({"error": f"Data format mismatch: Missing field {str(e)}"}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

方案优势

  • Python处理JSON和数据映射灵活,适合复杂转换逻辑
  • 如果是大型项目,可无缝切换到Django REST Framework,做更规范的API管理

通用优化建议(必做)

  • 配置化字段映射:把原始字段和目标字段的对应关系抽成配置文件/字典,比如:
    const fieldMapping = {
      'intensity.forecast': 'newName',
      'intensity.actual': 'newName2'
    };
    
    后续修改字段无需改动核心转换逻辑,维护性拉满
  • 添加缓存:第三方空气质量数据更新频率不高,用Redis或内存缓存缓存结果,比如每15分钟刷新一次,大幅降低第三方API调用量
  • 参数验证:如果你的API需要接收日期、站点等参数,先做合法性校验,避免无效请求发送给第三方API
  • 监控告警:给API加基础监控(比如请求成功率、响应时间),避免第三方API故障影响你的对接系统

内容的提问来源于stack exchange,提问作者onclebenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:32:07