技術基礎 | 用JSON在抖音上釋出動態——使用Stargate即可輕鬆實現
Cassandra是世界上經受住最多實戰考驗的資料庫,通過其快速且易於使用的資料API,讓你的程式開發升級。
本文將介紹什麼是Stargate以及Stargate的最新進展,如果您想快速瀏覽相關程式碼和動手操作指南,不妨直接跳到本文的第四節,跟著我們一起在App上釋出動態、建立頻道並管理使用者吧。
01 在Astra上使用Stargate
這對開發者來說真是個超棒的時刻。
我們將很多的API和很棒的工具整合在了一起,幫助大家構建不斷變化的全棧應用程式。如果你是一個開發者,你可能在用無模式(schemaless)資料儲存、無伺服器(serverless)架構、JSON的各種API,以及GraphQL語言等技術。
不僅如此,還有很多非常棒的框架(比如Jamstack,即JavaScript、APIs和Markup)和服務(比如Netlify)讓無伺服器應用程式的部署變得更快。
現在,由於Stargate在Astra上作為官方資料API正式發行,Apache Cassandra首次成為了這個應用棧的一部分。
我們構建的現代應用程式需要各種資料API,我們將這些API都整合到了我們的工具包中,它們會和原生的資料格式(JSON、REST、GraphQL等)協同工作。這些資料API需要支援無模式的JSON,與此同時還要提供速度和伸縮性。
最重要的是,如果想要在我們的專案中使用他們,我們至多需要幾分鐘的時間而已。
DataStax將Stargate構建於Astra,這給作為程式開發人員的我們一個自然的資料API棧,它與Jamstack或你選擇的其它無伺服器應用棧相容。
Apache Cassandra助力於Netflix、Instagram、Yelp、iCloud以及其他我們每日都用的很多應用,而在Astra上的Stargate就是構建在這個基礎堅實的NoSQL資料引擎之上的。
02 Stargate到底是什麼?
Stargate是一個開源的資料閘道器,它處於你的程式伺服器和你的資料庫之間。Stargate將一個API平臺和資料請求協調程式碼放到同一個開源專案中。
多個成功的應用程式公司(像是Netflix和Yelp)都構建了他們自己的資料閘道器,以幫助內部的程式開發人員用各種簡單的API開發App功能,同時無需瞭解底層的資料庫或把資料模式(schema)弄得一團糟。
DataStax將Stargate整合到Astra中,讓你同樣能夠輕鬆訪問你的資料。
這對你來說意味著什麼?
- 無需預先進行Documents的資料建模
- 更少的需要維護的個性化程式碼
- 更多的時間用於建構你真正在意的東西
有Stargate作為去往Cassandra的不同flavor的協調資料請求的代理,你可以按你所想使用你的資料——無論是通過無模式Document API使用JSON,抑或是通過能感知資料庫模式的GraphQL和RESTful API使用JSON。
為了在實戰中看看這個,讓我們來研究一下如何在一個抖音的克隆版App中使用JSON和Stargate的無模式Document API。因為如果Instagram和Snapchat都有了克隆抖音而來的功能,我們也應該要有一個,不是嗎?
03 動手操作前的簡短說明
在不需資料建模的情況下將JSON隨意丟入Apache Cassandra或從中隨意取出是很有意思的事情。你真應該自己在Astra上動手試一下。你可以在Astra上立刻得到動手體驗,或者你也可以看看我們的示例程式庫,瞭解一下實戰中的無模式Cassandra。
我們很高興和來自Netflix、黑莓、麥格理銀行、美國聯合服務汽車協會以及Yelp的眾多工程師一起創造Stargate。他們很努力地在對這些API進行實戰考驗,並與在我們一起開發新的功能。
好了就是這些,讓我們開始寫程式碼吧!
04 在抖音上釋出動態
我們打算用Astra上的Stargate提供的API來向抖音的克隆版App建立並上傳動態。在這個過程中,我們將會使用你可以直接貼上到你最新的Jamstack程式的程式碼。
想要在你的應用程式中使用在Astra上的Stargate,首先請安裝並配置我們的JavaScript SDK。你也許需要自行查詢一下如何在你的.env檔案中儲存環境變數。
讓我們先從一個基本的抖音動態開始——一個帶有簡短描述的視訊——就像是這樣:
const postData = { "postId": 0, "video": "https://i.imgur.com/FTBP02Y.mp4", "caption": "These ducks are cute", "timestamp": "2020-12-09T09:08:31.020Z", "likes": 0, }
當你用一個node JS客戶端連線到在Astra上的Stargate之後,讓我們一起在我們的App中建立一個新的collection,並將剛才的視訊動態加入其中:
const postsCollection = astraClient.namespace("tikTokClone").collection("posts"); const post = await postsCollection.create(postData);
如果你之前用過Cassandra,你會知道這一步有多棒。看看我們剛才省略的步驟吧:無需資料建模、無需建立新表、無需配置程式碼、無需分割槽鍵、無需聚類鍵……我想你已經明白我的意思了。
在Astra上的Stargate讓你僅用一行程式碼就能向Apache Cassandra中新增資料。這種程度的便捷是之前的Cassandra不可能做到的。插入JSON資料,然後繼續下一步。
下一步,假設你想要找到所有和鴨子(ducks)相關的動態,你可以這樣做:
// find all posts about ducks const posts = await postsCollection.find({ caption: { $in: ["ducks"] } });
Duang~現在一個有關鴨子的頻道已經為你的使用者找出來了。畢竟沒人不會喜歡一個專注於鴨鴨們的視訊頻道。
現在你的App看起來還不會和Twitter一樣,但是我們可以編輯一些內容。讓我們看看如何編輯你的動態的簡短描述——或者是一個稍長的描述?這取決於你。
// update the post’s caption const post = await postsCollection.update(post.documentId, { caption: "These ducks are MEGA cute", });
上面的這些只是一個快速介紹,展示瞭如何在一個簡單地克隆抖音的App上呼叫一小部分的資料API。
想要知道全部的功能?用網頁瀏覽器搜尋“Ania Kubow’s tutorial”檢視來自Ania Kubow的視訊教程(需合理上網)。她展示瞭如何利用Netlify和這些功能來建構一個完整的React應用程式。
05 下一步是什麼?
想要檢視更多使用Stargate的REST、Document以及GraphQL的API的例子,點選這裡檢視更多動手教程。看看這些教程,並且記得告訴我們你的想法。
有新的App的主意?或者想要加入我們的狂歡?你可以加入到我們的Stargate社群中。
我們很期待看到你是如何改造你的克隆版的抖音,使它擁有更多值得炫耀的基於資料的功能。
或者你可以自行建立其他App的克隆版——我們會很樂意將你的App克隆版放到我們的示例程式庫,所以請通過DataStax活動小祕書與我們取得聯絡。
06 還想要知道更多細節?
如果你看到這兒了,估計你是在找更多的程式碼。
沒問題。
讓我們展示一下如何建立node JS客戶端以及呼叫更多的資料API。對於初學者,讓我們先看一下如何將你的客戶端連線到在Astra上的Stargate:
// npm install @astrajs/collections const { createClient } = require("@astrajs/collections"); // create an Astra client const astraClient = await createClient( { astraDatabaseId: process.env.ASTRA_DB_ID, astraDatabaseRegion: process.env.ASTRA_DB_REGION, username: process.env.ASTRA_DB_USERNAME, password: process.env.ASTRA_DB_PASSWORD, });
這非常之容易。
然後讓我們在我們的資料庫中建立一個使用者collection,用它來儲存我們的抖音使用者的documents。
// create the users collection in the app const usersCollection = astraClient.namespace("tikTokClone").collection("users");
我們的抖音App中的使用者會有一些基本資訊:一個獨一無二的ID、一個名字、使用者名稱等等:
const userData = { "id_3": "0", "name": "Mo Farooq", "username": "mofarooq32", "avatar": "https://i.imgur.com/9KYq7VG.png" };
然後讓我們把這個使用者新增到我們的collection中:
// create a new user const user = await usersCollection.create(userData);
你可以通過讀取這個使用者的任意特性(比如使用者名稱)來確保這個使用者已經被儲存在資料庫中了:
// find our user by username const users = await usersCollection.find({ username: { $eq: "mofarooq32" } });
或者你可以根據使用者的documentId來查詢任意使用者:
// get the user by document id const user = await usersCollection.get(user.documentId);
最後,如果你想要刪除一個使用者:
// delete the user const user = await usersCollection.delete(user.documentId);
想要檢視完整程式碼?用網頁瀏覽器搜尋“Ania Kubow’s app”檢視全部的程式碼,並基於它改造你自己的版本。如果你真的這樣做了,記得讓我們知道你的新動態,我們很樂意訂閱你的鴨鴨頻道。
謝謝你讀完整篇文章。祝你敲程式碼愉