GraphQL은 선언적 데이터 가져오기를 허용하여 클라이언트가 API에서 필요한 데이터를 지정할 수 있는 권한을 부여하는 API용 쿼리 언어로 잘 알려져 있습니다. GraphQL을 사용하면 시간이 지남에 따라 API를 더 쉽게 발전시킬 수 있습니다. GraphQL은 2012년 Facebook에서 개발한 후 2015년에 오픈 소스화되었습니다.
REST API는 World Wide Web 아키텍처의 개발 및 설계를 안내하기 위해 구축된 소프트웨어 아키텍처 스타일로 정의됩니다. REST API는 분산 시스템의 아키텍처가 작동하는 방식에 대한 일련의 제약 조건을 정의합니다.
이 블로그에서는 GraphQL과 REST API의 주요 차이점을 강조하여 비즈니스 요구 사항에 가장 적합한 것이 무엇인지 교육적인 결정을 내리는 데 도움을 줍니다.
GraphQL은 API 작업에 사용할 수 있는 쿼리 언어입니다. 클라이언트가 HTTP 요청을 만들고 응답을 받을 수 있습니다.
이름에서 알 수 있듯이 GraphQL 의 모든 정보 세트 는 그래프의 맥락에서 볼 수 있습니다. GraphQL 스키마 시스템 에서 정의된 노드 는 객체를 묘사하는 데 사용됩니다. 이러한 노드 사이의 에지는 그래프의 노드 사이의 연결을 나타내는 데 사용됩니다.
이렇게 하면 쿼리 간의 명확한 관계가 보장되고 개체 간의 연결성이 향상됩니다. GraphQL은 또한 사용자가 단일 요청을 사용하여 다양한 리소스에서 데이터를 요청할 수 있도록 합니다.
데이터 가져오기를 여러 번 요청하는 것과는 달리 GraphQL을 사용하여 단일 엔드포인트에 임시 쿼리를 만들고 필요한 모든 데이터에 액세스할 수 있습니다.
GraphQL을 사용하면 사용자가 서버에서 수신할 정확한 데이터 유형을 지정할 수도 있습니다. 이 예측 가능한 데이터 구조는 매우 효율적이고 읽기 쉽습니다. GraphQL은 이해하기 매우 쉽습니다. 선언적 특성으로 인해 최상의 결과를 얻을 수 있습니다.
REST API는 애플리케이션을 통합하는 유연하고 가벼운 방법을 제공합니다. REST API를 사용하면 일부 항목을 검색할 수 있으며 요청한 서비스에서 결과가 반환됩니다. REST API에는 다음 구성 요소가 있습니다.
다음은 REST API의 원활한 기능에 필수적인 몇 가지 REST 설계 원칙입니다.
GraphQL이 REST API의 실행 가능한 대안으로 개발된 주된 이유는 다음과 같습니다.
GraphQL과 REST는 HTTP 와 같은 인터넷 프로토콜을 통한 데이터 전송이라는 동일한 기능에 초점을 맞춘 두 가지 설계 방식입니다 . 그러나 구현은 분기되는 곳입니다. 다음은 GraphQL과 REST의 주제를 밝히기 위해 분석할 수 있는 몇 가지 요소입니다.
GraphQL과 REST 사용성은 버전 관리와 예측 가능성 측면에서 크게 다릅니다 . GraphQL의 중요한 이점은 높은 예측 가능성입니다.
이를 통해 API에 요청을 보내고 원치 않는 포함 없이 필요한 정확한 결과를 얻을 수 있습니다. GraphQL 쿼리는 사용성을 크게 향상시키는 예측 가능한 결과를 반환합니다.
반면에 REST의 동작은 사용된 HTTP 및 URI 메서드에 따라 다릅니다. 이로 인해 API 소비자가 엔드포인트를 호출할 때 예상되는 사항을 알 수 없게 될 수 있습니다.
버전 관리 측면에서 REST에는 이에 대한 표준화되고 명확한 지침이 없습니다. 이는 모든 공급자가 접근 방식을 자유롭게 구현할 수 있음을 의미합니다. 스펙트럼의 다른 쪽 끝에는 GraphQL이 있습니다. 버전 관리에 대한 매우 간단한 접근 방식을 따릅니다 . API를 버전화하지 마십시오 .
따라서 버전 관리 및 예측 가능성 측면에서 GraphQL과 REST API를 비교한다면 GraphQL의 단순성은 REST보다 우위에 있습니다.
GraphQL 대 REST 성능 측면 에서 RESTful 서비스 의 Over-fetching 및 Under-fetching 성향 은 GraphQL에 확실한 이점을 제공합니다. REST API는 적중될 때마다 규정된 데이터를 반환하도록 설계된 본질적으로 엄격한 데이터 구조를 가지고 있기 때문에 원치 않는 데이터가 누적되거나 관련 데이터를 가져오기 전에 여러 호출을 강제로 수행할 수 있습니다. 이러한 부적절성으로 인해 서버가 요청된 정보를 반환하는 데 걸리는 시간이 늘어날 수 있습니다.
반대로 GraphQL은 단일 API 요청에서 필요한 것을 검색할 수 있는 유연한 스타일을 사용합니다. 필요한 정보의 구조를 정의한 후 동일한 구조가 서버에서 반환되므로 과잉 가져오기 및 부족 가져오기를 방지할 수 있습니다.
일반적으로 성능 플래그에 대한 GraphQL 대 REST 토론에서는 GraphQL이 승자이지만 REST API가 더 나은 대안인 몇 가지 사용 사례가 있습니다. 예를 들어 API 호출을 촉진하기 위해 캐싱이 필요한 경우 입니다.
보안 측면에서 GraphQL과 REST에 대해 이야기할 때 크레딧은 REST에 기울고 있는 것 같습니다. REST는 API에 보안을 적용하는 여러 가지 방법을 제공합니다.
예를 들어 HTTP 인증 과 같은 여러 API 인증 방법을 구현하여 REST API 보안을 보장할 수 있습니다 . 여기에서 민감한 데이터는 JSON 웹 토큰을 통해 HTTP 헤더로 전송되며 여기서 민감한 데이터는 JSON 데이터 구조로 전송되거나 OAuth 2.0 메커니즘을 통해 전송됩니다.
GraphQL은 또한 API의 보안을 보장하기 위한 몇 가지 조치를 제공하지만 REST만큼 성숙하지는 않습니다. 예를 들어 GraphQL이 데이터 유효성 검사 통합을 지원하지만 사용자는 맨 위에 권한 부여 및 인증 조치를 적용하는 방법을 알아내야 합니다.
인기 측면에서 GraphQL 대 REST 논쟁은 REST API에 치중합니다. 예를 들어 API 2020 보고서 에 따르면 설문 조사에 참여한 API 소비자 및 실무자의 약 82% 가 REST 기반 OpenAPI 인증을 사용하는 반면 18% 만이 GraphQL을 사용합니다.
하지만 GraphQL의 인기는 꾸준히 치솟고 있습니다. State of JavaScript 2019 Report 에 따르면 조사 대상자의 5% 만이 2016년에 JavaScript를 사용했지만 2019년에는 38.7% 로 증가했습니다.
GraphQL과 REST의 데이터 가져오기 측면에서 REST API는 여러 엔드포인트에 액세스하여 데이터를 수집합니다. 계층 구조를 사용하여 다른 경로 또는 끝점을 사용합니다.
/user/id 가 사용자 데이터를 가져오는 하나의 끝점인 것처럼 /user /id/posts 는 사용자의 모든 게시물을 가져오는 또 다른 끝점이며 /user/id/followers 는 사용자의 팔로워 목록을 가져옵니다.
반면에 GraphQL에서는 데이터 요구 사항이 포함된 쿼리를 GraphQL 서버에 보내기만 하면 서버가 JSON 개체로 응답합니다.
다음은 REST API를 활용하는 것이 좋은 옵션인 몇 가지 사용 사례입니다.
다음은 GraphQL을 유용하게 활용할 수 있는 몇 가지 사용 사례입니다.
GraphQL의 장점 중 일부는 다음과 같습니다.
GraphQL의 몇 가지 단점은 다음과 같습니다.
REST의 주요 이점 중 일부는 다음과 같습니다.
REST의 주요 단점 중 일부는 다음과 같습니다.
다음은 더 나은 아이디어를 제공하기 위해 GraphQL과 REST API 주제에 대한 몇 가지 주요 차이점에 대한 요약 표입니다.
Sr.No | GraphQL | 쉬다 |
1. | GraphQL은 클라이언트 기반 아키텍처를 활용합니다. | REST는 서버 기반 아키텍처를 활용합니다. |
2. | GraphQL은 데이터를 나타내는 방법으로 JSON만 지원합니다. | REST는 사용자가 편리하게 사용할 수 있도록 다양한 데이터 형식을 지원합니다. |
삼. | GraphQL에는 자동 캐싱 메커니즘이 없습니다. | REST는 GraphQL과 달리 작업 중에 자동으로 캐싱을 구현합니다. |
4. | API 버전 관리는 GraphQL에서 사용할 수 없습니다. | REST는 다양한 API 버전을 지원합니다. |
5. | GraphQL은 API 통합 시 일반적인 문제를 해결하는 데 있어 유연성과 효율성을 제공하는 쿼리 언어로 정의됩니다. | REST는 API 개발을 위한 기존 표준으로 크게 볼 수 있는 아키텍처 스타일로 정의됩니다. |
6. | GraphQL은 노출된 서비스의 전체 기능을 제공하는 단일 엔드포인트를 통해 HTTP를 통해 배포됩니다. | REST는 각 URL이 단일 리소스를 노출할 수 있는 URL 집합을 통해 배포됩니다. |
7. | GraphQL의 오류 식별은 복잡하며 HTTP 상태 코드 처리를 포함합니다. | 반면 REST는 HTTP 상태 코드를 사용하여 오류를 쉽게 식별할 수 있습니다. |
8. | GraphQL은 문서화를 위해 GraphiQl만을 사용합니다. | REST는 API 및 OpenAPI 청사진과 같은 자동화된 문서화를 위한 다양한 옵션을 제공합니다. |
지금까지 GraphQL과 REST에 대한 논의를 마무리하기 위해 이 질문에 대한 대답은 주관적이며 특정 프로젝트 요구 사항 에 따라 크게 달라집니다 .
예를 들어, 데이터를 가져오기 위해 여러 번 왕복할 필요가 없는 최신 디자인 스타일을 사용하여 API 개발에 새로운 것을 주입하려는 경우 GraphQL이 최선의 선택일 수 있습니다.
그러나 강력한 기본 인증 또는 캐싱을 제공하는 입증된 기술을 사용하려는 경우 REST를 사용해야 합니다.
요구 사항에 가장 적합한 옵션을 선택하려면 각 API 디자인 스타일 아래에 있는 장단점과 제약 조건을 파악하는 것이 중요합니다. REST와 GraphQL을 모두 사용하는 혼합 및 일치 접근 방식을 배포할 수도 있습니다.
어떤 선택을 하든 API 가치 사슬의 모든 참여자, 즉 API 소비자(개발자), API 제공자 및 최종 사용자(고객) 의 요구를 충족하는 API 제품을 설계하는 데 집중해야 합니다 .
이 블로그에서는 GraphQL 대 REST 토론의 중요한 요소에 대해 설명하여 더 잘 이해할 수 있도록 도와줍니다. GraphQL 대 REST에 대해 알아보기 전에 REST 및 GraphQL에 대한 간략한 소개를 제공합니다.
REST API 와 같은 다양한 무료 데이터 소스 세트에서 복잡한 데이터를 추출 하는 것은 어려운 작업이 될 수 있습니다.