Я работаю над проектом nodejs, где мне нужно сделать несколько вызовов API ms graph, чтобы получить некоторые данные.Некоторые примеры вызовов выглядят следующим образом:
https://graph.microsoft.com/v1.0/users/{userPrincipalName}/manager
https://graph.microsoft.com/beta/users/{userPrincipalName}/notebooks
https://graph.microsoft.com/v1.0/users/{userPrincipalName}/photo/
Моя цель состояла в том, чтобы каждый раз не использовать модуль запроса для вызова выше 3 apis и получения данных отдельно.Я хотел создать какую-то вспомогательную функцию, где я мог бы передать какой URL мне нужно использовать и что такое {userPrincipalName}
, поэтому я создал graphendpoints.js для хранения всех URL
module.exports = {
manager: 'https://graph.microsoft.com/v1.0/users/userPrincipalName/manager',
notebooks: 'https://graph.microsoft.com/beta/users/{userPrincipalName}/notebooks',
photo: 'https://graph.microsoft.com/v1.0/users/{userPrincipalName}/photo/'
};
так я делаю вызов графа одной функцией по токену и URL-адресу.У меня не было каждого отдельного метода для выполнения запроса менеджера, записной книжки или фотографии и т. Д.
executeGraphApi: function (token, url) {
return new Promise(function (resolve, reject) {
let parsedBody = []
request.get({
url: url,
headers: {
authorization: 'Bearer ' + token
}
},
function (err, response, body) {
if (err) {
reject(err)
} else {
parsedBody.push(JSON.parse(body).displayName)
resolve(parsedBody)
}
})
});
}
вспомогательная функция runMSGraphApi (url) для вызова выше executeGraphApi (token, url)
var graphcallrunner = require('../../app/msgraph/graphcallrunner');
runMSGraphApi: function (url) {
return new Promise(function (resolve,reject) {
msGraph.getAccessToken()
.then(function (token) {
graphcallrunner.executeGraphApi(token,url)
.then(function (results) {
resolve(results)
})
.catch(function (error) {
reject(error)
})
})
.catch(function (error) {
console.log(error);
reject(error)
})
})
}
Потребитель этого выглядит следующим образом.Мне нужно было убедиться, что тот, кто хочет сделать вызов графа ms, просто использует runMSGraphApi () и передает правильный URL.
var graphendpoints = require('../../../msgraph/graphendpoints.js');
graphapihelper.runMSGraphApi(graphendpoints.manager),
Если вы видите выше, я выбрал вызов API api из graphendpoints.js и передал его вэтот URLЭтот URL на самом деле https://graph.microsoft.com/v1.0/users/{userPrincipalName}/manager
, где {userPrincipalName} не вводится.Как я могу динамически передать значение {userPrincipalName} в итоговую конструкцию url в executeGraphApi ().
https://graph.microsoft.com/v1.0/users/bob.bar@google.com/manager