1. 程式人生 > 實用技巧 >技術基礎 | 用JSON在抖音上釋出動態——使用Stargate即可輕鬆實現

技術基礎 | 用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資料引擎之上的。


02Stargate到底是什麼?

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”檢視全部的程式碼,並基於它改造你自己的版本。如果你真的這樣做了,記得讓我們知道你的新動態,我們很樂意訂閱你的鴨鴨頻道。

謝謝你讀完整篇文章。祝你敲程式碼愉快!