GraphQL 서버용 프록시 생성
이 기사에서는 최소한의 코드로 동일한 작업을 수행하는 방법을 설명합니다 😏
graphql-tools에서 제공하는 멋진 유틸리티를 활용할 것입니다.
설치
npm init -y
npm i @graphql-tools/delegate @graphql-tools/utils @graphql-tools/wrap apollo-server cross-undici-fetch graphql typescript
실행기 만들기
Executor는 GraphQL 결과를 검색할 수 있는 기능입니다(쿼리 실행 중 검사 및 결과 가져오기 모두).
실행기에서 프록시하려는 GraphQL 서비스의 URL을 정의했습니다. - https://graphql.anilist.co/ (좋아하는 애니메이션 캐릭터를 가져오기 위한 개방형 API)
const executor = async ({ document , variables, context }: {document: any, variables: any, context: any}) => {
const query = print(document)
const fetchResult = await fetch('https://graphql.anilist.co/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
...context?.headers
},
body: JSON.stringify({ query, variables })
})
return fetchResult.json()
}
applicationProxyResolver 정의
이 함수는
wrapSchema
메서드에 전달됩니다. 이 방법에서는 몇 가지 결정을 내릴 수 있어야 합니다. 예를 들어 - 일부 헤더의 유효성을 검사하고 이러한 헤더가 있는 경우에만 요청을 존중하고 싶었습니다. delegateToSchema
를 사용하여 전체 요청을 원래 GraphQL 서비스에 위임합니다.export const applicationProxyResolver = ({
subschemaConfig,
operation,
transformedSchema,
}: {
subschemaConfig: any,
operation: any,
transformedSchema: any,
}) => {
return (_parent: any, _args: any, context: any, info: any) => {
return delegate.delegateToSchema({
schema: subschemaConfig,
operation,
operationName: info!.operation!.name!.value,
context,
info,
transformedSchema,
});
};
}
graphQL 프록시 서버를 시작합시다 🚀
const init = async () => {
const schema = wrapSchema({
schema: await introspectSchema(executor),
executor,
createProxyingResolver: applicationProxyResolver
});
const server = new ApolloServer({
schema,
});
// The `listen` method launches a web server.
server.listen(4001).then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
}
init();
이 코드는 Github 에서 찾을 수 있습니다.
더 쉬운 방법이 있습니까? 댓글&알려주세요😁
Reference
이 문제에 관하여(GraphQL 서버용 프록시 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/harshitkumar31/creating-a-proxy-for-your-graphql-server-5b9o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)