4. 实施 RESTDataSource
2m
你现在处于本课程的旧版本中。 查看课程更新记录.

让我们添加此内容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;

让我们在类内部定义一个 constructor 方法。在内部,我们将调用 super() 以确保我们可以访问 RESTDataSource 特性。我们还将分配我们的 REST API 的基本 URL。

class TrackAPI extends RESTDataSource {
constructor() {
super();
this.baseURL = "https://odyssey-lift-off-rest-api.herokuapp.com/";
}
}
编码挑战!

创建一个名为 SpaceCatsAPI 的类,它扩展了 RESTDataSource 类。它应该有一个构造函数方法。它的 baseURL 应设置为 https://fake-spacecats-rest-api.cat/。假设已经导入了 RESTDataSource 类。

让我们在 TrackAPI 类中定义一个名为 getTracksForHome 的方法。 RESTDataSource 类提供了 HTTP 请求的帮助方法。在我们的例子中,我们想对 tracks 终结点执行 GET 请求。然后,我们返回该调用的结果。

在我们的 constructor 方法的下面

getTracksForHome() {
return this.get('tracks');
}

接下来,是时候在我们的 TrackAPI 类中定义 getAuthor 方法了。它将一个 authorId 作为 并将其用于 GET 调用 /author/:id 端点。然后,我们返回该调用的结果。

在我们的 getTracksForHome 方法下方

getAuthor(authorId) {
return this.get(`author/${authorId}`);
}

请注意反引号 (`) 将 author/:id 端点括起来,因为我们正在使用字符串插值在末尾添加 authorId

干得漂亮!我们已经设置好了 并在从 REST API 检索数据。

server/src/datasources/track-api.js
const { RESTDataSource } = require("apollo-datasource-rest");
class TrackAPI extends RESTDataSource {
constructor() {
super();
this.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 帐户才能在下面发帖。没有 GitHub 帐户? 改为在我们的奥德赛论坛中发帖。