# DDB .NET 客户端
The DDB Microservices .NET Client allows access to all DDB operations in languages such as C#. Each microservice is accessed using a different nuget package.
使用不同的 Nuget 软件包访问每个微服务。
注意外部用户 - 以下部分中的许多链接涉及内部应用程序。 请与您的项目团队联系以寻求支持。
# 先决条件
.NET
这些客户针对.NET 标准 2.0。 看 这 (opens new window) 页面列表兼容.NET 版本的列表。
如果启动一个新的独立项目,建议使用.NET 6,可以从中下载 ARUP 应用 (opens new window)
Azure 工件凭证提供商
推荐的方法是使用 自动 powershell 脚本 (opens new window)
# 安装
# nuget.config
需要一个nuget.config安装 Nuget 软件包。 使用以下内容创建.csproj或.sln文件旁边的文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="ddb" value="https://pkgs.dev.azure.com/ovearup/_packaging/ddb/nuget/v3/index.json" />
</packageSources>
</configuration>
# 软件包
每个微服务由不同的 Nuget 软件包提供。 可以使用命令安装软件包:
dotnet add package <package name> --interactive
可用的软件包是:
Arup.DDB.CommentsService( API 文档 (opens new window) )Arup.DDB.EnvironmentContextService( API 文档 (opens new window) )Arup.DDB.ParameterMetadataService( API 文档 (opens new window) )Arup.DDB.ParameterService( API 文档 (opens new window) )Arup.DDB.QAService( API 文档 (opens new window) )Arup.DDB.ReferenceDataService( API 文档 (opens new window) )Arup.DDB.UserService( API 文档 (opens new window) )
# 配置
你需要一个 Azure AD 应用程序注册 (opens new window) 对于访问 API 的客户端。 您需要为应用程序配置示波器和重定向 URI。
# 范围
范围是在API permissions页面上配置的。 这些可以通过Add a permission添加,然后选择APIS my organization uses,最后选择DigitalDesignBriefAPI。 所需的许可是user_impersonation。 一旦添加了这些,他们将需要使用Grant admin consent for Arup批准,这将需要在服务票中登录。
# 重定向 URI
您还需要为应用程序配置重定向 URI。 这是在Authentication页面上完成的。 对于桌面应用程序,选择Add a platform,然后选择Mobile and desktop applications,最后选择https://login.microsoftonline.com/common/oauth2/nativeclient。 对于其他应用程序,请按照Authentication页面上的说明进行操作。
# 用法
DDBClient 对象为每个微服务配置身份验证和环境。 然后,可以使用客户端上的扩展方法请求每个安装的微服务。 为桌面应用程序提供了令牌采集的实施。 其他应用程序(例如服务器)将需要通过实现ITokenAcquisition接口来实现自己的令牌采集。 然后可以将其传递到构造函数中的DDBClient或DDBClientFactory。
string clientId = "<client id>";
var ddbClient = new DDBClient(Environment.Sandbox, clientId);
var commentsService = ddbClient.GetCommentsService();
foreach (var comment in (await commentsService.GetCommentsAsync()).Comments)
{
Console.WriteLine(comment.Content);
}
# 客户工厂
还提供了一个DDBClientFactory类,该类允许为给定环境创建DDBClient对象,而工厂则处理身份验证。 在使用依赖注入的情况下,这可能很有用。
# 分页
提供了用于使用分页端点的辅助功能。 这些在Helpers静态类中找到。
分页辅助功能简化了反复调用端点以返回分页的结果列表。 一个示例签名是:
IAsyncEnumerable<O> Unpaginate<T, O>(RequestFunction<T> requestFunction, Func<T, IEnumerable<O>> getInner, Func<T, string> getAfter)
requestFunction是将after参数传递给 DDB 函数的函数,最初传递为 null。
_111从结果响应中获取内部集合。
getInner从结果响应中获取_113 cursor。
例如:
var results = Helpers.Unpaginate(
after => parameterService.GetAllParametersAsync(after: after, project_id: projectId),
t => t.Parameters,
t => t?.Paging?.Cursors?.After
);
# Helpers.Unpaginate
这可以从_115 core 3.1 中获得,建议您在可用时使用它,因为它会在迭代时懒惰地发出每个请求,而不是必须将所有结果检索到内存中。 它返回getAfter,并带有 System.Linq.Async (opens new window) 安装的软件包可以使用熟悉的 LINQ 方法进行操作。
# Helpers.UnpaginateAll
这通过重复调用提供的请求方法来返回单个对象列表,直到收集所有结果为止。 通常,只有在after不可用的情况下才能使用。 提供了一个超负荷,该过载具有附加的转换功能,从而使结果在被添加到列表中之前可以转换。
# Helpers.GetPaginatedFirstOrDefault
这将从分页端点返回单个结果。 它采用谓词函数,并返回与谓词匹配的第一个响应。