Top 10 công cụ trong hệ sinh thái GraphQL (Tập 1)
Trong bài viết hôm nay, mình sẽ đem đến cho các bạn 10 công cụ rất phổ biến trong hệ sinh thái của GraphQL mà các bạn nên biết đến để cải thiện hiệu suất cũng như tính linh hoạt khi làm việc với công nghệ này nhé.

GraphQL đã và đang phát triển rất mạnh mẽ trong cộng động nhà phát triển từ những năm trờ lại đây. Với sự chóng lưng bởi Facebook cùng với những ưu điểm nổi trội, GraphQL đang được đón nhận nồng nhiệt hơn bao giờ hết. Trong mảng lập trình web, từ backend đến frontend, GraphQL đem đến sự tiện lợi khi chỉ có một endpoint duy nhất cùng với tính linh hoạt của giá trị đầu ra.
Bản thân mình đã có một thời gian học và làm quen với GraphQL, thậm chí mình cũng đã sử dụng GraphQL trong nhiều dự án lớn nhỏ. Và đến bây giờ nếu không yêu cầu, mình vẫn chưa muốn quay lại sử dụng RESTful API.
Do đó, trong bài viết hôm nay, mình sẽ đem đến cho các bạn 10 công cụ rất phổ biến trong hệ sinh thái của GraphQL mà các bạn nên biết đến để cải thiện hiệu suất cũng như tính linh hoạt khi làm việc với công nghệ này nhé.
Các công cụ được mình xếp hạng trong bài viết này sẽ không dựa vào số 🌟 trên Github mà dựa vào quan điểm của mình về tính hữu dụng của các công cụ nhé!
Nếu các bạn muốn tìm hiểu tổng quát nhất về các công cụ của GraphQL, các bạn có thể tham khảo GraphQL Landscape

1. Apollo GraphQL (> 16.1k ⭐)

Nhắc đến GraphQL thì không thể không nhắc đến Apollo GraphQL. Apollo GraphQL là một dịch vụ cung cấp nhiều API hỗ trợ kiến trúc GraphQL. Nếu như các bạn bắt đầu học GraphQL thì sẽ biết ngay đến Apollo GraphQL ngay từ các bài giảng đầu tiên.
Apollo bao gồm các API và dịch vụ mạnh mẽ như Apollo Server, Apollo Client, Apollo Studio, Apollo Federation, Apollo Gateway...
Các thư viện cũng như công cụ mà Apollo cung cấp sẽ đóng một vai trò riêng. Ví dụ như Apollo Server chung quy sẽ được dùng để kiến trúc nên máy chủ GraphQL, giao tiếp với các máy khách GraphQL khác, bao gồm cả Apollo Client. Hay Apollo Federation được sử dụng để kiến trúc Microservice cho máy chủ GraphQL.
2. GraphQL Yoga 🧘♀️(> 6.4k ⭐)

Github: https://github.com/dotansimha/graphql-yoga
Khác với Apollo là một dịch vụ, GraphQL Yoga là dự án mã nguồn mở đem đến cho nhà phát triển khả năng kiến tạo nên máy chủ GraphQL cũng như Apollo Server. Tuy nhiên, đặc điểm mà mình rất thích ở GraphQL Yoga là nhà phát triển có thể ứng biến trong nhiều hoàn cảnh khác nhau bởi tính mở rộng của nó. Nếu so sánh GraphQL Yoga với Apollo Server nói riêng, mình sẽ chuộng GraphQL Yoga hơn.
GraphQL Yoga cung cấp môi trường để kiến tạo GraphQL Subscription và tương thích với nhiều máy khách GraphQL, thậm chí là cả Apollo Client. Một đặc điểm mình rất thích ở GraphQL Yoga là thư viện này cho phép sử dụng Express song song với GraphQL nên lập trình viên có thể linh hoạt giữa Graph API và RESTful API.
3. GraphiQL (>12k ⭐)

Github: https://github.com/graphql/graphiql
GraphiQL là một IDE dành cho GraphQL với môi trường phát triển mạnh mẽ và được sử dụng, phát triển rộng rãi bởi cộng đồng. GraphiQL được xây dựng trên nền của React nên tốc độ xử lý nhanh cùng với bộ plugin hữu ích trong quá trình phát triển. Tốc độ nhắc nhở, sửa lỗi và gợi ý các câu lệnh cũng nhanh chóng không kém làm giảm thiểu thời gian phát triển.
Vì là một dự án mã nguồn mở và là một IDE riêng biệt, lập trình viên không cần quá phụ thuộc vào các playground có sẵn từ máy chủ GraphQL được cung cấp bởi Apollo Server hay GraphQL Yoga.
4. TypeGraphQL (> 6.2k ⭐)

TypeGraphQL là một framework lo từ A tới Z trong việc kiến tạo nên Graph API và máy chủ GraphQL trong NodeJS. Tương ứng với chữ Type trong TypeGraphQL là TypeScript. Bằng cách sử dụng hệ thống Type trong Typescript, TypeGraphQL khiến cho việc kiến trúc Graph API dễ dàng hơn. Khi giờ đây, nhà phát triển không còn phải rối trong mớ bồng bông mà Javascript mang đến nữa. Nếu bạn đã quá quen thuộc với Typescript thì việc phát triển GraphQL sẽ dễ tiếp cận và mở rộng hơn bao giờ hết.
Bằng cách tận dụng Dependency Injection, TypeGraphQL khiến cho việc khai báo các GraphQL schema và resolver thông qua các chú thích (annotation). Mình khá là bất ngờ khi sử dụng TypeGraphQL với TypeORM, vì cả 2 công cụ này đều sử dụng các chú thích. Khi kết hợp được cả hai với nhau, thời gian phát triển sẽ được tiết kiệm rất nhiều.

5. Dataloader (> 10.4k ⭐)
Github: https://github.com/graphql/dataloader
Dataloader là một thư viện được phát triển bởi chính cha đẻ GraphQL - Facebook. Giống như tên của thư viện này - Dataloader - thư viện này được sử dụng để load dữ liệu. Để giải thích thêm thì Dataloader được ra đời nhằm mục đích cải thiện hiệu suất cũng như giải quyết các vấn đề khi truy vấn dữ liệu (như là vấn đề N+1). Có thể nói, khi dự án của bạn đạt đến mức hàng chục hàng trăm dữ liệu trong bảng, Dataloader sẽ là giải pháp bạn nên ưu tiên nghĩ đến để có thể xử lý dữ liệu một cách tốt nhất.

Để có một cái nhìn cụ thể hơn về Dataloader trong GraphQL, các bạn nên tìm hiểu qua về vấn đề N+1 khi làm việc với dữ liệu. Từ đó, các bạn sẽ biết được tầm quan trọng của Dataloader.