让我们添加这个RESTDataSource
类到我们的项目中。
在终端中,在我们的 server/
文件夹中,停止我们在项目设置部分启动的当前进程,然后运行:
npm install @apollo/datasource-rest
完成后,使用 npm start
再次启动服务器。
接下来,让我们在 server/src
文件夹中创建一个名为 datasources
的文件夹,所有我们的 数据源 将存放在这里。 我们将创建一个名为 track-api.js
的文件。
首先,我们导入我们的 @apollo/datasource-rest
包。
const { RESTDataSource } = require("@apollo/datasource-rest");
这给了我们一个 RESTDataSource
类,我们可以扩展它。
我们将声明一个名为 TrackAPI
的类,它扩展了 RESTDataSource
。趁着现在,让我们在忘记之前导出它!
class TrackAPI extends RESTDataSource {// ...}module.exports = TrackAPI;
接下来,让我们为 REST API 赋值 baseURL
。此属性用作所有调用的前缀。
class TrackAPI extends RESTDataSource {baseURL = "https://odyssey-lift-off-rest-api.herokuapp.com/";}
注意: 确保你的 TrackAPI
类的 baseURL
值以 /
结尾。这将允许我们的辅助类进行请求并将新的路径附加到 baseURL
而不产生任何错误。
创建一个名为 SpaceCatsAPI
的类,它扩展了 RESTDataSource
类。它的 baseURL
应设置为 https://fake-spacecats-rest-api.cat/
。假设 RESTDataSource
类已导入。
让我们在我们的 TrackAPI
类中定义一个名为 getTracksForHome
的方法。 RESTDataSource
类提供HTTP 请求的辅助方法。在我们的例子中,我们要对 tracks
端点执行 GET
请求。然后,我们返回该调用的结果。
getTracksForHome() {return this.get('tracks');}
接下来,是时候在我们的 TrackAPI
类中定义 getAuthor
方法了。它接受一个 authorId
作为 参数 并将其用于对 /author/:id
端点的 GET
调用。然后,我们返回该调用的结果。
在我们的 getTracksForHome
方法下方
getAuthor(authorId) {return this.get(`author/${authorId}`);}
注意使用反引号 (`
) 括起 author/:id
端点,因为我们正在使用字符串插值在末尾添加 authorId
。
干得好!我们已经设置了我们的 数据源 并从 REST API 检索数据。
const { RESTDataSource } = require("@apollo/datasource-rest");class TrackAPI extends RESTDataSource {baseURL = "https://odyssey-lift-off-rest-api.herokuapp.com/";getTracksForHome() {return this.get("tracks");}getAuthor(authorId) {return this.get(`author/${authorId}`);}}module.exports = TrackAPI;
SpaceCatsAPI
类需要两个方法。第一个方法称为 getSpaceCats
。此方法向 spacecats
端点发出 GET 请求并返回结果。第二个方法称为 getMissions
。它接受一个 catId
作为参数,并向 spacecats/${catId}/missions
端点发出 GET 请求并返回结果。假设 RESTDataSource
类已导入。
分享您对本课的疑问和评论
您的反馈将帮助我们改进!如果您遇到困难或困惑,请告诉我们,我们会帮助您解决。所有评论都是公开的,必须遵循 Apollo 行为准则。请注意,已解决或已处理的评论可能会被删除。
您需要一个 GitHub 帐户才能在下方发帖。还没有帐户吗? 请在我们的奥德赛论坛中发帖。