Baas接口标准(一)——GraphQL介绍、和RESTful对比 & GraphQL客户端与服务端交互(接口调用) & apollo-server框架开发之基于Node.js的GraphQL的开发

Baas接口标准(一)——GraphQL介绍、和RESTful对比 & GraphQL客户端与服务端交互(接口调用) & apollo-server框架开发之基于Node.js的GraphQL的开发

第1章 GraphQL 介绍

接口开发方式

  • RESTful
  • GraphQL

RESTful 接口问题

  • 接口粒度比较细,很多场景需要调用多次请求才能完成一个功能
  • 接口扩展、维护成本高
  • 接口响应的数据格式无法预知(json已经成为主流格式)

GraphQL概述

GraphQL 既是一种用于 API 的查询语言,也是一个满足你数据查询的运行时。

是一种接口开发标准,支持常见的服务端开发语言。例如:java、php、Python、Node.js…

官网:https://graphql.cn/

RESTful 和 GraphQL 对比

  • RESTful特点
    • 接口粒度太细
    • 后期版本变更不方便,扩展维护成本高
  • GraphQL特点
    • 精确获取需要的信息
    • 通过单个请求获取各种资源
    • 通过类型系统描述查询
    • 强大的调试工具

第2章 GraphQL 快速体验

GraphQL客户端与服务端交互(接口调用)

  • 实现步骤

    • 一、服务端
      • 创建服务端项目目录
      • 初始化项目
        • npm init -y
      • 创建入口文件index.js
      • 安装依赖包
        • apollo-server-express
        • express
        • graphql
      • 复制官方案例代码到index.js
      • 运行该文件启动服务
    • 二、客户端
      • 通过访问http://localhost:4000/graphql 地址打开调试工具就可以进行接口测试
      • 在调试工具中进行查询测试
      • 获取测试结果
  • 总结

    • 只有一个请求地址

    • 按需进行查询

    • 有特定的查询语法规则

第3章 GraphQL服务端开发

基于Node.js的GraphQL的开发

  • GraphQL.js GraphQL规范的JavaScript实现(服务端数据提供和客户端请求)
  • express 基于express创建HTTP服务,内部依赖GraphQL.js
  • apollo-server GraphQL服务器实现(支持express、koa等多种Web框架)
    • express
    • koa

基于apollo-server开发

apollo-server 是一个实现了GraphQL 规范的框架,可以基于它快速开发基于GraphQL的服务端接口,并且方便客户端进行接口调用。

  • 基本开发步骤(服务端)
    • 初始化服务端项目
      • 创建项目目录
      • 创建入口文件
      • 初始化项目 npm init -y
    • 安装依赖包
      • npm install apollo-server-express express graphql -S
    • 定义类型
    • 解析数据
    • 实例化apollo对象
    • 整合express并监听端口,提供Web服务
// 1、导入相关的依赖包
const express = require('express');
const {
    
     ApolloServer, gql } = require('apollo-server-express');
// 2、定义数据类型
const typeDefs = gql`
  type Query {
    hello: String
  }
`;
// 3、解析字段数据;解析数据类型对应的具体数据
const resolvers = {
    
    
  Query: {
    
    
    hello: () => 'Hello world!',
  },
};
// 4、整合ApolloServer和express
const server = new ApolloServer({
    
     typeDefs, resolvers });
const app = express();
server.applyMiddleware({
    
     app });
// 5、监听端口;启动监听
app.listen({
    
     port: 4000 }, () =>
  console.log(`running at http://localhost:4000${
      
      server.graphqlPath}`)
);
  • 客户端
// 查询
query {
  hello
}
// 响应结果
{
  "data": {
    "hello": "world"
  }
}
  • 细节分析
    • 服务器通过定义的数据类型规定了可以提供的各种形式的数据
    • 类型的字段要有对应的resolve提供对应的数据解析
    • 客户端可以根据服务端定义的数据类型选择性查询需要的字段信息

猜你喜欢

转载自blog.csdn.net/weixin_44867717/article/details/134257082