Получение данных из API на стороне клиента без предоставления ключа - PullRequest
0 голосов
/ 02 сентября 2018

В настоящее время я делаю страницу, которая отображает данные, собранные из 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 ]

0 голосов
/ 02 сентября 2018

Вот немного рисунка, чтобы объяснить, что я сказал в комментариях .....

(код, который вы показали, должен постоянно обновляться - без другой информации я не могу помочь ни с какой другой проблемой, но это общая идея ....)

General Flow of data for 'server in the middle'

Где:

  1. Клиент запрашивает данные у вас (вашего сервера)
  2. Ваш сервер отправляет html и css, чтобы показать «рамку» страницы (нет данных, просто что-то, что они могут увидеть и почувствовать, как что-то происходит ...)
  3. Ваш сервер запрашивает данные у API-сервера (все, что, как вы сказали, вы хотели обслуживать ...)
  4. По мере обновления данных (или, возможно, у вас их уже есть), вы отправляете данные клиенту, обновляя их страницу «frame» текущими данными.
0 голосов
/ 02 сентября 2018

Вы можете сохранить свои ключи на стороне сервера и добавить ограничение на доступ к этим API только по URL-адресу вашего клиента. Таким образом, вы получите доступ к API, и он будет поддерживать ваш сеанс и обрабатывать авторизованную часть KEY.

Все, что есть на стороне клиента, доступно, если оно работает в вашем браузере.

Вы можете добавить меры безопасности на сервере, но не на стороне клиента для защиты вашего ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...