# 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 软件包访问每个微服务。

注意外部用户 - 以下部分中的许多链接涉及内部应用程序。 请与您的项目团队联系以寻求支持。

# 先决条件

# 安装

# 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

可用的软件包是:

# 配置

你需要一个 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接口来实现自己的令牌采集。 然后可以将其传递到构造函数中的DDBClientDDBClientFactory

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

这将从分页端点返回单个结果。 它采用谓词函数,并返回与谓词匹配的第一个响应。

Last Updated: 2024/6/21 11:34:44