Я работаю над проектом, который требует от меня:
GET ID из API1, поместите идентификаторы в массив, затем сопоставьте эти идентификаторы, используя их для второго запроса GET, где идентификаторы используются в качестве параметров для запроса API2 GET, заполняет массив идентификаторами или N для «Не существует» - этот массив затем вызывается в:
Запрос POST. Этот пост сопоставляется с возвращенным массивом из запроса GET. Если элемент не "N", он ВЫСТАВЛЯЕТ API1 с флажком: true. Если элемент "N", он отправляет нам электронное письмо с сообщением о том, что API2 отсутствует в этом проекте.
Я хочу, чтобы эта система автоматически выполняла GET и POST каждые 2 часа, поэтому я использую setInterval (не уверен, что это лучшая идея). РЕДАКТИРОВАТЬ: Cron работа будет лучшим решением.
Я работаю с NodeJS, Express, Request-Promise, Async / Await.
Вот мой псевдокод:
// Dependencies
const express = require('express');
const axios = require('axios');
const mailgun = require('mailgun-js')({ apiKey, domain });
// Static
const app = express();
app.get('/', (req, res, next) => {
// Replace setInterval with Cron job in deployment
// Get All Ids
const orders = await getGCloud();
// Check if IDs exist in other API
const validations = await getProjectManagementSystem(orders);
// If they exist, POST update to check, else, mailer
validations.map(id => {
if (id !== 'n') {
postGCloud(id);
} else {
mailer(id);
}
});
}
// Method gets all IDs
const getGCloud = async () => {
try {
let orders = [];
const response = await axios.get('gCloudURL');
for (let key in response) {
orders.push(response.key);
}
return orders;
} catch (error) {
console.log('Error: ', error);
}
}
// Method does a GET requst for each ID
const getProjectManagementSystem = async orders => {
try {
let idArr = [];
orders.map(id => {
let response = await axios.get(`projectManagementSystemURL/${id}`);
response === '404' ? idArr.push('n') : idArr.push(response)
})
return idArr;
} catch (error) {
console.log('Error: ', error);
}
}
const postGCloud = id => {
axios.post('/gcloudURL', {
id,
checked: true
})
.then(res => console.log(res))
.catch(err => console.log(err))
}
const mailer = id => {
const data = {
from: 'TESTER <test@test.com>',
to: 'customerSuppoer@test.com',
subject: `Missing Order: ${id}`,
text: `Our Project Management System is missing ${id}. Please contact client.`
}
mailgun.messages().send(data, (err, body) => {
if (err) {
console.log('Error: ', err)
} else {
console.log('Body: ', body);
}
});
}
app.listen(6000, () => console.log('LISTENING ON 6000'));
TL; DR: необходимо выполнить GET-запрос к API 1, затем еще один GET-запрос к API 2 после него (используя идентификаторы из API 1 в качестве параметров), затем отправить данные из второго GET в запрос POST, который затем либо обновляет данные API 1 или по электронной почте. Это автоматическая система, которая запускается каждые два часа.
Основные вопросы:
1. Можно ли использовать setInterval в get req?
2. Могу ли я получить запрос GET, чтобы автоматически вызвать запрос POST?
3. Если да, как я могу передать данные запроса GET в запрос POST?