Всем привет. Использую API в своем проекте и возник один вопрос.
Я использую API так. После того, как посетитель заходит на сайт, API запросы начинают отправляться каждые 10 секунд. Но мне не нравится то, что API запросы отправляются с каждого устройства. Например, два пользователя с разных устройств зашли на мой сайт. Получается, что отправляется не один запрос раз в 10 секунд, а с каждого устройства по одному, то есть два.
Я хочу, чтобы отправлялся только один запрос API каждые 10 секунд, независимо от количества посетителей на сайте. Я предполагаю, что это нужно сделать на сервере, или что-то в этом роде(с API работаю редко). Кто может разъяснить, как можно такое реализовать? Либо же отправить ссылки на ресурсы, в которых можно найти полезную информацию. Буду очень благодарен
Все зависит от того какое API и какую цель вы при этом преследуете.
Например, если это API прогноза погоды - то логично что запросы должны отправляться каждым посетителем т.к. прогноз погоды зависит от его метонахождения.
А если это API курсов валют - то можно сделать отправку и с сервера, так как данные одинаковы для всех посетителей.
Также вы не указали ничего про сервер - ни языка/фреймворка, ни каких-либо особенностей? Какого ответа вы ожидаете, кроме "да, можно посылать запросы в API с сервера"?
Использую API для курсов разных валют и акций, поэтому мне нужно производить отправку с сервера. Для разработки проекта использую React.js(с фреймворком Next.js).
Во-первых я не совсем понимаю, где располагается сервер. На хостинге, где расположен сам сайт, или для сервера нужен отдельный хостинг?
Во-вторых я не понимаю как сделать так, чтобы сервер не переставал работать(в отличии от API, которое отправляется с каждого устройства и работает пока открыта страница сайта).
В-третьих я так понимаю, что сервер должен быть написан на том же языке, что и сам сайт?
Во-первых я не совсем понимаю, где располагается сервер.
Там, куда вы его выложите.
На хостинге, где расположен сам сайт, или для сервера нужен отдельный хостинг?
Тут единственно верного мнения нет - можно на одном сервере, можно на разных. В целом, если сервис подразумевается высоконагруженным, то обычно да, разносят по разным серверам. Но в общем случае, и фронт и бек спокойно работают на одном.
Во-вторых я не понимаю как сделать так, чтобы сервер не переставал работать(в отличии от API, которое отправляется с каждого устройства и работает пока открыта страница сайта).
Серверная часть приложения, работает всегда, вне зависимости от того, есть посетители или нет.
Если вы имеете ввиду постоянное отправление запросов - то это зависит от того, какой ЯП/фреймворк вы используете.
В некоторых (например в Laravel) периодические задачи реализованы из коробки. Некоторые (например все фреймворки на python) отлично работают с библиотекой реализующей периодические задачи. В некоторых оптимальным вариантом будет использование cron
В-третьих я так понимаю, что сервер должен быть написан на том же языке, что и сам сайт?
spoiler
"Сайт" - крайне не совсем корректное описание. В современном вебе есть клиентская часть (как раз то, что вы подразумевали пот сайтом), она же фронтэнд и есть серверная часть, она же бекэнд. Сайтом, по крайней мере на мой взгляд, стоит называть либо всю систему в целом, либо клиентскую часть, если она не требует фронтэдна.
С какой стати? Для начала, посмотрите на вопрос с другой стороны - вот есть, например, сервер на PHP/Python/java. Как вы себе представляете клиентскую часть на этом языке? Или вот например вы работаете с финансовым api. Вы просто посылаете http-запросы и получаете ответы, не более того. А факту - это точно такой-же сервер, как тот, который вам предстоит написать и взаимодействовать с вашим сервером фронт будет так-же как и с api
Спасибо! Есть ли какие-либо руководства по созданию сервера. И как потом объединить клиентскую и серверную часть(чтобы я мог получать результаты запросов API с сервера)?
И как потом объединить клиентскую и серверную часть(чтобы я мог получать результаты запросов API с сервера)?
В общем случае - пишите логику обновления данных, которые как-то будут сохранятся у вас на сервере.
Далее реализуете выдачу этой информации по обращению к определенному url.
Но тут встает вопрос - ради чего вы хотите уменьшить количество запросов?
Если цель снизить кол-во запросов к конечному api (например у него есть лимит на запросы (условно 1000 запросов/час), а авторизация на нем происходит одним и тем-же данным) и то да, имеет смысл слать единый запрос с сервера раз в N единиц времени.
Если снять нагрузку с клиентов, то надо понимать, что в этом случае количество запросов само по себе не уменьшится. Да, они будут идти к вашему серверу и придется балансировать загрузку на нем.
Например, с помощью кеширования данных из api, как написали в ответе.
Либо же использовать сокеты.
Есть ли какие-либо руководства по созданию сервера.
Это слишком общий вопрос, зависящий от выбранного ЯП/Фреймворка, но в целом:
Вся бизнес логика должна-быть вынесена в отдельный слой.
(Если коротко - функции/методы (для контекста - назову их родительскими) которые вызываются при переходе/отправке запроса на url должны только получать сырые/выдавать готовые данные. Вся обработка, CRUD и прочее должны быть вынесены в отдельные функции, вызываемые из родительских методов/функций.
Ну и эти принципы
если вас беспокоят API запросы, которые каждый пользователь или устройство посылает каждые 10 секунд, то от этого вы не избавитесь, если хотите давать пользователям актуальную информацию. Или увеличьте интервал запросов или масштабируйте ресурсы, чтобы была возможность обрабатывать такое количество запросов. А лучше правильно настроить кеш. Если он есть, то для железа отдать тысячу ответов из кеша по нагрузке эквивалентна одному рабочему запросу