将 GraphQL Schema 公开为 REST api 的方法都有哪些?

Posted

技术标签:

【中文标题】将 GraphQL Schema 公开为 REST api 的方法都有哪些?【英文标题】:What are the ways to expose GraphQL Schema as REST api?将 GraphQL Schema 公开为 REST api 的方法有哪些? 【发布时间】:2021-11-04 02:14:39 【问题描述】:

我开发了 Graphql api,并希望从中公开一些 REST API 端点。所以在这里我的意图是使用相同的 Graphql 逻辑将其公开为 rest api。到目前为止,我收到了有关使用沙发来实现这一点的帖子,并想检查是否有任何我们可以使用的 NestJS 或 Graphql 现有包。

【问题讨论】:

【参考方案1】:

这取决于您迄今为止构建应用程序的方式。一般来说,NestJS 提倡 N 层架构,其中业务逻辑属于服务/提供者内部。当以这种方式构建时,在 GraphQL 解析器和 HTTP 控制器之间共享逻辑变得相对简单。

解析器和控制器应该纯粹充当路由组件,接收请求/数据并将它们传递给适当的服务进行处理。

@Resolver()
class MyResolver 
   constructor(private readonly service: MyService)  

   @Query()
   doSomething() 
     return this.service.doSomething();
   


@Controller()
class MyController 
   constructor(private readonly service: MyService)  

   @Get()
   doSomething() 
     return this.service.doSomething();
   

【讨论】:

【参考方案2】:

您已经开发了一个 GraphQL API ,然后您想将其公开为 REST ,或者您想在您的 GraphQL API 中集成一个 REST API?如果是第一个,那你就完全错过了 GraphQL 的意义。如果是第二个,那么您需要在 Apollo Server 构造函数中传递 context 参数,其中包含 dataSource 参数。然后你必须定义一个扩展RESTDataSource(https://www.apollographql.com/docs/apollo-server/data/data-sources/)的类。

【讨论】:

感谢您的快速帮助。我正在寻找第一个案例。我有一个应用程序,它在 REST api 上中继,其他人正在使用我的 Graphql api。我只想为该应用程序公开几个 REST 端点,但想为其使用相同的 Graphql 逻辑而不是单独编写一个。

以上是关于将 GraphQL Schema 公开为 REST api 的方法都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

生成动态 GraphQL Schema

harbor rest api 转graphql api

streamsets rest api 转换 graphql

分分钟将 REST 转换为 GraphQL

将 REST API 获取请求转换为 GraphQL

如何使用环回 4 进行修复(将 rest 转换为 graphql):OPTIONS http://localhost:3001/graphql 405(不允许的方法)