Hướng dẫn tạo Graphql Server một cách dễ dàng - Phần 1

Hướng dẫn tạo Graphql Server một cách dễ dàng - Phần 1

Mình đã viết về Graphql trong bài viết giới thiệu Graphql, bài viết ra mắt gần 2 năm trước nhưng còn khá sơ sài không đi sâu vào chi tiết, cũng trong ngần ấy thời gian cũng ít thấy bài viết tiếng Việt nào nói thêm về chủ đề này, nên loạt bài viết này sẽ viết chi tiết hơn, hướng dẫn tạo Graphql Server.

Xu hướng của Graphql

Biểu đồ của Google Trends cho thấy Graphql đang có xu hướng tăng đều trong thời gian qua chứng tỏ Graphql đang phát triển tốt. Mặc dù Graphql không quá nóng bỏng như các frontend React/Vue/Angular với lượng người sử dụng lớn, nhưng điều đó không có nghĩa là Graphql nhận được ít sự quan tâm của mọi người, tuy rằng vẫn có những lý do:

  • Graphql được Facebook giới thiệu về đặc tả, không công khai mã nguồn, điều này khiến cho cộng đồng lập trình viên dù yêu thích thì cũng phải mất  khoảng thời gian nghiên cứu và triển khai.
  • Firebase được coi như là đối thủ của Graphql về công nghệ và khá mạnh mẽ, tích hợp tốt vào cả web, mobile…tuy nhiên vẫn có điểm yếu khi so với Graphql. Firebase sẽ cạnh tranh với những dịch vụ cung cấp Graphql như Graphcool hoặc Scraphold sẽ nói ở bên dưới.
  • Google đã mua lại Firebase, do vậy hiện tại có lẽ không có 1 ông lớn nào đứng đằng sau những server graphql cả.
  • Đã quá quen thuộc với REST có lẽ là lý do chính khiến mọi người còn cẩn trọng với công nghệ mới (thật ra cũng đã hơn 2 năm rồi, mới gì nữa :D), hơn nữa lợi ích mà graphql mang lại so với REST thì thật sự cũng chưa quá lớn.

Một số vướng mắc có thể bạn hiểu chưa đúng về Graphql

  • Để sử dụng Graphql tôi phải bỏ api REST đi: không đúng, bạn hoàn toàn có thể sử dụng song song cả REST và Graphql, Graphql có thể sử dụng kết quả từ REST, tuy nhiên điều này có thể làm api bị chậm hơn. REST hay Mongodb, Mysql, MsSql, Oracle đối với Graphql chỉ là 1 nguồn dữ liệu, Graphql tổng hợp các nguồn này lại được với nhau.

Source: Medium

Các dịch vụ Backend as a Service dành cho Graphql

Hiện tại có 2 dịch vụ cung cấp Graphql là  GraphqlCool và Scraphold, chi phí tương đối rẻ.

Mình đã từng sử dụng qua GraphqlCool và thấy dịch vụ này khá tốt (giao diện, tài liệu tốt, độ hoàn thiện cao, miễn phí các chức năng serverless – function as a service), tuy nhiên chỉ trong một thời gian ngắn thì bắt đầu bộc lộ một số nhược điểm:

  • Tốc độ phản hồi hỗ trợ thấp, tất nhiên mình cũng chỉ sử dụng gói miễn phí dành cho lập trình viên nên việc hỗ trợ không được nhanh cũng là điều dễ hiểu. Bạn có thể sử dụng diễn đàn của graphcool để được hỗ trợ bởi các thành viên khác.
  • Việc tích hợp các dịch vụ khác còn hạn chế, hiện tại chỉ có Algolia, Auth0, DIGITS (sắp ngưng sử dụng). Tuy nhiên bạn hoàn toàn có thể tích hợp các dịch vụ khác thông qua function serverless, ví dụ gởi tin nhắn đến Slack, hoặc gởi email thì hoàn toàn dễ dàng.
  • GraphCool có tích hợp xác thực tài khoản bằng Email-Password của chính họ, chính vì vậy mà họ chiếm luôn 2 trường “name” và “email” trong type User, mình tự suy đoán chuyện này vì cứ sử dụng 2 trường đó cho type User là bị lỗi, sử dụng các tên khác hoặc sử dụng cho type khác thì được. Mình có tìm thêm tài liệu nhưng không thấy ở chỗ nào nói về chuyện này cả. Nói chung không thích chuyện này, vì 3rd-party chỉ nên là tùy chọn, sử dụng hay không là quyền của khách hàng.

GraphCool đã mã nguồn mở framework của họ tại https://github.com/graphcool/framework, mục đính chính là để triển khai lên dịch vụ Graphcool dễ dàng hơn nhưng cũng có thể tự tạo server riêng (sử dụng Docker), khi mình thử dùng bằng docker thì bị lỗi nên chưa đưa ra đánh giá được.

Hướng dẫn tạo Graphql-Server

Cheatsheet

Trước tiên, bạn hãy xem cheatsheet sau để hiểu cơ bản về các khái niệm của Graphql

 

Credit: sogko

Bài viết phần tiếp theo sẽ đi vào chi tiết tạo Graphql Server như thế nào

Fullstack Station Tips

Các nguồn tài nguyên dành cho graphql

https://github.com/chentsulin/awesome-graphql

https://www.howtographql.com

https://graphql.org

 

Read more