Я пытался выполнить поисковый запрос в Microsoft Graph API, чтобы найти driveItems внутри заданной папки. Проблема в том, что поиск возвращает результаты за пределами заданной папки, намного раньше в иерархии папок - это проблема, поскольку я не хочу, чтобы мое приложение имело доступ ко всему, что не находится внутри папки.
Итак, пример структуры папок:
ParentFolder
-- A.pdf
-- B.pdf
-- ChildFolder
-- C.pdf
Согласно документации API графа, папка идентифицируется по их DriveItemID внутри данного диска. Конечно, выполнение GET для
/drives/"driveID"/items/"ChildFolderID"
творит чудеса - я могу найти папку и всю ее информацию, и списки / children только C .pdf.
Однако, Похоже, что функциональность поиска ограничена. Выполнение /drives/<driveID>/items/ChildFolderID/search(q='pdf')
возвращает любой файл PDF внутри моего диска, а не только внутри ChildFolder. То же самое верно, если я заменил часть / drive / driveID просто / me / drive, который является ссылкой на один диск с бизнес-файлами «мои файлы».
Ниже приведен мой код с использованием msgraph-sdk- javascript sdk для выполнения запроса get (это только пример, проблема не может быть с самим sdk, так как при использовании инструмента графического обозревателя возникает та же проблема).
let url = `/drives/${driveID}/items/${itemID}/search(q='${query}')?`;
if (options.cursor)
url += `$skiptoken=${options.cursor}`;
return self.client
.api(url)
.top(options.limit)
.headers({
'Content-Type': 'application/json'
}).get()
.then(data => {
console.log('data: ', data);
// ... rest of function ...
Этот объект данных имеет все мои pdf-файлы: A.pdf, B.pdf и C .pdf.
Что меня больше всего беспокоит, так это то, что запрос отлично работает внутри экземпляра sharepoint. Запрос /sites/siteID/drives/driveID/items/ChildFolder/search(q='pdf')
правильно определяет область поиска, чтобы выполнять поиск только в указанной папке. И это тот же API. Редактировать: Nevermind Sharepoint также не работает, та же проблема.