エンドツークラウド統合開発 - コンピューティング星座 - 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 年連続で収益を倍増させています。

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

推薦する

経験共有:B2Bウェブサイト運用アイデア(ポジショニング)

A5 Webmaster Network に「B2B ウェブサイトの運用アイデア (技術編)」という...

gcore イスラエル VPS はどうですか?イスラエルのテルアビブにある VPS の簡単なレビュー

gcore vpsはどうですか? gcore のイスラエル コンピュータ ルームはどうですか? gc...

SEO への基本的なルート: 2 つのポイントと 1 つのハート

SEO を効果的に行う方法は数多くあり、多くの SEO 担当者によって多くのテクニックがまとめられて...

WeChatマーケティング運用に関する販売者の実践メモ

1. WeChatマーケティングを正しく理解する1. WeChatとは何ですか? WeChatはコミ...

#11.11# Maxthon ホスト、生涯 35% 割引、香港、日本、韓国、シンガポール、ドイツ CN2 を含む 20 以上のデータセンター

カンガルーカントリーと米国に登録され、シャイブラザーとチームリーダーが9年以上運営しているAoyou...

擬似独創性の観点からみたウェブサイト構築戦略の誤解に関する研究

現在、インターネットではさまざまな「疑似オリジナルツール」や「疑似オリジナルチュートリアル」が大流行...

Database as a Service (DBaaS) を使用する必要がありますか?

クラウド コンピューティングの急速な発展に伴い、トップレベルのフレームワークから始めて、全体的なデー...

地域旅行ガイドウェブサイトの開発戦略と収益ポイントの簡単な分析

観光は国民経済の発展レベルと密接な関係があります。人々の経済状況の改善と向上、外部の観光環境の改善に...

VLAN を使用して LAN および VLAN 集約リンクを設計する方法

VLANとは何ですか? VLAN (Virtual LAN) は、中国語に翻訳すると「仮想ローカルエ...

Weibo マーケティングを改善するための中小企業向けソリューション

以前、「中小企業のマイクロブログマーケティングプロセスにおける問題の分析と要約」というタイトルの記事...

Sina Weiboのマーケティング手法と手順

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo はコミュニケ...

KVM仮想マシンがゲートウェイにアクセスできない問題のトラブルシューティング

問題の解決は簡単そうに思えることが多いですが、トラブルシューティングのプロセスは複雑で時間がかかりま...

Kubernetesネットワークポリシーについてはこの記事で十分です

現在、多くの組織がアプリケーションの実行に Kubernetes を採用しています。そのため、Kub...

馬化騰:PCインターネットはプラットフォーム段階に入り、製品が王様の時代が再び到来

馬華騰新浪科技は9月11日午前、2012年中国インターネット大会が北京で開催されたと報じた。テンセン...

CKA 認定の要点: K8s ネットワーク戦略の要点をマスターする

ネットワーク ポリシーは、ポッド間のネットワーク通信ルールを定義および制御するために使用される Ku...