1
我正在用Apollo服務器封裝較舊的REST API服務。調用REST服務會產生一個JSON對象,它將有效負載嵌套到2到3級的深度。例如:Apollo服務器 - 解析連接器,解析器或模型中的REST結果
{
- 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集成。我期待着發現處理這種情況的最佳方式。
您提出了一個抽象層的好點。因此,解決方案將爲每個資源類型構建一個fetch()和fetchPage(),因爲這個特定的REST API會爲每個資源創建一個自定義節點名稱。 – jboothe
或者更好的做法是將resource_type參數傳遞給fetch() - 類似於'fetch(url,resourceType)'',然後創建類似於'CAT_TYPE =「MRData.CatTable.Cats」'和'DOG_TYPE =「MRData.DogTable.Dogs」整理出每個資源使用的分析結構。 – jboothe