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

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

推薦する

GoogleとBaiduのもう一つのアイデンティティ:ドメイン名登録業者

この記事を始める前に、まず明確にしておきたいのは、Google は長い間世界トップクラスのドメイン名...

言葉が出ません!私は Java の面接に来ましたが、なぜビッグデータ用の Kafka について質問するのですか?

みなさんこんにちは。私はNezhaです。数日前、私の友人が面接に行き、Kafka トランザクションに...

コンピューティングパワーの「発電所」が次々と建設されています。プラグアンドプレイのコンピューティングパワーはどれくらい遠いのでしょうか?

第二次産業革命の主なテーマが電気であったとすれば、第三次産業革命の主なテーマはコンピューティング能力...

第8回SEOランキングカンファレンス2018が成功裏に終了し、業界リーダーがコンテンツマーケティングの今後の発展について議論しました。

月収10万元の起業の夢を実現するミニプログラム起業支援プラン9月20日、2018年コンテンツマーケテ...

omn​​is-大量のサーバーが60%オフで販売中、アリゾナデータセンター

omn​​is.com は 1999 年に設立された老舗ホスティング会社で、米国アリゾナ州にコンピュ...

インターネット上で疑似オリジナルコンテンツを作成する4つの簡単な方法

最近では、フォーラムやウェブサイトのコンテンツのほとんどはインターネットから抜粋されているため、記事...

実践的な共有: ウェブサイトの直帰率を効果的に削減するためのいくつかの鍵!

直帰率は、ウェブサイトが訪問者に人気があるかどうかを示す重要な指標であり、検索エンジンによるウェブサ...

小紅樹の十字路:草を植えるコミュニティ?

コンテンツ コミュニティはユーザー ロイヤルティが高く、利用時間も長いですが、収益化への道は常に非常...

CIO: マルチクラウド戦略を採用することの長所と短所、そしてアドバイス

パブリック クラウド市場における競争により、CIO はソフトウェアやインフラストラクチャをレンタルす...

cloudatcost-1 USD/月/512 MB RAM/10 GB ハードドライブ/500 GB トラフィック

CloudAtCost は、カナダで新たに設立されたクラウド ホスティング プロバイダーです。サーバ...

電子商取引の次の10年に関する3万語の洞察

電子商取引業界に関する当社の見解消費の価値への回帰意識の覚醒は、スマイルカーブの両端における消費とブ...

ブランドはどのようにマーケティングを行うのでしょうか?もしAppleがリンゴを売っていたら、あなたはそれを買いますか? ?

まず、2つの興味深いマーケティング仮説を見てみましょう。仮説 1: いつか、Apple は本当にリン...

クラウドからクラウドインテリジェンスまで、Alibaba Cloud は何をリリースしましたか?

[51CTO.com からのオリジナル記事] 10 年前、ジャック・マー氏は「クラウドなしに未来はな...

メーカー各社は価格競争に突入し、クラウド市場は「病的な競争」に陥っている

価格競争ですでに赤字に陥っていた国内クラウドベンダーは、再び大きな危機に直面している。最近、2017...