让我们添加此内容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 检索数据。
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 帐户? 改为在我们的奥德赛论坛中发帖。