技术基础 | 用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”查看全部的代码,并基于它改造你自己的版本。如果你真的这样做了,记得让我们知道你的新动态,我们很乐意订阅你的鸭鸭频道。
谢谢你读完整篇文章。祝你敲代码愉快!
技术基础 | 用JSON在抖音上发布动态——使用Stargate即可轻松实现的更多相关文章
- Python 抖音机器人,论如何在抖音上找到漂亮小姐姐?
只有想不到,没有做不到,最近抖音风靡好友圈,马上就有技术宅本着“代码改变世界”的理念开始了搞事之路. 需要注意的事,漂亮不漂亮没有明确的界限,每个人都有每个人的审美,只有外表而没有心灵的美也是空洞的. ...
- vue H5 超简单的swiper制作抖音上拉切换视频播放
-----html部分------ <swiper vertical :style="{height: windowheight+'px',width:375+'px'}" ...
- 10分钟快速上车短视频风口:基于uniapp框架创建自己的仿抖音短视APP
在今年也就是第48次发布的<中国互联网络发展状况统计报告>有这样一个数据,21年的上半年以来,我国我国网民规模达10.11亿,其中短视频用户达8.88亿.碎片化的生活场景下,短视频成为人们 ...
- PHP根据抖音的分享链接来抓包抖音视频
现在抖音是个很火的短视频平台,上面有许多不错的小视频.今天教大家怎么用PHP技术来获取到抖音上的的内容. 1:打开抖音选中你认为好的视频点击分享,复制链接,然后你会获取到如下的内容: #科比 愿你去的 ...
- 100行代码搞定抖音短视频App,终于可以和美女合唱了。
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由视频咖 发表于云+社区专栏 本文作者,shengcui,腾讯云高级开发工程师,负责移动客户端开发 最近抖音最近又带了一波合唱的节奏,老 ...
- Python爬取抖音视频
最近在研究Python爬虫,顺便爬了一下抖音上的视频,找到了哥们喜欢的小姐姐居多,咱们给他爬下来吧. 最终爬取结果 好了废话补多说了,上代码! #https://www.iesdouyin.com/a ...
- wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑
wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~ 错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...
- 刷抖音太累,教你用Python把高颜值的小姐姐都爬下来慢慢看
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 星安果.AirPython 目 标 场 景 相信大家平时刷抖音短视频 ...
- 抖音人脸识别Autojs脚本
title: 抖音人脸识别Autojs脚本 用Autojs写的抖音人脸颜值检测脚本 疫情期间宅家久了,昨天闲着没事(好吧,有事情,但是我不想做) ,消费之火熊熊燃烧.一咬牙把Autojs入正了.我 ...
随机推荐
- Java基础教程——字符流
字符流 字节流服务文本文件时,可能出现中文乱码.因为一个中文字符可能占用多个字节. 针对于非英语系的国家和地区,提供了一套方便读写方式--字符流. java.io.Reader java.io.Wri ...
- 02-Python里字符串的常用操作方法--split()函数和join()函数
1.split() --分割,返回一个列表, 会丢失分割字符 实例: my_str = 'you and me and he' list01 = my_str.split('and') list02 ...
- JAVA中删除文件夹下及其子文件夹下的某类文件
##定时删除拜访图片 ##cron表达式 秒 分 时 天 月 ? ##每月1日整点执行 CRON1=0 0 0 1 * ? scheduled.enable1=false ##图片路径 filePat ...
- golang 自学系列(三)—— if,for,channel
golang 自学系列(三)-- if,for,channel 一般情况下,if 语句跟大多数语言的 if 判断语句一样,根据一个 boolean 表达式结果来执行两个分支逻辑. 但凡总是有例外,go ...
- 【进阶之路】定时任务调用平台xxl-job
大家好,我是练习java两年半时间的南橘,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西.知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了 ...
- 轮廓检测论文解读 | 整体嵌套边缘检测HED | CVPR | 2015
主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, gr ...
- 对 精致码农大佬 说的 Task.Run 会存在 内存泄漏 的思考
一:背景 1. 讲故事 这段时间项目延期,加班比较厉害,博客就稍微停了停,不过还是得持续的技术输出呀! 园子里最近挺热闹的,精致码农大佬分享了三篇文章: 为什么要小心使用 Task.Run [http ...
- Go语言的context包从放弃到入门
目录 一.Context包到底是干嘛用的 二.主协程退出通知子协程示例演示 主协程通知子协程退出 主协程通知有子协程,子协程又有多个子协程 三.Context包的核心接口和方法 context接口 e ...
- SNOI2020 部分题解
D1T1 画图可以发现,多了一条边过后的图是串并联图.(暂时不确定) 然后我们考虑把问题变成,若生成树包含一条边\(e\),则使生成树权值乘上\(a_e\),否则乘上\(b_e\),求最终的生成树权值 ...
- C++ 消失的析构函数 —— virtual 实现的动态析构
在C++类的结构中可以使用类方法创建内存,使用类的析构函数去施放内存,但有这么一种情况会导致:即使在析构函数中释放了内存,但由于析构函数没有被调用而导致内存泄漏,如下代码. 1 #include &l ...