GraphQL API 与 C++:面向初学者的分步教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

GraphQL API 与 C++:面向初学者的分步教程



GraphQL 是一种用于 API 的现代查询语言,它允许客户端只请求他们真正需要的数据。与 REST 不同,REST 的响应结构是固定的,而 GraphQL 提供了灵活性和控制力。在本教程中,我们将从零开始讲解如何在 C++ 上创建一个简单的 GraphQL API。您将学习如何连接 graphql-cpp 库、定义模式、编写解析器以及测试查询。本文面向熟悉 C++ 基础的初学者。



为什么选择 C++?这种语言提供了高性能,这对于高负载的 API 至关重要。C++ 上的 GraphQL 常用于实时系统、游戏引擎和高负载 Web 服务。让我们开始吧!



安装和配置环境



我们需要一个支持 C++17 的编译器(例如 GCC 8+ 或 Clang 10+)、CMake 和 graphql-cpp 库。让我们安装所有必要的组件。



步骤 1:安装依赖项

在 Ubuntu/Debian 上执行:

sudo apt updatesudo apt install build-essential cmake libboost-all-dev libssl-dev


对于 macOS,使用 Homebrew:

brew install cmake boost openssl


步骤 2:克隆 graphql-cpp 库

graphql-cpp 库是 C++ 上 GraphQL 的轻量级实现。克隆仓库:

git clone https://github.com/your-repo/graphql-cpp.gitcd graphql-cppmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j4sudo make install


安装后,创建一个新项目。文件夹结构:

my_graphql_api/├── CMakeLists.txt├── src/│   ├── main.cpp│   └── schema.cpp└── include/    └── schema.h


步骤 3:配置 CMakeLists.txt

创建 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.10)project(GraphQLExample)

set(CMAKE_CXX_STANDARD 17)

find_package(graphql-cpp REQUIRED)find_package(Boost REQUIRED COMPONENTS system)

add_executable(graphql_example src/main.cpp src/schema.cpp)target_include_directories(graphql_example PRIVATE include)target_link_libraries(graphql_example graphql-cpp::graphql-cpp Boost::system)


定义 GraphQL 模式



模式是 GraphQL API 的核心。它描述了数据类型、查询(queries)和变更(mutations)。在我们的示例中,将创建一个用于管理书籍列表的 API。



创建 Book 类型

在 include/schema.h 文件中,声明数据结构以及用于创建模式的函数:

#ifndef SCHEMA_H#define SCHEMA_H

#include <graphql-cpp/graphql.hpp>#include <string>#include <vector>

struct Book { int id; std::string title; std::string author; int year;};

graphql::Schema createBookSchema();

#endif // SCHEMA_H


实现模式

在 src/schema.cpp 文件中,定义类型和根查询:

#include "schema.h"#include <graphql-cpp/graphql.hpp>#include <vector>#include <memory>

using namespace graphql;

// 临时书籍存储std::vector<Book> books = { {1, "C++ Primer", "Stanley B. Lippman", 2012}, {2, "Effective Modern C++", "Scott Meyers", 2014}};

Schema createBookSchema() { // 1. 定义 Book 类型 ObjectType bookType("Book"); bookType.addField("id", Type::NonNull(Type::Int())); bookType.addField("title", Type::NonNull(Type::String())); bookType.addField("author", Type::NonNull(Type::String())); bookType.addField("year", Type::Int());

// 2. 定义根查询 ObjectType queryType("Query"); queryType.addField("books", Type::List(Type::NonNull(bookType)), [](const auto& args) -> json { json result =

博客

书籍推荐