分类 默认 下的文章

Graph QL


Graph QL

Graph QL 是一门拥有明确的查询语言(描述如何请求数据的语法),它定义了一个通用的基于图形的 schema 来发布它所代表的数据服务的功能。Graph QL 为数据通信而生。 在客户端和服务器之间需要进行通信时,比如客户端请求接口拿数据时,Graph QL 是作为这两者之间的中介存在的。

要想能够使用 Graph QL ,我们需要一个运行层,也就是能够翻译 Graph QL 语法的东西,然后这个运行层暴露给客户端和服务器,也可以说数据服务的 Graph QL 代理。

三个主要特点:

  • 允许客户端精确指定所需数据。
  • 可以更容易地从多个数据源聚合数据。
  • 使用类型系统描述数据。

三个主要模块:
模式(schema)、查询(query)、解析器(resolver)。

为什么需要 Graph QL ,直接点对点跟服务器要不好吗?

可以啊,只是客户端通常会请求多次,可是服务器只会返回单次请求的结果,所以这就造成了:客户端会重复这个过程多次。

如果我们使用 Graph QL 作为客户端和服务器间的中介,那么客户端就可以只发送一次请求给 Graph QL 就可以拿到所需求的数据等。

主要解决三个问题:

  • 客户端想拿到完整的数据,往往需要多次请求。

    假设客户端需要获取多个接口,如果通过 GraphQL ,它这时候只有请求就够了。

  • 客户端依赖于服务器端。

    关键概念是通过使用 GraphQL,API schema、数据库schema 被解耦。

  • 对前端开发不友好。

    试一试:GraphQL API Explorer

题外话

看下面这几篇文章,大概就能知道那些基本概念了。我写得不太好,因为我还没实践过。我试了 GraphQL API Explorer 后,觉得这东西惊艳到我了。

参考资料


Git 笔记


背景

昨晚我建了个远程库,专门放笔记的。因为只是写md,又没写代码,所以就直接用vs code去编辑了。可vs code自带的git又不知道怎么用,然后我就只好打git命令行,添加远程库等等。可是搞了半天没弄好。

今天我就复现了昨晚的场景。

昨晚是这样的,我在码云新建了个私有库,码云会自动添加md文件嘛。
而我本地是这样的:

mkdir notes
cd notes
mkdir 1711
git init //  初始化新仓库

然后就用vs code新建了md文件开始写笔记,写完了想放到码云上。不得已我就开始打命令行了

git remote add origin https://gitee.com/远程库名
git add [fileName]  //  添加文件
git commit -m [messages]  //  commit
git fetch origin master  //  取回远程库的文件到本地
git merge origin/master  //  合并,结果出错了
//  fatal: refusing to merge unrelated histories
//  加多这一段就ok :--allow-unrelated-histories
git merge origin/master --allow-unrelated-histories
git push origin master  //  推送到远程仓库

我还想有其他骚操作

  • 删除掉远程库的README.md
git rm README.md
git commit -m 删除了README.md
git push origin master
  • 添加多一个文件夹
mkdir dir
cd dir
touch 1.md 2.md 3.md
git add *.md
git commit -m 添加文件夹
git push origin master
  • 我想重命名文件
git mv oldFileName newFileName 
git commit -m 改文件名
git push origin master
  • 远程仓库的添加,删除,重命名
//  添加
git remote add origin https://gitee.com/仓库名
//  删除
git remote rm origin
//  重命名
git remote rename origin hhh
//  查看远程主机名
git remote
//  查看远程主机名和对应的地址
git remote -v
  • Git文件的状态

Git的文件是有三种状态的,已修改,已暂存,已提交。对于所在位置:工作区work,暂存区stage,仓库repository。

怎么看文件的状态呢?用命令行git status

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   "1711/git\347\254\224\350\256\260.md"
        modified:   README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   "1711/git\347\254\224\350\256\260.md"

怎么理解这一段,首先说了你跟远端的分支master是最新的,然后下面有一些文件需要被commit提交,还有一些你改动了的文件,需要用git add放入到 stage暂存区

这个意思就是说,工作区(.git文件所在的目录)里头的git笔记.md修改了,但没有放入暂存区stage,而README.md文件虽然修改了,但已经放入暂存区stage了,就差commit提交到仓库了。

  • 新建分支,合并分支

图中只有一个master分支

这里有三个版本,最新的是f30ab

图中有两个分支,master,testing

图中有两个分支,master和testing 然后HEAD指向的是我们当前所在的分支,怎么看我们所在分支是哪个呢。命令行git branch,带*星号的就是所在分支,如下:

git branch
    * master
    testing

新建分支合并分支运用场景

比方说:我们有一个项目,已经上线了,也就是说已经放到生产环境了。

这时候我们有新需求,为了不影响已上线的产品,我们开了一个分支,我们就可以在这里开发,然后测试完再推到主线上。

假如我们线上的产品有个严重的bug,这时候我们就回到主线分支,然后再新建一个分支出来去修复bug,修好了再推到主线上。

//  新建一个分支 newBranchName 并且切换到该分支上
git checkout -b newBranchName
//  相当于执行如下命令
git branch newBranchName
git checkout newBranchName

//  如下例子:
$ git checkout -b develop master
Switched to a new branch 'develop'
$ git branch
* develop
  master

利用分支进行开发工作的流程

master 为主线分支,主分支只用于发布大版本更新。develop 分支为日常开发分支。

  • 创建 develop 分支,并切换到该分支
    • git checkout -b develop master
  • 将 develop 分支发布到 master 分支
    • 切换到 master 分支 git checkout master
    • 合并分支 git merge --no-ff develop

若不加 --no-ff 参数则是这样的

Git执行&quot;快进式合并&quot;(fast-farward merge)

加上参数 --no-ff

加上参数 <code>--no-ff</code>

未完待续

参考资料


Typecho修改用户组权限


在Typecho里有五种权限:管理员(administrator), 编辑(editor), 贡献者(contributor), 关注者(subscriber), 访问者(visitor).
贡献者发布文章要通过审核,这个让我很烦,所以找了这么修改权限的办法,在论坛里找到了,这个是很老的帖子10年的帖子有点老,不过里面说的是修改TypechovarWidgetContentsPostEdit.php这个文件,虽然我没有找到这个文件,但沿着文件名,我想应该是在/var/Widget/Contents/Post/Edit.php我把这个文件下到本地,一搜真的看到了,嗯,在222行和299行,修改editorcontributor保存搞定。
意外发现有关让关注者发文章的帖子,呐,这里不过实现起来挺麻烦的,要修改好多地方。