Nội dung bài viết
#

GraphQL là gì? Đặc điểm và cách truy vấn GraphQL

Bạn biết về SQL, bạn biết về các ràng buộc và mối quan hệ trong dữ liệu? Tuy nhiên đã bao giờ bạn nghe và tìm hiểu về GraphQL hay chưa? Đối với các nhà lập trình ứng dụng chắc chắn từng quen thuộc với thuật ngữ này. Hôm nay hãy cùng chúng tôi tìm hiểu về các vấn đề xoay quanh nó và cách mà bạn có thể sử dụng để truy vấn.

GraphQL là gì?

GraphQL la gi

Cũng giống như SQL, GraphQL là một ngôn ngữ truy vấn và thời gian chạy phía server cho interfaces của lập trình ứng dụng (API). Nó cung cấp cho người dùng dữ liệu chính xác mà họ yêu cầu. Mục đích của ngôn ngữ này chính là làm cho API nhanh, linh hoạt và thân thiện hơn với nhà phát triển.

Trong môi trường phát triển tích hợp IDE hoàn toàn có thể triển khai ngôn ngữ này (gọi là GraphiQL). Ngoài ra, nó có thể thay thế cho REST. Chỉ với một lệnh API, bạn hoàn toàn xây dựng và lấy dữ liệu dữ liệu từ nhiều nguồn khác nhau.

GraphQL mang tới sự linh hoạt cho nhà bảo trì hệ thống khi có thể thực hiện nhiều tác vụ mà không ảnh hưởng tới truy vấn. Các nhà phát triển được tự do xây dựng API theo phương pháp của mình. Những đặc tả của ngôn ngữ này cũng đảm bảo hệ thống hoạt động theo cách có thể dự đoán được với khách hàng.

Các thuật ngữ phổ biến trong GraphQL

Hiện nay, các nhà phát triển sử dụng ngôn ngữ này để tạo một lược đồ mô tả dữ liệu. Nó đặc tả tất cả các dữ liệu mà khách hàng có thể truy vấn thông qua dịch vụ cung cấp.

Cũng giống như SQL, lược đồ GraphQL hình thành từ các đối tượng. Vậy nên bạn cần xác định những đối tượng này bao gồm các trường nào, loại của nó. Việc thực hiện truy vấn cũng xác thực dựa trên lược đồ. Sau khi đã xác thực xong, nó sẽ tiến hành thực thi và trả kết quả.

Nhà phát triển API sẽ đính kèm từng trường hợp trong lược đồ vào một chức năng có tên resolver. Khi quá trình thực thi diễn ra, resolver sẽ được gọi ra để tạo giá trị.

GraphQL sẽ xác định và xác thực cú pháp cho các truy vấn API (trong graphql-spec). Ngoài ra, các quyết định sẽ hoàn toàn do nhà phát triển xây dựng. Nó không cung cấp bất cứ hướng dẫn nào về việc lưu trữ dữ liệu hoặc ngôn ngữ lập trình chỉ định. Vậy nên bạn hoàn toàn có thể sử dụng PHP, Python, JS,…. GraphQL cũng không đưa ra yêu cầu với mạng, authorization hay phân trang.

Đối với máy khách, các thao tác hay thường được dùng với ngôn ngữ này chính là queries (truy vấn) và mutations (thay đổi). Nếu chiếu theo CRUD thì truy vấn – queries tương đương với Read. Trong khi đó mutations sẽ bao gồm các lệnh còn lại (create, update, delete).

Ưu điểm, nhược điểm của GraphQL trong môi trường doanh nghiệp

Việc sử dụng GraphQL trong các doanh nghiệp có lẽ còn chưa quá phổ biến. Tuy nhiên trong tương lai, đây sẽ là lựa chọn của nhiều nhà phát triển. Bạn có thể cân nhắc từ những ưu – nhược điểm của nó để sử dụng.

Ưu điểm

  • Ưu điểm đầu tiên chính là nó cung cấp cho các doanh nghiệp liên kết toàn bộ API của mình. Điều này hoàn toàn làm được thông qua thiết lập lược đồ nguồn duy nhất trong toàn ứng dụng.
  • Các lệnh truy vấn và phản hồi đối với ngôn ngữ này cũng diễn ra cực kỳ nhanh chóng. Máy khách nhận được dữ liệu họ yêu cầu một cách vừa đủ, không bị over-fetching.
  • Điểm tiếp theo cần nói đến chính là GraphQL giảm thông tin sai lệch giữa máy khách và máy chủ. Nó cũng lý tưởng cho việc tạo tài liệu tự động. Thực hiện yêu cầu về danh sách các loại dữ liệu có sẵn là hoàn toàn khả dụng.
  • Như đã đề cập trước đó, ngôn ngữ này cho phép các ứng dụng API phát triển mà không phá vỡ các truy vấn hiện có. Đồng thời các tiện ích mã nguồn mở của nó còn cung cấp những tính năng mà REST API không có.
  • GraphQL không quy định kiến trúc khi xây dựng ứng dụng. Nó dễ dàng hoạt động với các công cụ quản lý API hiện có.

Nhược điểm

Ngoài các ưu điểm, tất nhiên ngôn ngữ này cũng tồn tại nhược điểm. Có thể điểm qua như sau:

  • GraphQL cần có thời gian học và hiểu cho các nhà phát triển. Đặc biệt những ai đã quen thuộc với REST thì có đôi chút khó hơn một chút.
  • Ngôn ngữ này chuyển công việc truy vấn sang máy chủ, tăng thêm độ phức tạp khi xây dựng server.
  • Tùy vào cách triển khai mà nó có thể yêu cầu các chiến lược quản lý API khác với REST.
  • GraphQL có sự phức tạp hơn so với REST.
  • Những người bảo trì hệ thống có nhiệm vụ viết lược đồ GraphQL có thể bảo trì.

Ví dụ về truy vấn trong GraphQL

Để hiểu thêm về ngôn ngữ này, hãy cùng phân tích các ví dụ dưới đây, cách nó thực hiện và trả kết quả về.

Đầu tiên, hãy thực hiện truy vấn GraphQL yêu cầu API trả về dữ liệu theo các trường chỉ định.

Ví dụ:

{
  me {
    name
  }
}

API sẽ trả về kết quả như sau ở định dạng JSON:
{
  "me": {
    "name": "hung"
  }
}

Máy khách cũng có thể truyền đối số như một phần truy vấn. Ví dụ:
{
  human(id: "1000") {
    name
    location
  }
}

Kết quả trả về sẽ như sau:
{
  "data": {
    "human": {
      "name": "hung,
      "location": "ha noi"
    }
  }
}

Tất nhiên GraphQL cung cấp cho người dùng các đoạn có thể tái sử dụng và gán biến. Ví dụ như khi bạn muốn yêu cầu danh sách mã học sinh và các bản ghi cho mỗi mã. Bạn có thể làm được điều này chỉ với một lệnh truy vấn API:
query HeroComparison($first: Int = 3) {
  leftComparison: hero(location: KANSAS) {
    ...comparisonFields
  }
  rightComparison: hero(location: OZ) {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  friendsConnection(first: $first) {
    totalCount
    edges {
      node {
        name
      }
    }
  }
}

Và kết quả nhận được sẽ là:
{
  "data": {
    "leftComparison": {
      "name": "Dorothy",
      "friendsConnection": {
        "totalCount": 4,
        "edges": [
          {
            "node": {
              "name": "Aunt Em"
            }
          },
          {
            "node": {
              "name": "Uncle Henry"
            }
          },
          {
            "node": {
              "name": "Toto"
            }
          }
        ]
      }
    },
    "rightComparison": {
      "name": "Wizard",
      "friendsConnection": {
        "totalCount": 3,
        "edges": [
          {
            "node": {
              "name": "Scarecrow"
            }
          },
          {
            "node": {
              "name": "Tin Man"
            }
          },
          {
            "node": {
              "name": "Lion"
            }
          }
        ]
      }
    }
  }
}

Tổng kết về GraphQL

Ứng dụng của GraphQL hiện nay là khá nhiều, bạn có thể thấy từ Apollo, Offix,… đều sử dụng nó. Hy vọng với những thông tin trên bạn đã có thể biết thêm về cách truy vấn trong ngôn ngữ này. Việc dùng nó mang tới nhiều lợi ích cho các nhà phát triển ở hiện tại và tương lai.

Nếu còn gặp bất cứ vướng mắc gì về GraphQL, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.

P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.

Thuê VPS Giá Rẻ tại BKHOST

Khuyến mãi giảm giá cực sâu, chỉ từ 62k/tháng. Đăng ký ngay hôm nay:

vps ssd giá rẻ

Tôi là Trịnh Duy Thanh, CEO & Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới các dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình nâng cấp đầu tư hệ thống phần cứng, nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp.
Bình luận

Thanh toán linh hoạt

Chúng tôi chấp nhận thanh toán như ATM, Visa, Internet Banking, Paypal, Baokim, Ngân lượng

Gọi ĐT tư vấn ngay
Chat ngay qua Zalo
Chat ngay qua Messenger
Góp ý
Bạn đã hài lòng với trải nghiệm trên Bkhost.vn?
Cảm ơn lượt bình chọn của bạn, Chúc bạn 1 ngày tốt lành !