Apollo RESTDataSource调用其他RESTDataSource?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apollo RESTDataSource调用其他RESTDataSource?相关的知识,希望对你有一定的参考价值。
假设我有2个扩展RESTDataSource的API类。
class MoviesAPI extends RESTDataSource
async getMovies()
class SongsAPI extends RESTDataSource
async getSongs()
我怎么能调用 getSongs
从 getMovies
在现有的Apollo服务器上下文中?
答案
你可以通过以下方式获得apollo服务器的上下文。this.context
中的数据源类,并获得 dataSources
通过 this.context.dataSources
.
例如:
server.ts
:
import ApolloServer, gql from 'apollo-server';
import MoviesAPI from './MoviesAPI';
import SongsAPI from './SongsAPI';
const typeDefs = gql`
type Query
movies: String
`;
const resolvers =
Query:
movies: (_, __, dataSources ) =>
return dataSources.moviesAPI.getMovies();
,
,
;
const server = new ApolloServer(
typeDefs,
resolvers,
dataSources: () =>
return
moviesAPI: new MoviesAPI(),
songsAPI: new SongsAPI(),
;
,
);
server.listen().then(( url ) =>
console.log(`Apollo server is listening on $url`);
);
MoviesAPI.ts
:
import RESTDataSource from 'apollo-datasource-rest';
export class MoviesAPI extends RESTDataSource
async getMovies()
const songs = await this.context.dataSources.songsAPI.getSongs();
const movies = ['a', 'b'];
return JSON.stringify( movies, songs );
SongsAPI.ts
:
import RESTDataSource from 'apollo-datasource-rest';
export class SongsAPI extends RESTDataSource
async getSongs()
return ['x', 'y'];
从客户端发送一个GraphQL查询。
query
movies
响应有效载荷。
"data":
"movies": "\"movies\":[\"a\",\"b\"],\"songs\":[\"x\",\"y\"]"
包版本: "apollo-datasource-rest": "^0.8.1"
, "apollo-server": "^2.12.0"
源码。https:/github.commrdulinapollo-graphql-tutorialtreemastersrcstackoverflow61425326。
以上是关于Apollo RESTDataSource调用其他RESTDataSource?的主要内容,如果未能解决你的问题,请参考以下文章
RESTDataSource - 如何知道响应来自获取请求还是缓存
使用 type-graphql 和 RESTDataSource 为第二个 api 调用添加字段解析器