使用 OpenFaaS 在 60 秒内完成一个无服务器的 GraphQL 博客

使用 OpenFaaS 在 60 秒内完成一个无服务器的 GraphQL 博客

原文:https://medium.com/hackernoon/a-serverless-graphql-blog-in-60-seconds-with-openfaas-aaedd566b1f3

由于我在上一篇文章(“集成 OpenFaaS 和 GraphQL”)中已经集成了 GraphQL 和 OpenFaaS ,我接下来想做的是将其与数据库集成。所以我想把数据保存到存储器中。数据库可以是任何东西,但是这次我选择了 ArangoDB 。这就是建筑的样子。你可以在kenf dev/open FAAS-graph QL-blog中找到这个项目的代码。

OpenFaaS + GraphQL + ArangoDB

下面的视频展示了我在这个架构上取得的成就。(有些部分快进)

我希望每个人都能轻松地创建这个环境,所以我选择了 Docker Swarm 作为编排工具。只需点击几个命令,就可以使用 graphql 博客了。当然,你可以选择你自己的编排工具,这里列出了,但这与本文的主题无关。

GraphQL 博客

这项服务的灵感来自于server less/server less-graph QL-blog,但它并不依赖于 AWS。此外,它缺少实体之间的一些关系(afaik ),所以我添加了一些。所以这个 graphql 博客可以:

  • 创造一个作者
  • 为作者创建帖子
  • 为帖子创建评论
  • 查询作者
  • 查询帖子及其评论

我还没有为这个 GraphQL 博客捆绑一个前端,所以你需要一个像GraphiQL这样的客户端来查询服务器(你可以在这里找到一个)。

试试看!

如果你想尝试这个项目,你可以从这里开始。我假设你了解 Docker,并且已经安装了它。在你克隆了项目之后,点击

docker swarm init

并通过执行deploy_stack.sh部署堆栈。部署成功后,arangodb 需要几秒钟时间准备接收请求。投票http://localhost:8529直到你看到 arangodb 的登录表单。

然后,您需要准备数据库和集合。可以在项目中找到arango/setup_database.sh。执行这个命令,您就可以使用 GraphQL 博客了。顺便可以从 OpenFaaS 的 gateway UI 查看功能。

GraphQL Blog Function via OpenFaaS

创造一个作者

您可以通过使用createAuthor突变来创建一个作者。

mutation {
  createAuthor(name: "Jane") {
    id
    name
  }
}

响应应该是这样的(记住id,因为您稍后会用到它):

{
  "data": {
    "createAuthor": {
      "id": "4350",
      "name": "Jane"
    }
  }
}

创建帖子

你可以通过使用createPost突变来创建一个帖子。

mutation {
  createPost(title: "Some Sample Post", bodyContent: "This is a sample post", author: "4350") {
    id
    title
    bodyContent
    author {
      name
    }
    comments {
      id
    }
  }
}

回应会是这样的(也记住这个id):

{
  "data": {
    "createPost": {
      "id": "4849",
      "title": "Some Sample Post",
      "bodyContent": "This is a sample post",
      "author": {
        "name": "Jane"
      },
      "comments": []
    }
  }
}

给帖子添加评论

你可以通过createComment突变给帖子添加评论。为此,你需要一个作者id和一个帖子id

mutation {
  createComment(content: "This is a comment", author: "4350", post: "4849") {
    id
    content
    author {
      name
    }
  }
}

答案是这样的:

{
  "data": {
    "createComment": {
      "id": "5018",
      "content": "This is a comment",
      "author": {
        "name": "Jane"
      }
    }
  }
}

质疑帖子

现在我们有了一篇文章和这篇文章的评论,让我们通过posts查询来查询它。

query {
  posts(authorId: "4350") {
    id
    title
    bodyContent
    author {
      name
    }
    comments {
      content
      author {
        name
      }
    }
  }
}

答案会是:

{
  "data": {
    "posts": [
      {
        "id": "4849",
        "title": "Some Sample Post",
        "bodyContent": "This is a sample post",
        "author": {
          "name": "Jane"
        },
        "comments": [
          {
            "content": "This is a comment",
            "author": {
              "name": "Jane"
            }
          }
        ]
      }
    ]
  }
}

很酷不是吗?一个无服务器的 GraphQL 博客在近 60 秒内启动!

下一步是什么…

我们现在有了一个工作的无服务器 GraphQL 博客。但是我们还没有深入研究 OpenFaaS 的好处。在下一篇文章中,我将研究这个函数在出现请求高峰时是如何伸缩的。

如果你对 OpenFaaS 感兴趣,请给GitHub repo一颗 以示支持!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除