Amazon AppSync在Android端的部署

AppSync

可以簡(jiǎn)單地理解這個(gè)功能可以做到App前端的數(shù)據(jù)和AWS上后端的數(shù)據(jù)同步,App可以對(duì)后端的數(shù)據(jù)進(jìn)行讀寫等功能。比如帶有同步功能待辦事項(xiàng)App,就可以用這個(gè)功能實(shí)現(xiàn)。

GraphQL

如果你抓取過(guò)網(wǎng)頁(yè)發(fā)送的消息包,那么你一定能理解API是個(gè)什么東西。假設(shè)我們要登陸一個(gè)網(wǎng)站,或是在京東獲取某個(gè)商品的詳細(xì)規(guī)格,我們都需要和服務(wù)器進(jìn)行交互,我們需要告訴服務(wù)器我們需要的是一個(gè)什么樣的東西,同時(shí)傳遞一些必要的參數(shù)。比如我們需要“AMD CPU”這個(gè)商品第1~50條的評(píng)論,我們的API可能就會(huì)像下面這樣:

{
"item":"AMD CPU",
"type":"comment",
"index_start":1,
"index_end":50
}

然而目前這樣的API用起來(lái)還是很麻煩的,因?yàn)楦袷蕉际枪潭ǖ?,想要查特定的某個(gè)信息可能會(huì)返回其他冗余的信息 ,因此就誕生了GraphQL,它可以更精準(zhǔn)方便的查詢自己想要的東西。
關(guān)于GraphQL更詳細(xì)的介紹可以看
https://www.howtographql.com/basics/0-introduction/
為了繼續(xù)后面的研究,這里我們只需要知道GraphQL可以很方便的描述出一個(gè)數(shù)據(jù)的結(jié)構(gòu),并且和后端的互動(dòng)一般包含Query和Mutation兩種,Query用于讀后端數(shù)據(jù),Mutation用于修改后端數(shù)據(jù)。

GraphQL在AWS中的使用

既然GraphQL可以很方便的描述出數(shù)據(jù)結(jié)構(gòu),當(dāng)然也能用作我們構(gòu)建后端數(shù)據(jù)庫(kù)的模型了!AWS中的AppSync確實(shí)也是這么做的,設(shè)計(jì)好一個(gè)GraphQL之后,導(dǎo)入到AWS,AWS AppSync能自動(dòng)根據(jù)該GraphQL搭建出對(duì)應(yīng)的數(shù)據(jù)庫(kù)。僅僅有數(shù)據(jù)庫(kù)還是不夠的,怎么樣進(jìn)行Sync呢?當(dāng)然需要對(duì)應(yīng)的動(dòng)作啦。例如App發(fā)出一個(gè)GraphQL查詢,AWS需要對(duì)該查詢做出正確的反應(yīng)才行,應(yīng)該如何反應(yīng)就被稱作Resolver,不用擔(dān)心,AWS會(huì)自動(dòng)幫我們配置好大部分Resolver。下面我們通過(guò)例子來(lái)學(xué)習(xí)一下AppSync是怎么一回事。

AppSync Eg

首先我們進(jìn)入AppSync控制臺(tái)創(chuàng)建一個(gè)新的API,選擇Event App


創(chuàng)建模型(這個(gè)模型也可以通過(guò)GraphQL直接描述)

幾步點(diǎn)完之后,我們可以進(jìn)行測(cè)試了,在該驗(yàn)證界面,我們可以看到里面的代碼有query mutation兩種類型,點(diǎn)擊箭頭分別運(yùn)行createA_test_model listA_test_models就可以看到右側(cè)分別返回了對(duì)應(yīng)的結(jié)果。


或許有人不理解這是要干什么,這樣的查詢、創(chuàng)建代碼,是在網(wǎng)頁(yè)控制臺(tái)用來(lái)測(cè)試GraphQL是否描述正確的,測(cè)試通過(guò)后就可以在App上通過(guò)同樣的查詢、創(chuàng)建代碼來(lái)對(duì)后端的數(shù)據(jù)進(jìn)行修改了。

詳解

我們?cè)賮?lái)看下整個(gè)架構(gòu)是怎樣的。從左邊欄目點(diǎn)一下Schema我們可以查到整個(gè)API對(duì)應(yīng)的結(jié)構(gòu),果然代碼是GraphQL!


再看一下Data Sources,是Amazon DynamoDB,它是根據(jù)上述Schema配置好的。

根據(jù)GraphQL配置Resouces

根據(jù)GraphQL配置Resouces

另外還有上述提到的Resolver,用于控制對(duì)某一條GraphQL命令應(yīng)該如何返回?cái)?shù)據(jù)。這里根據(jù)教程,假設(shè)要對(duì)getTodos這個(gè)命令做出反饋,步驟如下:
單擊Attach

創(chuàng)建反饋機(jī)制

創(chuàng)建好之后我們同樣進(jìn)行測(cè)試,首先創(chuàng)建一個(gè)id=123的TODO

接著我們Query一下

成功返回了我們剛才創(chuàng)建的數(shù)據(jù)!

Android端設(shè)置

通過(guò)上述流程我們大致明白了AppSync是怎樣的一個(gè)東西,并在網(wǎng)頁(yè)端進(jìn)行了操作,下面我們進(jìn)行Android的操作。教程參考:
https://aws-amplify.github.io/docs/android/start
在一個(gè)Android工程下輸入

amplify init
amplify add api
amplify push



一開始的時(shí)候push失敗了,報(bào)錯(cuò)

Amplify工具是通過(guò)CloudFormatiom模板自動(dòng)部署各種模塊的,我們可以去查詢一下發(fā)生了什么。

通過(guò)更新Amplify就可以解決掉這個(gè)問(wèn)題。

npm install -g @aws-amplify/cli -update

發(fā)現(xiàn)它同樣也創(chuàng)建了一個(gè)簡(jiǎn)單的Schema用于描述我們的數(shù)據(jù)結(jié)構(gòu),這一步實(shí)現(xiàn)的效果和我們?cè)诰W(wǎng)頁(yè)端操作的GraphQL是一致的。


但是在網(wǎng)頁(yè)上運(yùn)行的查詢、修改命令肯定和Android端用起來(lái)是不一樣的呀!這該怎么解決?這就是Amplify框架教程里面提到的CodeGen了。在所有命令跑完之后Amplify會(huì)自動(dòng)運(yùn)行該框架,根據(jù)我們?cè)O(shè)定好的Schema生成出對(duì)應(yīng)的查詢、修改等GraphQL命令以及Java代碼(所以叫CodeGen嘛?。?,在Android文件夾里面也是可以看到的。


這里我簡(jiǎn)單的跑了一下,效果就是點(diǎn)了下很多Add添加Item,然后點(diǎn)Query就可以查詢出剛才添加的Item。假如再完善一下界面,就可以做出很棒的TODO App啦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容