すべてのプロダクト
Search
ドキュメントセンター

HTTPDNS:HarmonyOS での Alibaba Cloud OSS SDK と HTTPDNS の併用に関するベストプラクティス

最終更新日:Sep 09, 2025

このドキュメントでは、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 つの主要な手順に従います。

  1. HTTPDNS 解決機能を統合した rcp.Session を作成します。

  2. このカスタムセッションを使用して 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 へのフォールバックが可能になります。