Delphi Azure SDK——IoT Hub、Service Bus、OAuth2 等

面向 Microsoft Azure 的原生 Pascal 工具包:通过 MQTT 或 AMQP 将设备连接到 Azure IoT Hub、在带 CBS 身份验证的 AMQP 1.0 上的 Azure Service Bus 上发送/接收消息、使用 Azure AD OAuth2 和 JWT 签名请求、与 Azure OpenAI 通信,并从任何 Azure REST API 的 OpenAPI 规范生成强类型客户端——全部来自一组连贯的 sgcWebSockets 组件。

面向每个 Azure 界面的 Pascal 组件

无需 .NET 运行时、无需 Azure CLI、无需 PowerShell 桥——只需直接与 Azure 端点通信 HTTPS、MQTT、AMQP 和 OAuth2 的 Delphi 组件。

Microsoft Azure 公开了数百个 REST API 以及少量流式协议:用于资源管理器、Cognitive Services、Storage、Cosmos DB 和 Azure OpenAI 的 HTTPS;用于 IoT Hub 设备到云消息传递的 MQTT 3.1.1 / 5;用于 Service Bus 队列、主题和 Event Hubs 的 带 CBS(基于声明的安全)身份验证的 AMQP 1.0。sgcWebSockets 为所有三种传输提供原生组件——用于 IoT Hub 的 TsgcWSAPI_AzureIoT、用于 Service Bus 的 AMQP 1.0 客户端,以及带 OAuth2 + JWT 辅助方法的 TsgcHTTPClient 用于其他所有内容——加上为 OpenAPI 中记录的任何 Azure API 发出 Pascal 类的 sgcOpenAPI 代码生成器。

身份验证清晰地映射到 Pascal:租户 ID、应用程序(客户端)ID 以及客户端密钥或证书支持的私钥驱动 Azure AD OAuth2 客户端凭据流;生成的 JWT 访问令牌携带一个或多个 https://management.azure.com/.default(或服务特定)范围,并进入每个 Authorization: Bearer 标头。对于 Service Bus,CBS 握手在打开任何数据链接之前在特殊的 $cbs 链接上作为 AMQP 帧重用相同的令牌。该库自动处理生命周期。

核心组件

TsgcWSAPI_AzureIoTTsgcAMQPClientTsgcHTTPClientTsgcOAuth2ClientTsgcJWTClient

传输

HTTPS / HTTP/2、基于 TCP / WebSocket 的 MQTT 3.1.1 + 5、基于 TCP / WebSocket 的 AMQP 1.0。

平台

Windows、macOS、Linux、iOS、Android、.NET。

代码生成器

sgcOpenAPI 使用 Azure REST 规范并发出 Pascal 客户端类。

一流包装器 + 生成的 SDK

Azure IoT Hub

TsgcWSAPI_AzureIoT——带 SAS 令牌或 X.509 双向 TLS 身份验证的 MQTT 3.1.1 / 5、设备孪生、直接方法、云到设备消息、文件上传。

Azure Service Bus (AMQP 1.0)

TsgcAMQPClient 使用 Service Bus 所需的 CBS 身份验证握手通信 AMQP 1.0——队列、主题、订阅、会话、计划消息和死信路由。

Azure Event Hubs

相同的 AMQP 1.0 客户端——用于高吞吐量遥测摄取的分区事件流,带消费者组偏移管理。

Azure Storage

通过带共享密钥或 Azure AD 身份验证的 HTTPS 进行 Blob、Queue 和 Table 存储——上传、下载、SAS URL 和租约管理。

Azure OpenAI

TsgcHTTP_API_OpenAI 与您的 Azure OpenAI 资源通信——聊天、嵌入、函数调用和流式传输,使用部署 ID 代替模型名称。

Azure Functions

对函数 URL 的 HTTPS POST / GET 调用,带函数密钥、系统密钥或 Azure AD 身份验证。

Azure Cognitive Services

Speech (STT / TTS)、Vision、Language、Translator 和 Document Intelligence——所有都可通过带 Bearer 或订阅密钥身份验证的 HTTPS 访问。

生成的 Azure SDK

sgcOpenAPI 为发布 OpenAPI 文档的任何 Azure REST API 发出 Pascal 客户端类——Resource Manager、Key Vault、Cosmos DB、App Service、Logic Apps 等。

端到端的 Azure AD OAuth2 + JWT

Azure 的现代身份模型统一:在 Azure AD 中注册应用程序,授予所需的 API 权限(例如 Service Bus 数据所有者、IoT Hub 数据贡献者、Cognitive Services 用户),并使用 OAuth2 客户端凭据流(用于服务到服务)或授权代码流(用于最终用户数据)进行身份验证。TsgcOAuth2Client 驱动两者;当您更喜欢基于证书的身份验证而非共享密钥时,TsgcJWTClient 签署客户端断言。生成的 bearer 令牌直接馈送每个 HTTPS 调用,并且 Service Bus / Event Hubs 上的 CBS 帧重用相同的 JWT——没有重复的凭据管理。

通过 AMQP 1.0 向 Azure Service Bus 发送消息

一个 25 行的代码片段,使用共享访问签名进行身份验证、用 CBS 握手打开 AMQP 1.0 连接并发布到队列。

uses
  sgcAMQP_Client, sgcAMQP_Classes_1_0;

var
  vAMQP: TsgcAMQPClient;
begin
  vAMQP := TsgcAMQPClient.Create(nil);
  try
    vAMQP.Version       := amqp100;
    vAMQP.Host          := 'my-namespace.servicebus.windows.net';
    vAMQP.Port          := 5671;
    vAMQP.TLS           := True;

    // CBS authentication with a SAS token
    vAMQP.Authentication.Mode        := amqpAuthCBS;
    vAMQP.Authentication.User        := 'RootManageSharedAccessKey';
    vAMQP.Authentication.Password    := 'SharedAccessSignature sr=...&sig=...&se=...&skn=RootManageSharedAccessKey';

    vAMQP.Connect;
    try
      vAMQP.SendMessage('orders',
        '{"orderId":1234,"total":42.50}');
    finally
      vAMQP.Disconnect;
    end;
  finally
    vAMQP.Free;
  end;
end;

带 SAS 令牌的 MQTT 设备客户端

Azure IoT Hub 接受 TCP 端口 8883 或 WebSocket 端口 443 上的 MQTT 3.1.1 或 5(带 IoT Hub 特定的主题模式)。TsgcWSAPI_AzureIoT 处理连接、SAS 令牌签名、设备孪生同步、直接方法调度和云到设备消息通道——在 Windows、Linux 和移动目标上使用相同的源代码。

uses
  sgcWSAPI_AzureIoT;

var
  vIoT: TsgcWSAPI_AzureIoT;
begin
  vIoT := TsgcWSAPI_AzureIoT.Create(nil);
  try
    vIoT.Authentication.SharedAccessKey.HostName := 'my-hub.azure-devices.net';
    vIoT.Authentication.SharedAccessKey.DeviceId := 'device-001';
    vIoT.Authentication.SharedAccessKey.Key      := 'BASE64-DEVICE-KEY==';

    vIoT.OnMQTTConnect           := DoMQTTConnect;
    vIoT.OnMQTTPublish           := DoMQTTPublish;
    vIoT.OnDeviceTwinDesired     := DoDeviceTwinDesired;
    vIoT.OnDirectMethod          := DoDirectMethod;

    vIoT.Active := True;
  finally
    vIoT.Free;
  end;
end;

三个步骤完成您的第一次 Azure 调用

1. 安装

将 sgcWebSockets 放入您的 Delphi 或 C++Builder IDE——Delphi 7 至 13 的每个版本一个包。下载试用版

2. 注册 Azure AD 应用

创建一个应用注册,生成客户端密钥或上传证书,并为您要调用的服务授予 API 权限。

3. 放置组件

对于 IoT 使用 TsgcWSAPI_AzureIoT,对于 Service Bus / Event Hubs 使用 AMQP 1.0 客户端,对于任何 REST 使用 TsgcHTTPClient + TsgcOAuth2Client

相关博客文章

基于 AMQP 1.0 的 Azure Service Bus + CBS 身份验证

Azure Service Bus 和 Event Hubs 所需的 AMQP CBS 握手的分步演练。

Azure IoT 文件上传

使用 IoT Hub 的 blob 存储上传流程发送大于 MQTT 消息限制的遥测负载。

从 RAD Studio 访问 Azure OpenAI

TsgcHTTP_API_OpenAI 指向您的 Azure OpenAI 部署以进行聊天、嵌入和函数调用。

今天就在您的 Delphi 应用中发布 Azure 集成

下载试用版——IoT Hub、Service Bus (AMQP 1.0) 和 Azure OpenAI 演示随附即可编译。