이전 REST API 서비스를 Apollo 서버로 래핑합니다. REST 서비스를 호출하면 2 ~ 3 레벨의 페이로드가 중첩되는 JSON 객체가된다. 예를 들면 다음과 같습니다.Apollo Server - Connector, Resolver 또는 Model에서 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;
}
아폴로는 REST API와 통합됩니다. 나는이 사건을 다루는 최선의 방법을 발견하기를 고대하고있다.
추상화 계층에서 좋은 점이 생깁니다. 따라서이 특정 REST API는 자원 당 사용자 정의 노드 이름을 작성하므로 각 자원 유형에 대해 fetch() 및 fetchPage()를 빌드하는 것이 해결책입니다. – jboothe
아니면 fetch()와 같이 resource_type 인수를'fetch (url, resourceType)'과 같이 전달한 다음'CAT_TYPE = "MRData.CatTable.Cats"'와'DOG_TYPE = "MRUM.DogTable.Dogs"와 같은 ENUM을 생성하십시오. 각 리소스에 사용할 구문 분석 구조를 정렬합니다. – jboothe