我正在用 Apollo 服务器包装一个较旧的 REST API 服务。调用 REST 服务会生成一个 JSON 对象,该对象将负载嵌套 2 到 3 层深度。例如:
{
- MRData: {
- CatTable : {
- Cats : []
更复杂的是,每个资源端点的嵌套模式和节点名称都不同。所以我的问题是,因为每个资源结果都需要自定义操作,所以最好的地方是:在连接器、解析器或模型中。
连接器
如果在连接器中完成,则每个资源都需要一个自定义方法。似乎有很多样板。
public fetchCats(resource: string) {
return new Promise<any>((resolve, reject) => {
request.get(url, (err, resp, body) => {
err ? reject(err) : resolve(JSON.parse(body).MRData.CatTable.Cats)
})
})
}
解析器
解析器方法收到一个承诺,但结果不能被操纵:
const allCats = (_, params, context) => context.cat.getCats()
.then((data) => { // to late to manipulate data here })
模型
该模型看起来很有希望,但不太确定如何构建它:
public getCats() {
const cats = this.connector.fetchCats('/cats.json');
return cats;
}
Apollo 将(通常)与 REST API 集成。我期待着找到处理此案的最佳方法。