代码之家  ›  专栏  ›  技术社区  ›  Jim

从客户端的API获取数据而不提供密钥

  •  0
  • Jim  · 技术社区  · 7 年前

    目前我正在制作一个页面,显示从API收集的数据。大多数数据在服务器端每4小时更新一次,但有些数据在客户机请求索引路由时更新。因此,由于需要更新数据,发送的索引文件会有延迟。我想收集更新后的数据页已被要求和发送,所以没有延迟。我的第一个想法是在客户端发出请求,在收集数据后,客户端将处理更新显示,但据我所知,如果不给他们API密钥,我不知道如何做到这一点。我应该用这种方法解决问题还是有更好的方法?我使用Express作为后端,Axios用于发出get请求,EJS是模板引擎。

    代码如下:

    // This is called before the data is send in a for loop
    data.gameData[i].player_count = await SteamModule.liveGetCurrentPlayers(data.gameData[i].appid);
    
    res.render('index', {data: data});
    
    // This is the function that is called
    liveGetCurrentPlayers: async (id) => {
        const res = await axios.get(`${base}/ISteamUserStats/GetNumberOfCurrentPlayers/v1/?key=${key}&appid=${id}`, {timeout: 1000}).catch(err => {
            Logger.error("Error getting updated user data per request");
            return 'Error';
        });
        if(res.data) {
            return res.data.response.player_count;
        } else {
            return 'Error';
        }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Apps-n-Add-Ons    7 年前

    (你展示的代码应该不断更新-如果没有其他信息,我无法帮助解决其他问题,但这是总体思路……)

    General Flow of data for 'server in the middle'

    哪里:

    1. 您的服务器从API服务器请求数据(所有您所说的您想要服务的各种各样的“20-ish”东西…)
    2. 当数据被更新时(或者您可能已经有了数据),您将数据发送到客户机,用当前数据更新他们的“框架”页面。
        2
  •  1
  •   Adeel Imran    7 年前

    您可以在服务器端维护您的密钥,并添加限制,这些API只能由客户端URL访问。因此,您可以访问API,它将维护您的会话并处理授权的密钥部分。

    您可以在服务器上添加安全措施,但不能在客户端添加,以保护您的密钥。