10月2日更新,提供更多澄清和示例
我正在构建一个NestJS API (不是用于反应服务器端呈现的Next.js )。为了帮助采用,我考虑同时提供GraphQL和传统的REST端点,但是首先要做的是GraphQL。理想情况下,我将首先开发GraphQL,REST本质上只是在内部进行GraphQL查询调用,而不需要任何重定向。
例如,假设有一个列出全年提供的所有类的端点,等效的GraphQL端点应该如下
{
classes( year: 2021 ) {
courseId,
name,
teacher {
firstName,
lastName,
},
credit,
prerequisite {
courseId,
name,
}
}
}我们的API还将公开REST端点/api/classes?year=2021,而不是复制GraphQL解析在控制器中所做的相同的逻辑,理想情况下,控制器只需要将一个GraphQL查询放在一起,并将其抛回给NestJS实例,这样所有的headers等都将被保留。
想知道我怎么能做到这一点。
在……里面
发布于 2022-06-30 14:33:31
这似乎是对本地url的简单http请求。为了帮助gql,我会使用类似于graphql-请求的东西。
您应该能够在注入控制器之前使用url预先配置您的http客户端,这将有助于(例如)使用不同的env配置。
发布于 2021-10-03 01:57:44
NestJS与您想要实现的目标没有什么关系,因为它最终是针对React应用程序的服务器端呈现的。您的请求只涉及它的API方面,您可以(在我看来可能也应该)独立构建它。
假设您的服务器是基于JS的,它最终将使用graphql.js --这是所有服务器使用的参考实现。这允许您使用模式、解析器和查询调用graphql()函数以获得结果。
如果您使用像阿波罗这样的服务器,它们通常会在上面提供一个API来执行查询方向。对于阿波罗,我相信你可以使用server.executeOperation。
最后,如果需要创建模式/服务器的单个实例,则可以将其导入rest路由的控制器中,并使用它发出GraphQL请求。如果使用的是快递,则如下所示:
const apollo = new ApolloServer({
schema,
});
export default apollo;import server from './apollo';
const router = express.Router();
router.get('/some/path', async (req: Request, res: Response) => {
const result = await server.executeOperation({
query: '{ some { id }}',
});
res.json(result);
});https://stackoverflow.com/questions/69413719
复制相似问题