Week36 - 用 Apollo 快速架设 GraphQL Server [Server的终局之战系列]

大家好,GraphQL 是一个可以让 Client 弹性要求资料的技术,本文章将介绍Apollo Server,他是一个以 GraphQL 规範设计的 Server,并且可以套用 Node.js 现今大家常用的 Express、Fastify 等 Server 的 Middleware。

本文章以 Appollo 官网的getting-started撰写。

请先 clone 程式範例,以下会以程式範例讲解。

你需要安装

DockerDocker-Compose

先将 demo run 起来

先将 Server 运行起来会比较有感觉,

$ cd ./week36$ docker-compose up --build

打开localhost:4000,会看到 GraphQL 的测试页面,

输入以下,并点选中间的运行按钮,

{  books {    title    author  }}

将会获得以下资料,

{  "data": {    "books": [      {        "title": "The Awakening",        "author": "Kate Chopin"      },      {        "title": "City of Glass",        "author": "Paul Auster"      }    ]  }}

如果不使用测试页面来测试,也可以使用一般的 Curl、Postman 来测试,要特别注意的是,request 端的 query 实际上是一个字串,并不是一个 object

实作

创建 node 专案并且安装 Apollo 相关套件

$ npm init --yes$ npm install apollo-server graphql

让我们来看看index.js发生了什么事,


定义了 GraphQL 的 schema,

const typeDefs = gql`  type Book {    title: String    author: String  }  type Query {    books: [Book]  }`;
type Book: 定义有一个Book物件,拥有 title 与 author 的栏位,并且都是 Stringtype Query: 定义有哪些查询的方法,此範例拥有books方法,并且会返回複数或零个Book物件

设定假资料,

const books = [  {    title: "The Awakening",    author: "Kate Chopin",  },  {    title: "City of Glass",    author: "Paul Auster",  },];

实作查询中的books方法,此处的方法非常简单,就是直接把假资料回传而已,而实战中,此处可以设计去 DB 或者其他 Microservice 捞取资料,

const resolvers = {  Query: {    books: () => books,  },};

以 schema 的typeDefs、实作的resolvers来创建ApolloServer,并启动,

const server = new ApolloServer({ typeDefs, resolvers });server.listen().then(({ url }) => {  console.log(`?  Server ready at ${url}`);});

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章