在没有Apollo Server但具有express-graphql的情况下,可以使用apollo-datasource-rest来实现对RESTful API的数据源管理。
首先,需要安装apollo-datasource-rest依赖包。可以通过以下命令使用npm进行安装:
npm install apollo-datasource-rest
接下来,创建一个新的数据源类,继承自apollo-datasource-rest的RESTDataSource类。在该类中,可以定义与RESTful API交互的各种方法。
const { RESTDataSource } = require('apollo-datasource-rest');
class MyRESTDataSource extends RESTDataSource {
constructor() {
super();
this.baseURL = 'https://api.example.com/';
}
async getSomeData() {
return this.get('endpoint');
}
async postData(data) {
return this.post('endpoint', data);
}
// 其他自定义方法...
}
在上述代码中,baseURL
属性指定了RESTful API的基本URL,getSomeData
和postData
分别定义了获取数据和提交数据的方法。
接下来,在GraphQL的解析器中使用该数据源类。首先,需要在GraphQL服务器的配置中将数据源类实例化,并将其传递给解析器的上下文。
const { ApolloServer, gql } = require('apollo-server-express');
const { MyRESTDataSource } = require('./myRESTDataSource');
const typeDefs = gql`
type Query {
someData: [Data]
}
`;
const resolvers = {
Query: {
someData: (_, __, { dataSources }) => {
return dataSources.myRESTDataSource.getSomeData();
},
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => ({
myRESTDataSource: new MyRESTDataSource(),
}),
});
// 将Apollo Server与express-graphql集成
const express = require('express');
const app = express();
server.applyMiddleware({ app });
app.listen({ port: 4000 }, () =>
console.log(`Server ready at http://localhost:4000${server.graphqlPath}`)
);
在上述代码中,MyRESTDataSource
被实例化并传递给了Apollo Server的dataSources
选项。在解析器中,可以通过dataSources.myRESTDataSource
来访问该数据源类的方法。
最后,可以通过GraphQL查询来调用数据源类的方法。在上述示例中,可以通过以下查询来获取数据:
query {
someData {
field1
field2
# ...
}
}
以上就是在没有Apollo Server但具有express-graphql的情况下使用apollo-datasource-rest的基本步骤。通过这种方式,可以方便地使用RESTful API作为数据源,并在GraphQL中进行查询和变更操作。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云