技术基础 | 用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入正了.我 ...
随机推荐
- 惠州发布5G任务计划表,将出台智慧灯杆建设计划与技术规范
广东省惠州市于近日发布<惠州市贯彻落实广东省加快5G产业发展行动计划(2019-2022年)工作任务计划表>(以下简称:<5G任务计划表>). <5G任务计划表>明 ...
- 浅谈AsyncLocal,我们应该知道的那些事儿
前言 最近查看有关框架源码,发现AsyncLocal这玩意水还挺深,于是花了一点功夫去研究,同时对比ThreadLocal说明二者区别以及在何时场景下使用AsyncLocal或ThreadLocal. ...
- 关于String的matches方法
弊端: 虽然String.matches方法最易于看一个字符串是否与正则表达式相匹配.但并不适合在注重性能的情形中重复使用. 问题在于,它内部为正则表达式创建了一个Pattern实例,却只用一次,之后 ...
- [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误
一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...
- 决胜IT十八招-前言
决胜IT十八招 走资讯这一行转眼间八年多了,从大学的时候,我有长达十年的时间思索在从事软体开發这一行到底怎麽存活下来,这思考下来,为自己总算找到一个出口来,这十八招只是其一的绝学,见阵这一行干软体开發 ...
- 使用@RequestBody注解获取Ajax提交的json数据
最近在学习有关springMVC的知识,今天学习如何使用@RequestBody注解来获取Ajax提交的json数据内容. Ajax部分代码如下: 1 $(function(){ 2 $(" ...
- 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境
写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 文章和搭建环境所需要的yml文件已收 ...
- JZOJ 11.28 提高B组反思
JZOJ 11.28 提高B组反思 被打崩了呀 下次打提高A去了(逃 T1 刚开始没有读懂题,后来读懂了以后没有思路.没有想到是一个构造题,对同构的性质没有了解清楚,题解也讲的不明不白,懵-- T2 ...
- MySQL二进制文件(binlog)
二进制文件(binlog)记录对MySQL数据库执行更改的所有操作,但不包括SELECT和SHOW这类操作,因为这类操作没有改变数据. 为什么会有binlog? 首先 binlog 是 Server ...
- PyQt(Python+Qt)学习随笔:字体writingSystem、ProportionalFonts、MonospacedFonts的含义以及QFontComboBox字体组合框详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 在介绍QFontComboBox之前,我们先简单介绍一下字体 ...