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