エンドツークラウド統合開発 - コンピューティング星座 - Cloud Functions

エンドツークラウド統合開発 - コンピューティング星座 - Cloud Functions

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​

1. はじめに

以前の記事では、中国の干支を計算するさまざまな方法を紹介し、サーバーレス クラウド関数コンピューティングも使用しました。しかし、当時はクラウド機能の呼び出しに Java が使用されていました。今回はエンドクラウド統合開発が直接使用されるため、はるかに便利です。クラウド機能 SDK を手動で統合する必要はありません。さらに、エンドサイドのコード開発とクラウドサイドのコード開発をDevEco Studio内で完結し、クラウド機能やクラウドデータベースをワンクリックでデプロイできます。効果を見てみましょう。

2. 効果

3. 説明

エンドクラウド統合プロジェクトの作成についてはここでは紹介しません。公式の詳細チュートリアル「エンドクラウド統合開発プロジェクトの作成 - エンドクラウド統合開発 - アプリケーション/サービス開発 - DevEco Studio ユーザーガイド (HarmonyOS) - ツール - HarmonyOS アプリケーション開発」に移動できます。エンドクラウド統合プロジェクトの構造は以前とは異なり、CloudProgram モジュールが追加されています。以下では、クラウド側の開発からエンドサイドの開発まで、プロジェクト開発について紹介します。

4. クラウドサイド開発

1. CloudProgram モジュールを展開し、cloudfunctions ディレクトリを右クリックして、カスタム クラウド関数を作成します。

2. function-config.json ファイルを開き、authType を apigw-client に変更します。
 {
「ハンドラ」 : 「zodiacFun.myHandler」
「トリガー」 : [
{
「タイプ」 : 「http」
「プロパティ」 : {
"enableUriDecode" : true
「認証フラグ」 : 「true」
「authAlgor」 : 「HDA-SYSTEM」
「認証タイプ」 : 「apigw-client」
}
}
]
}
3. zodiacFun.ts ファイルを開き、独自のクラウド関数ロジックを記述します。十二支の計算方法がここに書かれており、その結果がクライアントに返されます。
 myHandler = async関数(イベントコンテキストコールバックロガー) {
// パラメータを印刷
ロガーinfo ( "**event: " + JSON . stringify ( event ))
//12星座を定義する
十二支[ "申""鶏""犬""豚""鼠"、 "牛""虎""兎""龍""蛇""馬""羊" ] とします。

//パラメータをオブジェクトパラメータに変換する
イベント本文= JSON解析(イベント.本文);
// 年に応じて星座の添え字を計算する
idx = parseInt (イベント.本文.) % 12 とします
// 星座を取得する
sx = zodiac [ idx ]とします
// HTTPレスポンスオブジェクトを生成する
res =新しいコンテキストとしますHTTPResponse ({ "zodiac" : sx }, {
「faas コンテンツ タイプ」 : 「json」
}, "application/json" , "200" );

// 折り返し電話
コールバック( res );

};

エクスポート{ myHandler };
4. クラウド側のコードを AGC にデプロイします。カスタム クラウド関数ディレクトリを右クリックし、[関数のデプロイ] を選択して、Serverless に自動的にデプロイします。ログインしていないというメッセージが表示された場合は、正常にログインしてから再度デプロイメントを実行してください。

5. クラウド側の開発が完了しました。 AGC -> Cloud Function にログインし、デプロイしたクラウド関数を見つけて、カスタム クラウド関数をテストできます。

5. デバイス側の開発

1. まず、ターミナルモジュールの構造を見てみましょう。

2. common ディレクトリには、Log クラスなどのいくつかの共通カプセル化クラスが含まれています。コンポーネント ディレクトリにはカスタム コンポーネントが含まれます。エントリ可能性は自動的に生成され、ライフサイクルを含む EntryAbility クラスが含まれます。 pages ディレクトリには UI レイアウト ページが含まれます。サービス ディレクトリには、クラウド側インターフェースの呼び出しなどのビジネス ロジック クラスが含まれています。 3. このセクションでは、サービス ディレクトリとページ ディレクトリ内の作業のみを紹介します。まずはAppGallery Connectへの接続方法をご紹介します。これを処理するために、ここでは別のファイルが使用されます。

サービスディレクトリ内のAgcConfig.ts

 '@hw-agconnect/api-ohos'からagconnectをインポートします
"@hw-agconnect/core-ohos"をインポートします
"@hw-agconnect/auth-ohos"をインポートします
'@hw-agconnect/auth-types-ohos'をインポートします

'../common/Log'からLogをインポートします

const TAG = "[AGCConfig]" ;

エクスポート関数getAGConnect (コンテキスト) {
試す{
agconnect.instance () 。 init (コンテキスト) ;
ログinfo ( TAG「xx init AGC SDK 成功」 );
agconnectを返します
}
キャッチエラー){
ログエラー( TAG「xx initAgcSDK が失敗しました」 + err );
}
}

サービスディレクトリ内の Function.ts

 '@hw-agconnect/api-ohos'からagconnectをインポートします
"@hw-agconnect/function-ohos"をインポートします
'../common/Log'からLogをインポートします
'./AgcConfig'から{ getAGConnect }をインポートします
const TAG = "[AGCFunction]" ;
エクスポート関数zodiac ( context , params : any ): Promise <文字列> {
コンソールinfo ( 'xx 関数パラメータ: ' + JSON . stringify ( params ))
新しいPromiseを返します((解決拒否) => {
// AGC接続を取得する
getAGConnect (コンテキスト);
関数Resultを実行します
// クラウド関数のコールバックを取得する
functionCallableを agconnect とます関数()。 wrap ( "zodiacfun-$latest" );
// クラウド関数を呼び出すためにパラメータを渡す
関数呼び出し可能。 (パラメータ)を呼び出しますそれから(( ret :任意) => {
ログ情報(タグ「xx 星座機能成功」 )
// 正常に返された結果セットを取得します
関数Result = ret取得値();
ログinfo ( TAG"xx Zodiac 関数が呼び出され、返された値: " + JSON . stringify ( ret . getValue ()));
// 結果セットをインターフェースに返す
解決します( functionResult . zodiac );
})。 catch ((エラー: any ) => {
ログerror ( TAG「xx エラー - 黄道帯関数の結果を取得できませんでした。」 );
ログerror ( TAG , "xx エラーの詳細: " + JSON . stringify ( error ));
拒否(エラー);
});
});
}

ページディレクトリ Index.ts ここにページレイアウトがあります。ここで上記のような効果が実現されます。

 '../services/Function'から{ zodiac }をインポートします

@エントリー
@コンポーネント
構造体インデックス{
//選択した年を保存する
@:番号= 2022
// 星座を計算する
@生まれた:文字列= "?"
// 計算中でしょうか?
@状態フラグ:ブール値= false

// 星座を計算する
ゲットボーン(){
// 計算中としてマーク
これフラグ= true ;
コンソールinfo ( 'xx ページ年: ' + this . year )
//パッケージパラメータ
パラメータ= {
「年」これ
}
// 関数の呼び出し
星座( getContext ( this )、 params )。それから(( res ) => {
// 計算完了
これフラグ= false ;
// 結果を星座変数に代入する
これ生まれた=生まれた;
})。キャッチ((エラー) => {
// 計算完了
これフラグ= false ;
コンソールerror ( 'xx エラー: 'err && err . message );
});
}

建てる() {
スタック(){
if ( ! this . flag ) {
({スペース20 }){
テキスト( '年を選択してください' )
.フォントサイズ( 20 )
.fontWeight (フォント太字)

// 年を選択
カラム() {
テキスト(この.+ '' )
.フォントサイズ( 20 )
.fontWeight (フォント太字)
パディング( 10 )
.幅( 100 )
境界線({: 1半径: 8 })
}
.bindMenu ([
{: '2006'アクション: () => { this .= 2006 ;これ生まれた= '?' } },
{: '2007'アクション: () => { this .= 2007 ;これ生まれた= '?' } },
{: '2008'アクション: () => { this .= 2008 ;これ生まれた= '?' } },
{: '2009'アクション: () => { this .= 2009 ;これ生まれた= '?' } },
{: '2010'アクション: () => { this .= 2010 ;これ生まれた= '?' } },
{: '2011'アクション: () => { this .= 2011 ;これ生まれた= '?' } },
{: '2012'アクション: () => { this .= 2012 ;これ生まれた= '?' } },
{: '2013'アクション: () => { this .= 2013 ;これ生まれた= '?' } },
{: '2014'アクション: () => { this .= 2014 ;これ生まれた= '?' } },
{: '2015'アクション: () => { this .= 2015 ;これ生まれた= '?' } },
{: '2016'アクション: () => { this .= 2016 ;これ生まれた= '?' } },
{: '2017'アクション: () => { this .= 2017 ;これ生まれた= '?' } },
{: '2018'アクション: () => { this .= 2018 ;これ生まれた= '?' } },
{: '2019'アクション: () => { this .= 2019 ;これ生まれた= '?' } },
{: '2020'アクション: () => { this .= 2020 ;これ生まれた= '?' } },
{: '2021'アクション: () => { this .= 2021 ;これ生まれた= '?' } },
{: '2022'アクション: () => { this .= 2022 ;これ生まれた= '?' } },
{: '2023'アクション: () => { this .= 2023 ;これ生まれた= '?' } },
{: '2024'アクション: () => { this .= 2024 ;これ生まれた= '?' } },
{: '2025'アクション: () => { this .= 2025 ;これ生まれた= '?' } }
])

// ボタン操作を計算する
ボタン( '計算' 、 { type : ButtonType . NormalstateEffect : true })
.フォントサイズ( 18 )
境界半径( 8 )
.幅( 100 )
.margin ({: 20 })
.onClick (() => {
// 年に基づいて星座を計算します
これ取得誕生()
})

// 計算結果を表示する
テキスト( `${ this . year }の星座は ${ this . born }です` )
.フォントサイズ( 20 )
.fontWeight (フォント太字)
}
.width ( '100%' )
高さ( '100%' )
.padding ({上部: '33%' })
}それ以外{
// 計算中
読み込みの進行状況()。(.)
backgroundColor (.透明)
}
}
}
}

VI.結論

クラウド側でのクラウド関数の呼び出しは非同期であり、結果をすぐに返すことができないため、操作中に効果があまり明らかではないことをユーザーに知らせるために、ここで LoadingProgress コンポーネントが追加されます。録画中にネットワーク速度が非常に速くなり、LoadingProgress コンポーネントが点滅して消える場合があります。ネットワークが遅い場合、クラウド関数が応答を返すまで LoadingProgress は回転し続け、その後 LoadingProgress は消えます。

オープンソースの詳細については、以下をご覧ください。

51CTO オープンソース基本ソフトウェアコミュニティ

​​https://ost..com​​

<<:  Bosi Cloud は、Amazon Cloud テクノロジーを活用して中国企業のグローバル展開とクラウドへの移行を実現し、5 年連続で収益を倍増させています。

>>:  マルチクラウド開発者になる方法

推薦する

百度の大規模アップデートにより、サイトの重量、トラフィック、外部リンクが急激に減少した

最適化担当者として、毎日出勤時にまず行うこととして、サイトの最適化状況を確認する人が多いと思います。...

深圳経済特区で過去40年間に人気を博したインタラクティブ製品の裏話

「突破」「最速」「流行」…写真をアップロードするだけで、テーマの異なる8つのコミックストーリーを体験...

物流体験の向上:タオバオの4つの金冠店の倉庫レイアウト技術

著者: ウー・ウェンミ良い製品を作ることを前提に、倉庫と物流の発展は消費者の物流体験を大幅に向上させ...

ウェブサイトの降格や禁止は、実際には検索エンジンによる警告ゲームです。

ウェブサイトがKアウトされる事件が相次いでいます。6月から現在まで、ウェブサイトがKアウトされること...

#blackfriday# hostus - 年間 50 ドル / 6G メモリ / 200g ハードドライブ / 7T トラフィック / 7 つのデータセンター

Hostus のブラック フライデー プロモーションが始まりました。6G メモリを搭載した超ハイエン...

コンテンツ成長戦略ホワイトペーパー

40年前、中国のマーケティング業界は新聞やテレビの広告から始まり、広告を出す余裕のあるブランドはほん...

Sangfor Private Cloudが「2020年中国IT産業優秀ソリューション賞」を受賞

このほど、51CTOが主催する「中国企業『IT印象◆IT勢いを解放しデジタル時代を加速させる』年度選...

park-web: ロシアのノボシビルスクサーバー、1Gbpsの専用帯域幅、中国本土への高速直接接続

ここで、2006年に設立されたロシアの老舗ホスティング会社、park-webをおすすめします。主な理...

hostdime - 仮想ホスト/リセラーがまもなくオフラインになります。KVM 仮想 VPS が 25% オフ

世界的に有名なフルマネージド ホスティング プロバイダーである Hostdime.com は、5 月...

さまざまなニーズに応じて適切なモデルを選択するためのWeChatマーケティングモデル分析

WeChatは2011年に開始されて以来、1年半以上でユーザーベースが2億人に達しました。 WeCh...

効率性の束縛を打ち破るUAI-Trainにより、ARKieは設計ニーズをより深く理解できるようになります

過去2年間で、人工知能(AI)は研究・概念レベルから応用レベルへと徐々に移行し、ますます多くの企業が...

Tuanbao.com が賃金未払いスキャンダルに巻き込まれる: 共同購入サイトの変革は避けられない

国内の共同購入サイトの数は2010年8月以降1,000サイトを突破した。非合理的な発展により、201...

レンタカー業界の熾烈な競争の背後にある資金調達のボトルネック:資金調達が主な原動力

潘偉と趙娜が上海と北京から報告した。 「米国には2億台の自家用車があり、そのうち約300万台をレンタ...

Baiduライブラリの運用プロセスと注意すべき詳細

インターネット上の競争は激化しており、オンラインでのプロモーション方法も常に改善されています。ウェブ...