このドキュメントでは、HarmonyOS クライアントで Alibaba Cloud OSS SDK と HTTPDNS を統合する方法について説明します。
1. 背景
Alibaba Cloud Object Storage Service (OSS) は、開発者がプロファイル写真、画像、音声、動画などのファイルをさまざまなアプリケーションに簡単に保存およびアクセスできる、汎用クラウドストレージサービスです。 HarmonyOS で OSS を使用するには、OSS HarmonyOS SDK を統合します。
ファイル転送の安定性と速度を向上させるために、HTTPDNS SDK と OSS HarmonyOS SDK を組み合わせて OSS ドメイン名を解決できます。 この組み合わせは、効果的なハイジャック対策を提供し、DNS 解決を高速化します。 これにより、アプリケーションが OSS にアクセスする際のネットワークエクスペリエンスが向上します。
2. 統合手順
HarmonyOS で HTTPDNS と OSS SDK を統合するには、次の 2 つの主要な手順に従います。
HTTPDNS 解決機能を統合した
rcp.Sessionを作成します。このカスタムセッションを使用して OSS クライアントを初期化します。
2.1 HTTPDNS を統合したセッションを作成する
まず、rcp.Session インスタンスを作成します。 次に、カスタム DNS 解決ルールをその構成に埋め込みます。 このルールは、HTTPDNS サービスを呼び出してドメイン名を解決します。
HTTPDNS 統合プロセスの詳細については、「HarmonyOS SDK 統合」をご参照ください。
import { httpdns } from '@aliyun/httpdns';
import { rcp } from '@kit.RemoteCommunicationKit';
/**
* Alibaba Cloud HTTPDNS 解決機能を統合したネットワークセッション (rcp.Session) を作成します。
*
* @param httpdnsAccountId Alibaba Cloud HTTPDNS AccountId。
* @returns DNS 解決ルールで構成された rcp.Session インスタンス。
*/
async function createHttpDnsEnhancedSession(httpdnsAccountId: string): Promise<rcp.Session> {
const httpdnsService = await httpdns.getService(httpdnsAccountId);
const sessionConfig: rcp.SessionConfiguration = {
requestConfiguration: {
dns: {
dnsRules: (host: string): string[] => {
try {
const result = httpdnsService.getHttpDnsResultSyncNonBlocking(host);
let addresses: string[] = [];
if (result.ipv4s && result.ipv4s.length > 0) {
addresses.push(...result.ipv4s);
}
if (result.ipv6s && result.ipv6s.length > 0) {
addresses.push(...result.ipv6s);
}
if (addresses.length > 0) {
return addresses; // マージされた IP アドレスのリストを返します。
}
} catch (error) {
console.error(`[HttpDNS] 解析に失敗しました: ${host}`, error);
}
// 解決に失敗した場合、または結果が返されない場合は、システムのデフォルト DNS にフォールバックするために空の配列を返します。
return [];
}
}
}
};
return rcp.createSession(sessionConfig);
}
2.2 セッションを使用して OSS クライアントを初期化する
次に、OSS クライアントを初期化するときに、前の手順で作成した rcp.Session インスタンスを構成パラメーターとして渡します。 これにより、このクライアントからのすべてのネットワークリクエストが、定義した HTTPDNS 解決ロジックを自動的に使用するようになります。
OSS SDK の統合および使用方法の詳細については、「OSS Harmony SDK (プレビュー)」をご参照ください。
import Client from '@aliyun/oss';
// createHttpDnsEnhancedSession 関数は省略されています。
/**
* HTTPDNS 拡張セッションを使用する OSS クライアントを初期化する方法を示します。
*/
async function initializeOssClientWithHttpDns() {
const YOUR_HTTPDNS_ACCOUNT_ID = 'your_httpdns_account_id'; // AccountId に置き換えてください。
const YOUR_ACCESS_KEY_ID = 'your_access_key_id'; // AccessKey ID に置き換えてください。
const YOUR_ACCESS_KEY_SECRET = 'your_access_key_secret'; // AccessKey シークレットに置き換えてください。
const YOUR_REGION = 'oss-cn-hangzhou'; // リージョンに置き換えてください。
// 手順 1 の関数を呼び出して、HTTPDNS を統合したセッションを作成します。
const httpDnsSession = await createHttpDnsEnhancedSession(YOUR_HTTPDNS_ACCOUNT_ID);
// OSS クライアントを初期化し、作成されたセッションインスタンスを渡します。
const ossClient = new Client({
accessKeyId: YOUR_ACCESS_KEY_ID,
accessKeySecret: YOUR_ACCESS_KEY_SECRET,
region: YOUR_REGION,
session: httpDnsSession, // コア: カスタムセッションを渡します。
});
console.log('HttpDNS を使用した OSS クライアントが正常に初期化されました!');
// この ossClient インスタンスは HTTPDNS を正常に統合しました。
// アップロードやダウンロードなどの後続の操作のネットワークリクエストは、HTTPDNS を介して自動的に解決されます。
// await ossClient.putObject(...);
return ossClient;
}
HTTPDNS SDK は、OSS SDK の前に初期化する必要があります。
3. まとめ
カスタム DNS 解決ルールを含む rcp.Session インスタンスを OSS クライアントに提供することにより、HarmonyOS で HTTPDNS と OSS SDK を組み合わせることができます。 この方法により、ネットワークパフォーマンスとセキュリティが最適化されます。
統合中に次の重要な点に注意してください。
初期化順序: OSS クライアントを初期化する前に、HTTPDNS サービスを初期化します。
フォールバック処理:
dnsRulesコールバックで、HTTPDNS 解決に失敗した場合、または結果が返されない場合は、空の配列([])を返します。 これにより、システム DNS へのフォールバックが可能になります。