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

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

推薦する

クラウド構成エラーは、主に企業のIT管理者のせいにされる

クラウド セキュリティに関しては、特に組織が最小権限アクセス モデルから逸脱した場合、従業員は組織に...

6月9日のBaiduの大型アップデートがSEO担当者に教えてくれること

さて!昨夜はまだ、Baidu で何が起こっているのか疑問に思っていて、Baidu のランキングと G...

Geek Host: 20% オフ、香港 VPS/シンガポール VPS/ロサンゼルス C3 データセンター VPS

Geek Host は 20% オフセールを開催しており、Host Cat の割引コードもカスタマイ...

これら 5 つの業界は、どのようにして Zhihu の広告チャネルの利益を獲得するのでしょうか?

すでにZhihuのテスト運用を行っている業界や企業はどれですか?また、その結果はどうですか?今日はま...

ブランドウェブサイトのコンテンツシステムの全体的な物語スタイルは独創性よりも優れている

「インターネット上でのブランド構築とは、高品質なコンテンツとサービスを通じて、ウェブサイトのコンテン...

Mituoテンプレート:家電業界におすすめのウェブサイトテンプレート

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますMituo...

ゲーミフィケーションの運用方法を詳しく解説!

製品のユーザー運用の成長には多くの問題があります。ユーザーの活動と維持を高めるために、サインイン機能...

lunarpages-ラスベガスのサーバーが別のデータセンターに移動され、12時間停止しました

lunarpagesのラスベガスデータセンターのサーバーは12時間シャットダウンされます。理由は、デ...

直帰率と離脱率の違いについて詳しく知る

最近、私に相談に来る学生の多くが、直帰率や直帰率を下げる方法などについてばかり話していて、直帰率が何...

ブランドがオンラインでお菓子を配っていますが、どの 520 マーケティングが一番甘いでしょうか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービステキスト | 脳を燃やす...

raksmart: 無制限トラフィックの VPS、月額 2 ドルから、米国 VPS、香港 VPS、日本 VPS、韓国 VPS

Raksmart は、米国での無制限トラフィック VPS、香港での無制限トラフィック VPS、日本で...

10gbiz: ロサンゼルス cn2 gia 無制限トラフィック VPS は月額 3.58 ドルから、ロサンゼルス 200M cn2 gia 専用サーバーは月額 160 ドルから

10gbizは、米国ロサンゼルスのデータセンターでVPS・専用サーバー事業を中心に展開する新ブランド...

ユーザーグループを正確にターゲットにして、リピーターを増やす

ユーザー グループを正確に特定し、信頼できる回答を提供して、ユーザーが再度アクセスするよう促します。...