graphql - 可以使用 protobuf 发布到 Apollo 服务器吗?
问题描述
我正在开发一个当前使用 protobuf 从客户端与 api 进行通信的项目。我想做一个显示通过graphql进行通信的概念证明,并且想知道是否可以将protobuf发送到apollo服务器而不是json。
我看到一些protobuf相关的包, https ://www.npmjs.com/package/apollo-engine-reporting-protobuf https://www.npmjs.com/package/@apollo/protobufjs
并且想知道是否有任何计划或是否有可能。在这里问是因为我在社区网站上没有收到任何回复。
解决方案
如果可以使用apollo-server-express
,只要在服务器上再次将 protobuf 转换为 json 就可以实现,我想这可以通过 protobuf.js 实现。
apollo-server
或apollo-server-express
期望请求正文中有三个密钥对值
操作名称
变量
询问
如果您正在使用apollo-server-express
,您可以使用您的自定义express middleware
,您可以在其中将 protobuf 反序列化为 json 并将 json 添加到req.body
Apollo Server。
从更改apollo-server
为apollo-server-express
只需几个步骤,并且您的阿波罗服务器配置没有变化
// import it from apollo-server-express instead of apollo-server
const { ApolloServer } = require('apollo-server-express');
const express = require('express');
const app = express();
app.use((req, res, next) => {
// Intercept the request before it reaches the Apollo Server
// Use protobuf.js to deserialize the request body into json
// Add the json to req.body
// Call the next() to go to next middleware
next();
});
const server = new ApolloServer({/* Your apollo server config */})
server.applyMiddleware({ app });
app.listen({ port: 4000 }, () => console.log(` Server ready at http://localhost:4000${server.graphqlPath}`));
推荐阅读
- node.js - 如何使用 WSO2 EI 集成服务并为使用 MERN 堆栈构建的 Web 应用程序提供 REST API?
- javascript - 表示会话未在中间件中定义,但在控制器中定义
- javascript - 根据剩余时间更改班级
- python - 有没有办法在 Selenium 的浏览器 URL 中输入字符?
- javascript - Google 爬虫能否读取延迟脚本在页面加载后插入的 JSON-LD?
- java - 如何使用 gradle-launch4j 插件将 gradle 项目编译为 exe
- typescript - 在 Typescript 的泛型类中初始化泛型类型
- excel - 当它是嵌套 if 语句中的第二个参数时,为什么 vlookup 不起作用?
- java - 如何在 JavaFX 中围绕一个点旋转三角形并获取点的值?
- javascript - 在 Material-UI 表格中对齐 TableHeader 和 TableBody 数据