Scratch3技术分析之Studio API(第8篇)
文章目录
本文是Scratch3.0技术分析之后端API系列的第8篇。
Studio
Studio是Scratch社区的重要构成部分。
Studio在概念上颇似项目收纳盒
,用户可以将感兴趣的项目添加到收纳盒
中。
Scratch团队还未完成Studio API的重构。目前要创建Studio,须从旧网页进入,url为:https://scratch.mit.edu/mystuff/#galleries
, 从url可以看出Studio
和galleries
被scratch视为同义词。
如果你用过知乎或者掘金。会发现Studio
和收藏夹颇为相似。
之前在做paperweekly时,收藏夹部分参考了知乎、掘金和producthunt。各家大同小异,核心概念都是收纳盒/collections
。
产品视角: 不同之处
接下来说说Studio和知乎收藏夹
的不同之处。
Scratch推崇4P(Projects, Passion, Peers, Play)原则, 它们将理念贯彻到产品中。
Studio
是Projects
的收纳盒,用户兴趣各异,Passion
各有不同。用户创建Studio一般从某种兴趣点出发。
至此,studios
和知乎收藏夹
并没有什么差异。
我们可以看看Scratch社区里受欢迎的studios
由于社区里有兴趣相似的人,人们会对其他用户创建的收纳盒
感兴趣,于是收纳盒
应该支持关注/follow
功能,在这点上,各家依旧没什么差别。
对Peers
的重视,是引起差异的原因。Scratch把社区用户视为潜在的协作者/Peers
, 而知乎/掘金的收藏夹背后的逻辑则是把关注者
视为围观群众
。
于是在产品定位和功能上就出现了根本差异。
在Scratch中,用户可以为Studio添加curators:
curators与Studio的创建者一样,可以一起维护这个Studio(本质上是个权限系统),curators拥有往Studio里增删项目的权利。
Studio甚至有个可选项Allow anyone to add projects
: 将整个社区视为协作者。
一等公民
Studio和Porject一样,都是Scratch的一等公民,我们可以看到Studio和Porject类似,有自己的title、缩略图(标注1)、简介(标注2)和评论(标注3),此外还有活动日志(标注4)。
API分析
至此,我们基本上做完了产品层面的分析。
接下来我们开始API层面的分析。
创建Studio
让我们在https://scratch.mit.edu/mystuff/
里New Studio
细节如下:
创建完成后,重定向到 https://scratch.mit.edu/studios/8259659/
, 该页面目前并未API化,应该是Django模版渲染的。
更新Studio信息
让我们将title更新为test2:
采用的是PUT方法,以表单方式提交数据
更新描述信息也相似。对应字段名为description
更新封面图片, 是用POST方式往https://scratch.mit.edu/site-api/galleries/all/8259659/
提交图片,细节为:
提交之后,图片地址为://cdn2.scratch.mit.edu/get_image/gallery/8259659_200x118.png#1556595638951
可以看出带了时间戳,应该是出于缓存更新目的。
图片限制为: Maximum file size is 512 KB and less than 500x500 pixels.
往Studio里增删项目
这部分的功能已经迁移到Scratch新版网站中。
将项目添加到Studio中时,发生的细节为:
POST https://api.scratch.mit.edu/studios/8259659/project/302042626
response为{"actorId":18286387,"projectId":"302042626","datetimeCreated":"2019-04-30 03:45:31","studioId":"8259659"}
删除操作对应:DELETE https://api.scratch.mit.edu/studios/8259659/project/302042626
, response为[]
关注(Follow) Studio
PUT https://scratch.mit.edu/site-api/users/bookmarkers/8259659/add/?usernames=wwj718
response:[{"featured_project_label_name": "Featured Project", "featured_project_data": null, "featured_project": null, "thumbnail_url": "//uploads.scratch.mit.edu/users/avatars/18286387.png", "user": {"username": "wwj718", "pk": 18286387}, "featured_project_label_id": null, "id": 17449452}]
邀请用户成为Studio的curators
PUT https://scratch.mit.edu/site-api/users/curators-in/8259659/invite_curator/?usernames=tonynsc
response为: {"status": "success", "data": {"user": "tonynsc"}}
Studio的评论
顶级评论
POST https://scratch.mit.edu/site-api/comments/gallery/8259659/add/
以表单形式提交:{"content":"test","parent_id":"","commentee_id":""}
回复评论
POST https://scratch.mit.edu/site-api/comments/gallery/8259659/add/
以表单形式提交:{"content":"test","parent_id":56665892,"commentee_id":18286387}
后记
目前Studio的API官方还在重构中,完成之后,我会同步更新这篇文章。
参考
文章作者 种瓜
上次更新 2019-04-30