Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Hasura đã giúp tôi xây dựng sản phẩm ra sao
Giới thiệu
Đây là một bài viết về một công nghệ cụ thể, thường thì tôi không thích viết những bài kiểu này. Công nghệ sẽ thay đổi nay mai, chỉ có tư duy mới là cái tồn tại mãi. Tuy nhiên, cái mà tôi giới thiệu hôm nay, Hasura, có thể sẽ là tương lai của lập trình viên, theo tôi là vậy, bởi vì nó thay đổi cái cách mà lập trình viên làm.
Bối cảnh đặt ra: tôi là một lập trình viên Frontend, và tự xây dựng một sản phẩm cho riêng mình. Và tôi lười code, chính xác là lười phải làm đi làm lại những việc mà dự án nào cũng làm, mà không học thêm được gì cả, có thể kể tới:
- Viết APIs để CRUD data
- Authentication và Authorization
Công nghệ là để giải quyết một vấn đề nào đó mình gặp, và tôi tình cờ phát hiện ra Hasura, nó giúp tôi giải quyết hai vấn đề trên.
Trang chủ của hasura.
Khi xài Hasura, cuối cùng ta sẽ có gì
Tưởng tượng, Hasura chỉ là 1 source code mã nguồn mở, bạn deploy ở đâu, nó sẽ tạo một con server ở đó và sẽ cho bạn một GraphQL endpoint, ví dụ: "domain.xxx/graphql".
Nếu bạn đã làm quen với GraphQL, đây là tất cả những gì bạn cần.
Ưu điểm của Hasura
GraphQL thay vì REST
Đây là ý kiến cá nhân, tuy nhiên tôi không thể phủ nhận cảm giác của bản thân khi làm việc với RESTful không khác gì eating shit. Hasura làm việc dựa trên GraphQL, đó là điều tôi thích đầu tiên. Tôi không bận tâm về REST nên nếu bạn muốn tìm Hasura alternative cho REST, bạn phải tự google rồi.
CRUD
Chắc hẳn không có một dự án nào mà không có những API với mục đích CRUD (thêm sửa xóa) một bảng nào đó. Tôi đặt câu hỏi? Tại sao phải làm đi làm lại những cái này từ khi tôi còn làm backend với PHP cho tới giờ (đến giờ tôi thấy ngày xưa tôi bỏ hơi muộn)?
Tôi là một đứa lười code, cho nên mình sẽ kiếm giải pháp từ công nghệ. Và Hasura giúp tôi làm việc đó như sau:
- Input: các bảng trong PostgresQL database.
- Output: toàn bộ GraphQL cần thiết để CRUD. Bạn thử hình dung xem bạn sẽ mất bao lâu để viết toàn bộ API CRUD cho ví dụ khoảng 20 bảng trong database? 20 bảng với tôi là còn ít.
Tiếp theo, không dừng lại ở đó. Chuyện gì sẽ xảy ra nếu tôi cần những API khác thay vì chỉ CRUD?
Câu trả lời, là tùy vào bạn, vì đây là cái phụ thuộc vào dự án. Bạn sẽ phải tự viết riêng cho mình những hàm xử lý logic cụ thể. Và với xu hướng ngày nay, serverless dần trở nên phổ biến, bạn sẽ làm quen rất dễ dàng. Hasura gọi những hàm này là action
.
Như vậy, trước khi dùng Hasura, bạn sẽ phải:
- Viết toàn bộ API, 80% cho CRUD, 20% cho những logic khác (con số chỉ là tương đối).
Sau khi có Hasura, bạn sẽ phải:
- Viết 20% API còn lại.
Xong, về cụ thể bạn hãy xem document của Hasura.
Authentication và Authorization
Bản thân Hasura không làm nhiệm vụ Authentication. Tôi dùng firebase để quên hết đi những nỗi nhọc nhằn về quản lý đăng nhập và người dùng. Hasura có hỗ trợ cấu hình với firebase. That's all I need!
Về authorization, Hasura cung cấp sẵn một môi trường giao diện để bạn cài đặt role cho từng bảng trong Postgres database. Điều đó có nghĩa là bạn sẽ tự tay cấu hình những API nào public với mọi user mà vẫn đảm bảo được bảo mật cho API. Crazy?
Ngoài ra có lẽ còn những ưu điểm khác, tuy nhiên chỉ hai điều trên, nó đã giúp tôi giải quyết hai vấn đề thực tế trong dự án, đặc biệt giảm thiểu thời gian code. Lập trình viên, theo tôi, không nên tốn thời gian code những cái như vậy, thay vào đó, chú tâm vào business của dự án. Dự án của tôi, chỉ có Junior và Fresher. Và như vậy là cũng đủ rồi.
Nhược điểm của Hasura
Tôi chưa dùng hết tính năng của Hasura, chỉ mới hóng trên discord và thấy được những vấn đề sau. Cơ bản là một công nghệ còn mới, tất nhiên sẽ chưa hoàn thiện.
- GraphQL chăng? Bạn đã làm 10 năm với REST có lẽ bạn cũng chẳng willing học GraphQL nữa, thì đó là trở ngại đầu tiên.
- Deploy Hasura hiện tại chỉ hỗ trợ 3 cách: Heroku, Docker, Kubernetes. Mất khoảng vài phút để bạn lựa chọn cách để deploy. Tôi cũng không nghĩ đây là nhược điểm nữa, nhưng có lẽ với một dự án mà không có dev ops, thì có lẽ sẽ có một chút khó khăn.
- Nhiều tính năng chưa được hoàn thiện: giao diện console của Hasura chưa được ổn định, chưa hỗ trợ được nhiều tính năng như auto backup database.
Kết luận
Như đã nói từ đầu, tôi không thích viết về công nghệ, một thứ mà có thể nay mai sẽ chẳng ai dùng nữa. Tuy nhiên, với tình hình thực tế của dự án, điều tuyệt vời nhất mà Hasura mang lại, đó chính là thay đổi cách mà tôi xây dựng sản phẩm.
Nếu chỉ biết code, thì bạn chỉ là coder, không phải là lập trình viên.
Mọi ý kiến đóng góp đều rất được cảm kích. Cảm ơn đã đọc bài viết.







