c# - Web API, C# - 递归调用文档库 API 以获取所有内容
问题描述
我正在使用文档库。它可能包含文件夹和文件。我的要求是使用 API ( https://some.domain.com/folder/{id} )从文档库中获取所有内容
我目前的逻辑是使用 STACK
在根文件夹 -
public async Task<Content> RetrieveDocuments(string url, string id)
{
var files = new List<string>();
var stack = new Stack<string>();
stack.Push(id);
while (stack.Count > 0)
{
var roundId = stack.Pop();
var response = Make An API call (https://some.domain.com/folder/{id})
if (response != null)
{
response.Folders?.ForEach(f => stack.Push(f.FolderId));
response.Files?.ForEach(f => files.Add(resourceRegex.Replace(f.Path, "/")));
}
}
return files;
}
现在这里的问题是-如果递归放置的文件夹中有很多文件..它变得非常耗时,并且此函数调用通常会导致超时。
任何人都可以提出更好的方法。
解决方案
这个问题很难解决,它实际上取决于文件夹的结构。最大的问题是,在前一个请求完成之后,您正在等待执行下一个请求。
您正在实现的算法是 BFS(但在这种情况下,如果它是 DFS 或 BFS,则没有区别)。您可以尝试实现它以并行运行,但感觉真的很难。
我认为您可以尝试一种混合解决方案,您可以在其中读取第一个文件夹,然后并行读取所有第一级文件夹。以下是有关如何实现并行发送请求的提示:https ://www.michalbialecki.com/2018/04/19/how-to-send-many-requests-in-parallel-in-asp-net-核/
无论如何,当您无法控制 API 时,我认为没有一个好的解决方案。您可能只需要延长超时时间。
祝你好运!:)
推荐阅读
- php - Symfony 4 - 修改表单生成的单选按钮上的字段“名称”
- swift - 运算符函数'>'要求'UserRating'符合'BinaryInteger' - SwiftUI ObservableObject
- python-3.x - 只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是生成 rnn 的有效索引
- reactjs - React.js:传递给 axios POST 请求时 JSON 无效
- python - 如何在 Python 中将图片从 url 上传到剪贴板
- ruby-on-rails - 在删除用户方法中传递条件时出错
- reactjs - 设置数组对象的状态
- java - 当我运行 Java 程序时,我的 ntellij-idea-ultimate-edition 总是转储
- python-3.x - 在每个基因序列之后添加列表项
- django - 使用 Django Channels 实现简单的服务器发送事件流