基于C++的GraphQL库:使用graphql-cpp实现API

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

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

开始课程

用于C++的GraphQL库:graphql-cpp



在现代网络技术世界中,GraphQL已成为构建灵活高效API的标准。如果您使用C++进行开发并希望引入对此协议的支持,您需要一个可靠的库。最佳解决方案之一是graphql-cpp——一个开源库,它允许您以最小的努力在C++中创建完整的GraphQL服务器。



什么是graphql-cpp?

graphql-cpp是一个轻量级但功能强大的库,它在C++14及更高版本上实现了GraphQL规范(2018年6月)。它提供了所有必要的组件:查询解析器、类型系统、查询执行机制以及对订阅的支持。该库不依赖任何第三方HTTP框架,因此可以集成到任何项目中——从嵌入式系统到高负载服务器。



主要功能

  • 完全支持GraphQL模式:对象、接口、联合类型、枚举、标量和输入类型。
  • 查询验证与执行:内置验证器和执行器,支持复杂查询、片段和指令。
  • 支持订阅(Subscriptions):通过响应式流实现。
  • 可自定义的解析器:灵活的系统,用于将业务逻辑绑定到模式字段。
  • 兼容C++17/20:利用现代语言特性实现最大性能。
  • 无依赖:不需要Boost、POCO或其他外部库。


安装与配置

该库以header-only(仅头文件)形式分发。要安装,请克隆仓库:

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

在您的项目中,只需包含一个头文件:

#include <graphqlcpp/GraphQL.h>


示例:创建一个简单的API

让我们创建一个用于获取用户信息的模式。



1. 定义模式

using namespace graphqlcpp;

auto schema = Schema::create(R"( type Query { user(id: ID!): User users: [User] } type User { id: ID! name: String! email: String })");


2. 实现解析器

// 示例数据存储std::map<std::string, User> users = {    {"1", {"1", "Alice", "alice@example.com"}},    {"2", {"2", "Bob", "bob@example.com"}}};

// user字段的解析器schema->addResolver("Query", "user", [](const ResolverArgs& args) { auto id = args.getArgument<std::string>("id"); if (users.count(id)) return users[id]; return nullptr; // 如果用户未找到,返回null});

// users字段的解析器schema->addResolver("Query", "users", [](const ResolverArgs&) { std::vector<User> result; for (const auto& [_, user] : users) { result.push_back(user); } return result;});


3. 处理查询

std::string query = R"(    {        user(id: "1") {            name            email        }    })";

auto result = schema->execute(query);std::cout << result.dump(2) << std::endl;

输出:

{  "data": {    "user": {      "name": "Alice",      "email": "alice@example.com"    }  }}


对教育网站的优势

  • 清晰的文档:该库在代码中提供了详细的注释以及每种类型的示例。
  • 低入门门槛:开始使用只需了解C++基础和基本概念。

推荐