Khám Phá Hasura: Nền Tảng GraphQL Hiện Đại

0 0 0

Người đăng: Nguyen Trung Giang

Theo Viblo Asia

Giới thiệu

Trong thế giới phát triển phần mềm hiện đại, nhu cầu tạo ra các API mạnh mẽ, linh hoạt và nhanh chóng đang trở nên quan trọng hơn bao giờ hết. Hasura là một nền tảng GraphQL tiên tiến, mang lại sự tiện lợi và hiệu quả cho các nhà phát triển. Với khả năng tự động hóa việc tạo API từ cơ sở dữ liệu, Hasura đang là một công cụ được yêu thích trong cộng đồng lập trình viên.

Nó giúp bạn chuyển đổi cơ sở dữ liệu của mình thành một API GraphQL đầy đủ tính năng chỉ trong vài phút, giảm đáng kể thời gian phát triển và tăng tốc quá trình triển khai ứng dụng.

Nội dung chính

Các tính năng nổi bật

Tự động hóa API GraphQL

  • Hasura có thể tự động tạo API GraphQL dựa trên cấu trúc bảng và dữ liệu trong cơ sở dữ liệu của bạn. Điều này giúp giảm đáng kể công sức lập trình thủ công.
  • Hỗ trợ đầy đủ các thao tác CRUD (Create, Read, Update, Delete).

Ví dụ:

Giả sử bạn có một bảng users trong PostgreSQL với cấu trúc như sau:

CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE, created_at TIMESTAMP DEFAULT NOW()
);

truy vấn:

GET:
query { users { id name email }
} UPDATE hoc CREATE:
mutation { insert_users( objects: { name: "Viblo", email: "Viblo@example.com" }, on_conflict: { constraint: constraint_key, update_columns: [name, email] } ) { returning { id name } }
}

Hỗ trợ real-time

  • Live Queries: Cho phép các ứng dụng theo dõi sự thay đổi của dữ liệu theo thời gian thực.
  • Caching: Tăng tốc độ truy vấn thông qua việc lưu trữ dữ liệu cache.

Ví dụ: Một ứng dụng chat sử dụng Live Queries để hiển thị tin nhắn mới ngay khi được gửi:

subscription { users { id name email }
}

Quản lý quyền truy cập linh hoạt

  • Hasura cho phép bạn kiểm soát quyền truy cập vào dữ liệu thông qua các vai trò (roles). Mỗi vai trò sẽ được cấu hình chi tiết để giới hạn người dùng chỉ truy cập được các dữ liệu họ được phép.

Ví dụ:

  • Vai trò admin có thể truy cập tất cả các trường.
  • Vai trò user chỉ có thể xem thông tin chứ không thể chỉnh sửa dữ liệu.

ví dụ về Permissions

Tích hợp với REST và các nguồn dữ liệu khác

  • Hasura cho phép bạn thêm các API REST vào GraphQL schema của mình.
  • Hỗ trợ kết nối tới các dịch vụ bên ngoài hoặc microservices.

Mở rộng và tùy chỉnh

  • Tích hợp các webhook hoặc xử lý business logic bằng serverless functions.
  • Dễ dàng tích hợp vào quy trình DevOps nhờ hỗ trợ Docker, Kubernetes, và các công cụ CI/CD như Jenkins, GitHub Actions.
  • Cho phép connect với nhiều database:
    • PostgreSQL
    • MySQL
    • SQL Server
    • BigQuery
    • REST API (thông qua Remote Schemas)

Lợi thế

Hasura không phải là công cụ duy nhất hỗ trợ việc xây dựng API. Tuy nhiên, các tính năng tự động hóa và hiệu suất của nó đã làm nổi bật so với các công cụ phổ biến khác. Dưới đây là bảng so sánh chi tiết giữa Hasura và một số công cụ xây dựng API phổ biến như Apollo Server và Firebase.

Tính năng Hasura Apollo Server Firebase
Tự động tạo API Có (dựa trên cơ sở dữ liệu) Không (phải định nghĩa schema và resolver) Không (chỉ hỗ trợ REST/Firestore APIs)
Hỗ trợ GraphQL Không
Quản lý quyền (RBAC) Có (rất chi tiết theo vai trò và điều kiện) Có (thủ công qua resolver) Có (cơ bản, dựa trên Firebase Rules)
Thời gian thực (Realtime) Có (Live Queries, Subscriptions) Có (Subscriptions) Có (Realtime Database, Firestore)
Hiệu suất Cao (caching, phân trang tự động) Phụ thuộc vào cách triển khai Cao (nhưng giới hạn tính linh hoạt)
Triển khai Nhanh (Docker/Kubernetes) Thủ công Dễ dàng qua nền tảng Firebase
Hỗ trợ nhiều loại cơ sở dữ liệu Có (PostgreSQL, MySQL, SQL Server, v.v.) Không (GraphQL-only, cần kết nối thủ công) Không (Firestore hoặc Realtime DB)
Học tập và triển khai Dễ dàng, cấu hình nhanh Khó hơn (yêu cầu nhiều mã tùy chỉnh) Dễ dàng, giao diện trực quan
  • Tất nhiên hasura cũng tồn tài những nhược điểm như sau:
    • Phụ thuộc nhiều vào PostgreSQL (dù đang mở rộng sang MySQL, SQL Server).
    • Việc kết hợp nhiều nguồn dữ liệu hoặc schema phức tạp có thể gây khó khăn.
    • Yêu cầu kiến thức cơ bản về Docker/Kubernetes để triển khai hiệu quả.

Setup demo

Setup:

version: "3.6"
services: postgres: image: postgres:15 container_name: postgres ports: - "5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: hasura volumes: - postgres_data:/var/lib/postgresql/data hasura: image: hasura/graphql-engine:v2.38.1 container_name: hasura ports: - "8080:8080" depends_on: - postgres environment: HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:postgres@postgres:5432/hasura HASURA_GRAPHQL_ENABLE_CONSOLE: "true" HASURA_GRAPHQL_ADMIN_SECRET: demo volumes: - hasura_metadata:/hasura-metadata volumes: postgres_data: hasura_metadata:
  • Trong đó:
    • POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB: Tên người dùng, mật khẩu, và tên cơ sở dữ liệu PostgreSQL.
    • HASURA_GRAPHQL_DATABASE_URL: URL kết nối tới PostgreSQL trong định dạng postgres://username:password@hostname:port/database
    • HASURA_GRAPHQL_ADMIN_SECRET: Thiết lập mật khẩu cho bảng điều khiển Hasura để bảo mật.

Run:

docker-compose up -d
hoặc
docker compose up -d

Thành quả:

  • truy cập http://localhost:8080
  • Đăng nhập bằng HASURA_GRAPHQL_ADMIN_SECRET bạn đã thiết lập.
  • Kết nối với cơ sở dữ liệu PostgreSQL đã được cấu hình sẵn.

giao diện trang đăng nhập

giao diện trang chủ

Kết luận

Hasura là một lựa chọn tuyệt vời cho các nhà phát triển muốn xây dựng API nhanh chóng và hiệu quả. Với những tính năng mạnh mẽ như real-time, tự động hóa GraphQL và quản lý quyền truy cập linh hoạt, Hasura đã chứng minh là một công cụ đáng tin cậy.

Dù có vài hạn chế nhỏ, nhưng với sự phát triển liên tục, Hasura sẽ ngày càng hoàn thiện hơn, trở thành người bạn đồng hành lý tưởng cho các dự án ứng dụng hiện đại.

Nếu bạn đang tìm kiếm một cách tiếp cận mới để phát triển API, Hasura chắc chắn là một giải pháp đáng để thử!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Flutter - GetX - Using GetConnect to handle API request (Part 4)

Giới thiệu. Xin chào các bạn, lại là mình với series về GetX và Flutter.

0 0 356

- vừa được xem lúc

API vs WebSockets vs WebHooks: What to Choose?

. Khi xây dựng bất kì một ứng dụng nào, chúng ta đều cần phải có một cơ chế đáng tin cậy để giao tiếp giữa các thành phần của nó. Đây là khi APIs, WebSockets và WebHooks được ứng dụng vào.

0 0 101

- vừa được xem lúc

Sử dụng Fast JSON API serialization trong Ruby on Rails

Ở bài viết này chúng ta sẽ thử tạo 1 project API sử dụng gem fast_jsonapi cho serializer. Đầu tiên là tạo một project API mới. $ rails new rails-jsonapi --database=postgresql --skip-action-mailbox --skip-action-text --skip-spring -T --skip-turbolinks --api. .

0 0 131

- vừa được xem lúc

Test thử ba loại API chụp màn hình Windows

Hiện tại, Windows cung cấp khoảng ba cách để chụp màn hình. Thế thì cái nào là nhanh nhất? Tôi muốn test thử từng cái.

0 0 71

- vừa được xem lúc

Ngừng sử dụng REST cho API — GraphQL là cách tốt hơn

Mở đầu. REST đã được nhiều developers sử dụng để gửi dữ liệu qua HTTP trong khi GraphQL thường được trình bày như một công nghệ thay thế các API REST.

0 0 98

- vừa được xem lúc

Quản lý và sử dụng API trong Nuxt bằng cách sử dụng Repository Pattern

Mở đầu năm mới, à nhầm, mở đầu bài viết. Cái tên NuxtJS chắc hẳn cũng không còn xa lạ gì với những bạn yêu thích VueJS nữa, đương nhiên mình cũng là một chàng trai dành tình yêu to lớn cho frameworks này.

0 0 226