답변:
단점 :
그러나 이것들은 이것들에 의해 반박되는 것 이상입니다.
graphql-spring-boot-starter
및 graphql-java-tools
시작하기. .graphqls 리소스에 스키마를 생성하고 Resolver 클래스를 생성하면 완료됩니다. 작동하는 테스트 예제를 시작하고 실행하는 데 약 10 분이 걸렸습니다.
GraphQL 사용을 고려하는 모든 사람에게 몇 가지 중요한 우려 사항을 발견 했으며 지금까지 주요 사항은 다음과 같습니다.
무한 깊이 쿼리 : GraphQL은 무한 깊이 쿼리를 할 수 없으므로 트리가 있고 깊이를 모르는 분기를 반환하려면 페이지 매김을 수행해야합니다.
특정 응답 구조 : GraphQL에서 응답은 쿼리의 모양과 일치하므로 매우 구체적인 구조로 응답해야하는 경우 응답의 모양을 변경하기 위해 변환 계층을 추가해야합니다.
네트워크 수준의 캐시 : 일반적으로 GraphQL이 HTTP (단일 엔드 포인트의 POST)를 통해 사용되기 때문에 네트워크 수준의 캐시가 어려워집니다. 이를 해결하는 방법은 Persisted Queries를 사용하는 것입니다.
파일 업로드 처리 : GraphQL 사양에는 파일 업로드에 관한 것이 없으며 변형은 인수에 파일을 허용하지 않습니다. 이 문제를 해결하려면 REST와 같은 다른 종류의 API를 사용하여 파일을 업로드하고 업로드 된 파일의 URL을 GraphQL 변형에 전달하거나 실행 컨텍스트에 파일을 삽입하여 파일이 리졸버 함수 내에있게됩니다.
예측할 수없는 실행 : GraphQL의 특성은 원하는 필드를 조합하여 쿼리 할 수 있다는 것입니다. 그러나 이러한 유연성은 무료가 아닙니다. 성능 및 N + 1 쿼리와 같이 알아두면 좋은 몇 가지 문제가 있습니다.
Super Simple APIs : 정말 간단한 API를 노출하는 서비스가있는 경우 GraphQL은 추가 복잡성 만 추가하므로 간단한 REST API가 더 좋을 수 있습니다.
graphQL에서 볼 수있는이 가장 큰 문제는 즉 관계형 데이터베이스와 함께 사용하는 경우 조인 입니다.
몇 개의 필드를 허용 / 비 허용 할 수 있다는 사실은 조인을 간단하지 않게 만듭니다. 추가 쿼리로 이어집니다.
또한 graphql의 중첩 된 쿼리는 순환 쿼리로 이어지고 서버 가 중단 될 수 있습니다 . 특별한주의가 필요합니다.
통화 속도 제한 이 어려워졌습니다. 이제 사용자가 한 번의 통화로 여러 쿼리를 실행할 수 있습니다.
팁 : javascript / node의 경우 facebook의 데이터 로더를 사용하여 쿼리 수를 줄입니다.
cost
요청을 구문 분석하고 할당 할 수 있습니다 . 또한 클라이언트가 ID 만 보내는 미리 정의 된 쿼리를 사용하는 경우에는 문제가되지 않습니다.
매년 점점 나아지고 있으며 현재 GraphQL 커뮤니티 는 성장하고 있으며 그 결과 이전에 다른 답변에서 강조된 많은 문제에 대한 훨씬 더 많은 솔루션이 있습니다. 그러나 여전히 기업이 모든 자원을 GraphQL에 투입하는 것을 막고 있음을 인정하기 위해 몇 가지 문제와 해결책을 나열하고 그 뒤에 해결되지 않은 문제를 나열하고 싶습니다.
그러나 단점으로 간주 될 수있는 몇 가지 사례가 더 있습니다.
요약하자면 GraphQL은 특정 목표를위한 도구 일 뿐이며 모든 문제에 대한 은총이 아니며 물론 REST를 대체하는 것도 아닙니다.
단일 엔드 포인트를 가지고 모든 데이터를 노출하는 것은 정말 좋습니다. GraphQL에서 고려해야 할 사항은 다음과 같습니다.
또한 구현 후 프로를 고려해야합니다.
인수 및 사용자 지정 순서를 사용하여 쉽게 조건을 추가 할 수 있습니다.
많은 사용자 정의 필터를 사용하고 사용자가 ID, 이름 등을 인수로 갖고 필터링을 수행 할 수있는 예를 들어 생성해야하는 모든 작업을 제거합니다. 또한 필터는 사용자의 그룹에도 적용 할 수 있습니다.
지금은 graphql이 백엔드 아키텍처의 일부 여야한다고 생각합니다. 파일 업로드를 위해 여전히 일반 API에 도달했습니다.