首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用REST包装GraphQL从NestJS提供REST和REST

使用REST包装GraphQL从NestJS提供REST和REST
EN

Stack Overflow用户
提问于 2021-10-02 03:20:05
回答 2查看 1.1K关注 0票数 1

10月2日更新,提供更多澄清和示例

我正在构建一个NestJS API (不是用于反应服务器端呈现的Next.js )。为了帮助采用,我考虑同时提供GraphQL和传统的REST端点,但是首先要做的是GraphQL。理想情况下,我将首先开发GraphQL,REST本质上只是在内部进行GraphQL查询调用,而不需要任何重定向。

例如,假设有一个列出全年提供的所有类的端点,等效的GraphQL端点应该如下

代码语言:javascript
复制
{
  classes( year: 2021 ) {
    courseId,
    name,
    teacher {
      firstName,
      lastName,
    },
    credit,
    prerequisite {
      courseId,
      name,
    }
  }
}

我们的API还将公开REST端点/api/classes?year=2021,而不是复制GraphQL解析在控制器中所做的相同的逻辑,理想情况下,控制器只需要将一个GraphQL查询放在一起,并将其抛回给NestJS实例,这样所有的headers等都将被保留。

想知道我怎么能做到这一点。

在……里面

EN

回答 2

Stack Overflow用户

发布于 2022-06-30 14:33:31

这似乎是对本地url的简单http请求。为了帮助gql,我会使用类似于graphql-请求的东西。

您应该能够在注入控制器之前使用url预先配置您的http客户端,这将有助于(例如)使用不同的env配置。

票数 0
EN

Stack Overflow用户

发布于 2021-10-03 01:57:44

NestJS与您想要实现的目标没有什么关系,因为它最终是针对React应用程序的服务器端呈现的。您的请求只涉及它的API方面,您可以(在我看来可能也应该)独立构建它。

假设您的服务器是基于JS的,它最终将使用graphql.js --这是所有服务器使用的参考实现。这允许您使用模式、解析器和查询调用graphql()函数以获得结果。

如果您使用像阿波罗这样的服务器,它们通常会在上面提供一个API来执行查询方向。对于阿波罗,我相信你可以使用server.executeOperation

最后,如果需要创建模式/服务器的单个实例,则可以将其导入rest路由的控制器中,并使用它发出GraphQL请求。如果使用的是快递,则如下所示:

代码语言:javascript
复制
const apollo = new ApolloServer({
  schema,
});

export default apollo;
代码语言:javascript
复制
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);
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69413719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档