1

我正在用 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 集成。我期待着找到处理此案的最佳方法。

4

1 回答 1

2

我通常建议在连接器中进行解析,因为它们应该抽象出后端的细节。如果连接器在后端抽象,从技术上讲,您应该能够在适当的时候将一个后端切换到另一个后端。例如,您可以从查询 REST API 切换到将查询直接发送到有意义的数据库。

这样做的结果是您需要为每个 REST API 构建一个新的连接器,因为没有两个 REST API 是相同的。

于 2016-08-04T17:39:15.573 回答