TÌm hiểu về GraphQL

Chúng tôi rất vui mừng chia sẻ kiến thức sâu sắc về từ khóa Graphql la gi và hy vọng rằng nó sẽ hữu ích cho bạn đọc. Bài viết tập trung trình bày ý nghĩa, vai trò và ứng dụng của từ khóa này trong việc tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Chúng tôi cung cấp các phương pháp tìm kiếm, phân tích và lựa chọn từ khóa phù hợp, cùng với các chiến lược và công cụ hữu ích. Hy vọng rằng thông tin mà chúng tôi chia sẻ sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Xin chân thành cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog của chúng tôi để cập nhật những kiến thức mới nhất.

Việc vận dụng GraphQL ngày càng nhiều như việc các tổ chức Facebook, GitHub và Pinterest sử dụng trong các ứng dụng của họ, và rất nhiều developer đã chuyển sang GraphQL vì những tính năng tuyệt vời mà nó cung cấp. Nội dung bài viết này sẽ khiến cho bạn hiểu về GraphQL.

Bạn Đang Xem: TÌm hiểu về GraphQL

GraphQL là gì?

GraphQL là một tiếng nói truy vấn cho API, cung cấp một mô tả hoàn chỉnh cho tài liệu trong API của bạn, được cho phép phía client yêu cầu chuẩn xác tài liệu cấp thiết mà không bị thừa hay thiếu. Nói cách khác, nó cung cấp một interface chung giữa client và server cho việc lấy và thao tác với tài liệu.

Từ cái tên GraphQL, bạn cũng có thể nghĩ rằng GraphQL liên quan đến graph database hay SQL. Thực tế GraphQL không liên quan gì đến data storage hay graph database.

Để hiểu hơn về GraphQL là gì, hãy xem những tiện ích mà nó cung cấp:

  • Declarative: Với GraphQL, bạn tự khái niệm ra những tài liệu bạn phải.
  • Hierarchical: Với mỗi request, bạn cũng có thể lấy được một object và cả những object liên quan với object đó, ví dụ một Author cùng với những Posts mà người đó tạo ra, mà các Comments trên mỗi Post.
  • Strongly-typed: Với mạng lưới hệ thống GraphQL, ta có thể mô tả tài liệu có thể truy vấn từ server dựa trên kiểu của object và tài liệu trả về sẽ phù phù hợp với kiểu object chỉ định trong câu truy vấn.
  • Not Language specific:** GraphQL không gắn với một tiếng nói lập trình cụ thể nào cả.
  • Compatible with any backend: GraphQL không bị giới hạn bởi một data storage cụ thể; bạn cũng có thể sử dụng data và code có sẵn, kể cả kết nối đến third-party APIs.
  • Introspective: một GraphQL server có thể được truy vấn về schema cụ thể của nó.

Thêm vào đó, GraphQL rất để sử dụng vì nó có cú pháp giống JSON và cho rất nhiều lợi ích về performance.

Tiếp theo, ta sẽ đi tìm hiểu về cú pháp và những hoạt động có thể thực thi với GraphQL.

Query

Query được sử dụng để thực thi hành động đọc, lấy tài liệu từ server. Ở chỗ này là một ví dụ về một query đơn giản và response tương ứng:

# Query query GetAuthor { author { name posts { title } } } # Response { “data”: { “author”: { “name”: “Chimezie Enyinnaya”, “posts”: [ { “title”: “How to build a collaborative note app using Laravel” }, { “title”: “Event-Driven Laravel Applications” } ] } } }

Đây là một query đơn giản để lấy name của một author cùng với những posts tương ứng của author đó. Lưu ý rằng query và response có cấu trúc giống nhau. Thời điểm hiện nay ta sẽ tìm hiểu về các thành phần của một GraphQL query. Ở câu query trên, ta có thể không dùng từ khóa query. Nếu một operation không chỉ định type thì mặc định GraphQL sẽ nhận định rằng operation đó là một query. Một query có thể mang tên (GetAuthor). Mặc dù tên của query có thể có hoặc không nhưng nó sẽ giúp dễ hiểu query đó dùng để làm làm gì.

Fields

fields là thành phần cơ bản của một object mà ta muốn thu được từ server. Ở câu query trên, name là một field của author

Arguments

Một query có thể nhận thông số truyền vào.

{ author(id: 5) { name } }

Variables

Bên cạnh thông số, một query cũng luôn có thể có những biến. Các biến được đặt trước bởi dấu $ và theo sau là kiểu của nó.

query GetAuthor($authorID: Int!) { author(id: $authorID) { name } }

Một biến cũng luôn có thể có mức giá trị mặc định của nó.

query GetAuthor($authorID: Int! = 5) { author(id: $authorID) { name } }

Xem Thêm : Tốc độ màn trập là gì? Có quan trọng trong nhiếp ảnh hay không?

Giống với thông số, biến cũng luôn có thể là tùy chọn hoặc bắt buộc. Ở ví dụ trên $authorID là bắt buộc vì sử dụng ký hiệu ! khi khái niệm biến.

Aliases

Để request tài liệu từ cùng một field với những thông số khác nhau, ta sử dụng aliases

{ chimezie: author(id: 5) { name } neo: author(id: 7) { name } }

Và response sẽ có được dạng

{ “data”: { “chimezie”: { “name”: “Chimezie Enyinnaya” }, “neo”: { “name”: “Neo Ighodaro” } } }

Fragments

Fragments là một tập hợp các fields có thể sử dụng lại và include vào query khi cấp thiết. Ví dụ:

{ chimezie: author(id: 5) { …authorDetails } neo: author(id: 7) { …authorDetails } } fragment authorDetails on Author { name twitterHandle }

Với query trên, khi cần thêm một field nào đó, ta chỉ việc thêm vào fragment.

Directives

Directives được cho phép ta thay đổi cấu trúc query một cách linh hoạt sử dụng các biến. GraphQL có 2 directive:

  • @include sẽ include một field hay fragment khi thông số if là true.
  • @skip sẽ bỏ qua một field hay fragment khi thông số if là false.

Cả hai directive nhận thông số kiểu boolean.

query GetAuthor($authorID: Int!, $notOnTwitter: Boolean!, $hasPosts: Post) { author(id: $authorID) { name twitterHandle @skip(if: $notOnTwitter) posts @include(if: $hasPosts) { title } } }

Mutation

Mutations được sử dụng để thực hiện hành động write.

mutation UpdateAuthorDetails($authorID: Int!, $twitterHandle: String!) { updateAuthor(id: $authorID, twitterHandle: $twitterHandle) { twitterHandle } }

Ta gửi tài liệu như một payload trong mutation.

{ “authorID”: 5, “twitterHandle”: “ammezie” }

Sau đó server sẽ trả về respone sau thời điểm thực hiện update:

{ “data”: { “id”: 5, “twitterHandle”: “ammezie” } }

Xem Thêm : Fuck Boy là gì? Kết cục nào cho một gã FuckBoy?

Trong response trả về sẽ chữa tài liệu đã được update.

Một điểm khác biệt quan trọng giữa mutation và query là mutation thực hiện một cách tuần tự còn query có thể thực thi song song.

Schemas

Schemas mô tả cách tài liệu được tổ chức và những tài liệu nào có thể được truy vấn. Schemas cung cấp các kiểu object được sử dụng. GraphQL schema quy định kiểu chặt chẽ, mọi object trong schema phải được chỉ định kiểu. Kiểu được sử dụng để xác định một truy vấn có hợp thức hay là không.

Schemas được xây dựng sử dụng GraphQL schema language. Ví dụ:

type Author { name: String! posts: [Post] }

Schema trên khái niệm một object kiểu Author vơi 2 field là name và posts. Các field trên một kiểu object có thể tùy chọn hoặc bắt buộc. Ở ví dụ trên field name là bắt buộc vì có ký hiệu !.

Arguments

các field trong schema đồng ý thông số. Các thông số này còn có thể tùy chọn hoặc bắt buộc (xác định bởi ký hiệu !).

type Post { allowComments(comments: Boolean!) }

Scalar Types

GraphQL có những scalar type là:

  • Int
  • Float
  • String
  • Boolean
  • ID

Các field có kiểu scalar thì không thể chứa các field khác. Ta cũng luôn có thể chỉ định kiểu scalar custom sử dụng từ khóa scalar. Ví dụ ta có thể khái niệm kiểu Date:

scalar Date

Enumeration types

Kiểu enumeration là một kiểu đặc biệt quan trọng của scalar, giới hạn trong một tập các giá trị được cho phép. Nó được cho phép validate các thông số của kiểu này phải là một trong các giá trị trong tập được cho phép, quy định giá trị của một field sẽ vẫn là một trong các giá trị của một tập hữu hạn.

Một khái niệm enum trong GraphQL schema language có dạng:

enum Tiếp thị quảng cáo { Image Video }

Input types

Kiểu input được sử dụng trong trường hợp mutation, khi chúng ta muốn tạo một object. Trong GraphQL schema language, kiểu input giống hoàn toàn với những kiểu thông thường khác, ngoại trừ dùng từ khóa input thay vì type. Ví dụ:

input CommentInput { toàn thân: String! }

Những field của object kiểu input cũng luôn có thể là những object kiểu input. Object kiểu input không thể chứa thông số trong các field của nó

Tham khảo

https://blog.pusher.com/getting-up-and-running-with-graphql/

You May Also Like

About the Author: v1000