# 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
这将从分页端点返回单个结果。 它采用谓词函数,并返回与谓词匹配的第一个响应。