[文档翻译] 全栈速成,最适合前端的后端服务框架: Parse
发布于 4 个月前 作者 jaweii 2370 次浏览 来自 分享

就在最近,我完成了Parse JavaScript SDK指南的翻译,并在指南中加入了一些教程、示例,以保证新手能够快速上手。

我在QQ群里面贴出地址宣传了下,然后发现大部分人听都没听说过Parse,果然,我是站在潮流之巅的弄潮儿啊hhhhhh~

那么,Parse到底是什么?

三个字就可以概括:去后端。

Parse服务其实已经推出很多年了,在4年前被Facebook 8500万美元收购,在去年被Facebook开源,但是在国内几乎一直无人问津。

国内同类的服务平台,即BasS(Backend as a Service)服务平台主流的有Leancloud、Bmob。

其中Leancloud我使用过,Bmob也注册过。Leancloud达到免费阈值以后的收费方案是每天最低消费30元,Bmob达到免费阈值以后的收费方案有99元/月的套餐。对于原型开发阶段的应用,其服务的免费额度使用还是绰绰有余的。

就像刚才说的,BaaS服务就是去后端,也就是说,后端几乎完全不需要你自己开发了,数据库、用户系统、安全系统、Hook回调、API查询等都为你搭建好了。而且,比你搭建的还好。你只需要在项目中集成SDK,然后直接调用方法传参就可以完成前后端交互。

打个比方,我要写一个按钮的用户注册方法:

//集成SDK
import parse from 'parse'
parse.serverURL = 'http://localhost:2018/parse'
parse.initialize('myAppId', '123456')

//在按钮点击实践中调用注册方法:
button.on('click',function(username,password){
  let user = new parse.User()
  user.set('username', '000001')
  user.set('password', 'lzhlmcl,yhblsqt')
  user.set('email', 'xxxxx@qq.com')
  user.signUp().then(user => {
  alert('注册成功')
}).catch(console.error)
})

完成!

只需要十几行代码,不需要写后端和接口。当上面代码弹出注册成功后,后台还会发送验证邮箱的邮件给用户,然后后台数据库就会出现新注册的用户。

怎么样,so easy吧。

简直就是,前端抢后端饭碗系列。

当然了,使用Leancloud、Bmob这样的商业服务平台,数据是存储在他们的服务器上的。使用Parse自己搭建后端,则是保存在自己的服务器上。

对比一下:

Parse开源,数据库绝对私有,完全免费,这是Parse的优点。

Leancloud、Bmob则是本地化做的非常优秀,比如对微信接口、短信验证的集成,这是他们的优点。

上述优点,双方都不具备对方的优点,所以,让你选的话,你选胸大的还是腿长的?

我一般是结合业务,如果我觉得这个应用就是玩玩,肯定做不大,为了省去维护和服务器维护,我会选择使用Leancloud,Bmob不熟练。如果说这个应用以后会有很大访问量,打算认真做做,预期会超过L、B的免费额度,出于平穷限制,我会选择Parse。

不管你选择哪个,Parse其实都值得你掌握的。

身为一个前端,如果你会使用L、B,首先也是不错的,至少开发效率很高了;不过,依赖于第三方商业平台,还是不够独立,算不得全栈开发者。如果你会使用Parse,你就相当于快速掌握了一种后端技术栈,算得上是全栈了。

我为什么这么推荐Parse,并把Parse的文档翻译中文,整合详细的教程和实例呢?Parse是一个开源项目,也不是我的项目,我就是非常喜欢这类框架,你知道,发现一个好东西,总是特别想推荐给朋友们的。

接下来,我还会继续写几个教程和例子,虽然,不是非常必要,有的人文档过一遍就会用了。

最后附上Parse JavaScript SDK中文文档地址

26 回复

一直在关注这个项目,感觉挺好的,一直想阅读它的源码,不过没有时间深究它。不阅读它的源码还有些许担忧。

还不错的哈,以前用过 Valine + Leancloud 很简洁的品论系统;自己完全没有后端开发,以前 test 地址:https://front-ends-developers.github.io/valine_comment_page/index.html

只有框架,后端环境也需要搭建的吧,完全前端还是选L or B吧

@wen495713 文档包含了Parse后端搭建的脚手架

坐等被端饭碗

Leancloud 忠实用户

Leancloud用过,我觉得这类产品做运营活动很合适,产品出原型,前端直接开发调用这类api,不需要后端参与写接口。但对于其他类型的系统不一定合适,否则不就成安卓,iOS自己操作数据的模式了

我擦,这里厉害!

@hpgt 可以用云函数写 Api

哈哈! 什么时候的文档?
我现在用 graphcool,新版叫 prisma. 五分钟建好Graphql 服务器. 远程服务0配置, 本机装好 docker, 基本也是0配置. 建好 schema以后, query和 mutate 的方法自动生成了, 分页也设置好了.
grpahcool console 生成的view 看起开不知道有多爽. 技术更新速度很快啊,骚年

最后一张图,使用了 graphql的 resolver 函数, 通过 resolver 函数 ,可以把 REST API 转为 graphql API. 这样 客户端的灵活性就打多了.
下面的就是通过 graphcool resolver 转换的Cnode api. 列表中是没有 content 这一项, 这一项的体积太大,所以在加载列表时,没有不要使用,所以可以在前端做查询是直接去掉, 这样带宽压力就小了.

如果单单是后端使用 Graphql, 那用处不见得有多大, 如果在前端配套使用 apollo-client 的话, 那威力无穷. 我可以斗胆下这个结论, 在异步请求很多的 app里 , redux-thunk, redux-saga都可以入土了. 其实我在测试区发了一贴,如果感兴趣可以看看.哈哈

下面这张是在一个查询里返回两个 REST API 的数据.

REST wrapper 这个技能, parser 没有吧 . 哈哈

有兴趣 可以看这一贴 graphql

@phpsmarter 这里比的是简单敏捷上手快 GraphQL 看起来似乎不错,就差你给他翻译成中文了

@phpsmarter 我上手试了试,感觉API写法并不友好,比如:

const createPost = gql ` mutation createPost($description: String!, $imageUrl: String!) { createPost(description: $description, imageUrl: $imageUrl) { id imageUrl description } }

    this.$apollo.mutate({
      mutation: createPost,
      variables: {
        description,
        imageUrl,
      },
      updateQueries: {
        allPosts: (prev, {
          mutationResult
        }) => {
          return {
            // append at head of list because we sort the posts reverse chronological
            allPosts: [mutationResult.data.createPost, ...prev.allPosts],
          }
        },
      },
    })

代码太多了

@jaweii 你说的这是 apoll-client 前端代码, 和后端没关系啊! 主题说的是啥问题? 我回复的是什么问题?

@phpsmarter 主题说的是最适合前端开发者使用的,包括主题内附上的代码,也是前端的示范代码。这个文档,也是讲前端如何使用SDK

@jaweii 不好意思. 怎么看你的标题都是在写 parse-server. 看到第一段代码之前,看不下去了,后面的代码没看. 服务需要的 schema 和 resolver 一个都不少. 具体功能的shcema和处理方法那是需要自己来写的. 不如你想的那么美好. 我看到这里的描述,实在是看不下去了 另外就是 apollo-client 中查询用的是 graphql-tag. 实际就是用 tag,描述下面的图 查询字符串和返回结果是类似的.

@phpsmarter 如何做权限校验的。 parse 有 acl,prima 之前看过,没发现有 acl 的文档。

@MiYogurt 我也是初学,用不到,看过很快就忘记了.
permission

。。。。。 @phpsmarter 用不到? 你在客户端发起请求,怎么保密你的 url? 只要会写代码,提交gql mutaiton,谁都可以删除你的帖子?这是最基本的校验逻辑。

@phpsmarter 里面提到的还是要自己写的,graphql-yoga 是 ts 跟 expess 的一个脚手架。

@MiYogurt 这不告诉你是初学, 权限关掉了么 你先部署一个 graphcool的服务, console里打开就行了.

graphcool 不仅能控制整个 schema的读写权限 ,每个字段的权限也可以控制.

@MiYogurt 你可以回过头去用 graphcool 的 console. 可以实现权限的可视化管理. 新prisma 的 console还没有上线. 如果部署服务,执行 prisma console会有提示的. 配置文件上也可以做, prisma github 上有 demo.
实际上默认是没有读写权限的. 这个你部署之后,不改默认配置,提示信息上网搜会搜到一堆的问题. 这部分你不说确实是忘了. 怎么感觉我我欠你钱似的, 追着我要. 呵呵.

@phpsmarter 那倒没有,之前以为你说用不着是没有,后来看到了下面的链接才发的第二条,没用过 graphcool 创建 api,因为这个上线要付费,而且在国外,速度不敢保证,所以就没研究。了解的不深入,这是深切的求知欲。哈哈,在ramda fpchina 看到你了。新年快乐。

@MiYogurt 现在免费的,容量500MB.也够用了. 本地部署 有 docker, 很简单. 速度是有点慢, 现在应该是在日本搞了一个节点,速度还可以. 万一用于实际生产了, 部署方法也很多. 刚添加了一个什么 k8s的部署, 我不懂.

@MiYogurt k8s 就是 docker-compose 的升级版,可以生命检测,当宕机了自动重启,用来部署微服务。对于 java 那套什么 springcloud 不是很熟,上次听一个人演讲说可以不需要 k8s 使用,而用 Consul。

回到顶部