GraphQL là gì? Sơ đồ, Truy vấn và Thực thi API
API thu thập dữ liệu không giới hạn cung cấp các giao diện cụ thể cho nhiệm vụ trả về dữ liệu web công khai có cấu trúc cho các quy trình ứng dụng.
TL;DR
- GraphQL là một ngôn ngữ truy vấn và hệ thống thực thi cho các API. Các khách hàng chọn các trường theo một sơ đồ kiểu, và dịch vụ giải quyết lựa chọn đó.
- Sơ đồ là hợp đồng chung. Nó định nghĩa các loại đối tượng, trường, tham số, mối quan hệ, điểm vào, và khả năng null.
- Một điểm cuối không có nghĩa là một nguồn dữ liệu duy nhất. Bộ giải quyết có thể đọc cơ sở dữ liệu, dịch vụ, bộ nhớ cache, hoặc các API hiện có phía sau đồ thị.
- Các phản hồi hình dạng của khách hàng giảm bớt một số việc lấy dữ liệu quá mức. Chúng cũng yêu cầu các kiểm soát cho độ sâu truy vấn, bề rộng, chi phí, quyền hạn, và hiệu quả của bộ giải quyết.
- GraphQL và REST có thể cùng tồn tại. Nhiều hệ thống sử dụng cả hai khi đặc điểm vận hành và khách hàng của nó phù hợp nhất.
GraphQL Được Xác Định
GraphQL là một ngôn ngữ truy vấn mở và mô hình thực thi để mô tả và thực hiện yêu cầu dữ liệu giữa các khách hàng và máy chủ. Một dịch vụ công bố một sơ đồ kiểu. Một khách hàng gửi một thao tác mà đặt tên cho các trường từ sơ đồ đó, và phản hồi phản ánh lựa chọn đã yêu cầu. GraphQL không phải là một cơ sở dữ liệu, động cơ lưu trữ, hoặc yêu cầu vận chuyển; nó có thể nằm trên mã ứng dụng và nguồn dữ liệu hiện có.
Chỉ thị chính thức Đặc tả GraphQL định nghĩa ngôn ngữ, hệ thống kiểu, xác thực, và hành vi thực thi. Các loại thao tác cấp cao nhất là truy vấn, thay đổi, và đăng ký khi được hỗ trợ bởi sơ đồ. Truy vấn đọc dữ liệu, thay đổi yêu cầu một thay đổi, và đăng ký đại diện cho một dòng kết quả sau đó. Một dịch vụ quyết định các trường và thao tác nào tồn tại.
Cách một yêu cầu GraphQL được thực thi
Coi GraphQL là một chuỗi hành động đã được định nghĩa thay vì một hộp đen đơn lẻ. Chuỗi đó tiết lộ thành phần nào sở hữu mỗi đầu vào, đầu ra, và lỗi.
Phân tích và xác thực
Máy chủ phân tích tài liệu, chọn thao tác đã yêu cầu, áp dụng giá trị biến, và xác thực tên trường, tham số, loại, và quy tắc lựa chọn theo sơ đồ. Các thao tác không hợp lệ thất bại trước khi thực thi trường. Điều này cung cấp cho khách hàng phản hồi chính xác và ngăn chặn việc truy cập trường tùy ý ngoài đồ thị đã công bố.
Giải quyết các trường
Thực thi bắt đầu tại một trường gốc và tiếp tục qua cây lựa chọn. Các hàm bộ giải quyết lấy giá trị từ mã ứng dụng, cơ sở dữ liệu, dịch vụ, bộ nhớ cache hoặc các đối tượng cha. Động cơ thực thi có thể giải quyết các trường độc lập song song trong khi giữ nguyên quy tắc thứ tự thay đổi đã được định nghĩa bởi đặc tả.
Ghép dữ liệu và lỗi
Phản hồi chứa một mục dữ liệu khi thực thi sản xuất một kết quả và có thể chứa một mục lỗi. Các lỗi trường có thể đồng tồn tại với dữ liệu không đầy đủ, tùy thuộc vào sự lan truyền khả năng null. Các khách hàng phải xử lý hình dạng đó một cách có chủ đích thay vì coi mọi phản hồi là hoàn toàn thành công hoặc hoàn toàn thất bại.
Các khối xây dựng của một Sơ đồ GraphQL
Các khái niệm sau đây xác định cách mà GraphQL hoạt động trong một hệ thống thực. Đọc chúng riêng biệt ngăn việc lựa chọn định dạng bị nhầm lẫn với một kiến trúc hoặc đảm bảo an ninh.
| Khái niệm | Ý nghĩa | Tín hiệu thực tiễn |
|---|---|---|
| Đối tượng và trường | Mô tả các thực thể và giá trị có thể chọn. | Một loại sản phẩm với tên, giá, và các trường người bán. |
| Scalar và enum | Đại diện các giá trị lá. | Chuỗi, số, boolean, định danh, ngày tháng thông qua các scalar tùy chỉnh, hoặc lựa chọn cố định. |
| Tham số và biến | Tham số hóa lựa chọn trường. | Lọc, định danh, ranh giới phân trang, và đầu vào thao tác. |
| Giao diện và hợp nhất | Diễn đạt các loại kết quả trừu tượng hoặc thay thế. | Một nút có thể tìm kiếm được thực hiện bởi một số loại đối tượng cụ thể. |
| Chỉ thị | Thêm hành vi tuyên bố ở các vị trí đã định nghĩa. | Bao gồm có điều kiện, ngưng hoạt động, hoặc hành vi sơ đồ cụ thể cho thực hiện. |
Nơi GraphQL nhận được sự phức tạp của nó
GraphQL là gì ảnh hưởng đến hành vi sản phẩm chỉ thông qua các hoạt động cụ thể. Các trường hợp sau đây cho thấy khả năng nào quan trọng và tại sao một cách tiếp cận bên cạnh có thể hoạt động khác nhau.
Giao diện tổng hợp
Một màn hình có thể yêu cầu một số kiểu đối tượng liên quan trong một lựa chọn được khai báo thay vì điều phối nhiều cuộc gọi cụ thể của khách hàng.
Nhiều sản phẩm của khách hàng
Web, di động, đối tác và khách hàng nội bộ có thể chọn các trường khác nhau trong khi chia sẻ một đồ thị miền có kiểu dữ liệu.
Công cụ dựa trên lược đồ
Thông tin kiểu hỗ trợ xác thực, trình duyệt tài liệu, hoàn thành trình chỉnh sửa, tạo mã và phân tích thay đổi.
Tổng hợp backend
Các resolver có thể kết hợp các dịch vụ hiện có phía sau một đồ thị mà trình bày các mối quan hệ theo các điều khoản hướng đến khách hàng.
Các mối quan tâm về sản xuất cho các API GraphQL
Mô hình hóa lược đồ xung quanh các khái niệm miền ổn định hơn là các bảng cơ sở dữ liệu hiện tại hoặc một màn hình. Nullability là một quyết định về tính tương thích: việc thay đổi một trường nullable thành non-null có thể làm hỏng khách hàng khi một resolver không thể tạo ra giá trị. Phân trang nên sử dụng một kết nối hoặc mô hình tiếp tục được tài liệu mà vẫn ổn định khi các bản ghi thay đổi.
Kiểm soát công việc truy vấn trước khi thực thi. Độ sâu một mình không phải là một mô hình chi phí hoàn chỉnh vì một trường nông có thể trả về một bộ sưu tập lớn và một con đường sâu có thể rẻ. Sử dụng phân trang có giới hạn, quy tắc chi phí hoặc độ phức tạp ở cấp trường, danh sách cho phép hoạt động khi phù hợp, giới hạn thời gian thực thi và khả năng quan sát mà gán công việc cho một hoạt động và người gọi.
Ngăn chặn sự khuếch đại resolver. Một resolver trường phát hành một truy vấn phía dưới cho mỗi đối tượng cha có thể biến một truy vấn khách hàng gọn gàng thành nhiều cuộc gọi backend. Gộp và lưu đọc trong yêu cầu nơi ngữ nghĩa cho phép, trang bị thời gian resolver, và đánh giá quyền truy cập ở ranh giới trường và đối tượng. Tài liệu chính thức Hướng dẫn bảo mật GraphQL bao gồm tài liệu đáng tin cậy, kiểm soát nhu cầu, phân trang và bảo vệ lược đồ.
Những sự hiểu lầm và chế độ thất bại của GraphQL
- Giả định một yêu cầu có nghĩa là chi phí backend thấp. Một tài liệu gọn nhẹ có thể kích hoạt cây resolver tốn kém và phân tán lớn phía sau điểm cuối.
- Phơi bày mô hình lưu trữ trực tiếp. Các lược đồ hình dạng cơ sở dữ liệu gắn kết khách hàng với các chi tiết thực hiện và làm cho sự phát triển miền trở nên khó khăn hơn.
- Coi trạng thái HTTP một mình như là kết quả. Các lỗi thực thi có thể xuất hiện bên cạnh dữ liệu một phần, vì vậy khách hàng cần xử lý nhận thức tới GraphQL.
- Bỏ qua khả năng quan sát hoạt động. Một điểm cuối đơn ẩn đi sự khác biệt công việc trừ khi số liệu xác định các tên hoạt động, trường, người gọi và chi phí.
- Sử dụng introspection như mô hình quyền truy cập. Khả năng khám phá lược đồ và quyền truy cập đến một trường là những điều khiển riêng biệt.
GraphQL trong Dữ liệu và Quy trình Tự động hóa
Một bộ thu GraphQL nên bắt đầu với việc khám phá lược đồ được phép bởi dịch vụ và các hoạt động được tài liệu. Nó nên gửi các hoạt động có tên, sử dụng biến thay vì xây dựng văn bản với các giá trị không đáng tin cậy, yêu cầu chỉ các trường cần thiết, và tuân theo mô hình phân trang của dịch vụ. Duy trì các định danh ổn định và làm cho việc xử lý dữ liệu một phần trở nên rõ ràng.
Các thay đổi lược đồ xứng đáng được xem xét tự động. Các trường bổ sung thường an toàn vì khách hàng chọn các trường một cách rõ ràng, nhưng việc loại bỏ các trường, thu hẹp các loại, thay đổi nullability, hoặc thay đổi hành vi đối số có thể gây hỏng cho người tiêu dùng. Theo dõi việc sử dụng trường đã bị loại bỏ trước khi xóa và thử nghiệm các hoạt động đã lưu với các lược đồ ứng viên.
GraphQL có thể nằm ở phía dưới của một quy trình thu thập web. Dữ liệu trang công khai có thể được thu thập và chuẩn hóa bởi một lớp chuyên dụng, sau đó được phơi bày thông qua một đồ thị có kiểu đến các khách hàng nội bộ. Đồ thị nên mô tả miền đã chuẩn hóa và nguồn gốc của nó, thay vì rò rỉ các bộ lựa chọn, cấu trúc trang hoặc chi tiết phiên trình duyệt.
Danh sách kiểm tra đánh giá GraphQL
Sử dụng các kiểm tra này để biến định nghĩa GraphQL thành bằng chứng thực hiện mà một nhà phát triển, nhà điều hành hoặc người đánh giá có thể tái sản xuất.
- Nêu lại ranh giới. Đối với GraphQL, xác định người gọi, nhà cung cấp, đường dẫn và sự kiện chính xác đánh dấu một kết quả hoàn chỉnh.
- Xác minh tuyên bố trung tâm. Xác nhận tuyên bố này với việc thực hiện và tài liệu của nó: GraphQL là một ngôn ngữ truy vấn và hệ thống thực thi cho các API. Khách hàng chọn các trường chống lại một lược đồ có kiểu, và dịch vụ giải quyết lựa chọn đó.
- Theo dõi cơ chế. Quan sát phân tích và xác thực, giải quyết các trường, lắp ráp dữ liệu và lỗi, và ghi lại thành phần nào sở hữu mỗi giai đoạn.
- Kiểm tra sự phân biệt gần nhất. Tài liệu về lý do mà Đối tượng và trường có nghĩa là “Mô tả thực thể và giá trị có thể chọn.” trong hệ thống này.
- Kiểm tra trường hợp sử dụng đại diện. Sử dụng giao diện tổng hợp với dữ liệu, địa điểm, khối lượng và ranh giới quyền phép thực tế.
- Bảo vệ chống lại một sai lầm đã biết. Xem xét “Giả định một yêu cầu có nghĩa là chi phí backend thấp.” và thêm một kiểm tra chấp nhận để bắt nó.
- Giới hạn khối lượng công việc. Đặt giới hạn phù hợp với chủ đề cho What Is GraphQL, bao gồm payload, độ đồng thời, thời gian thực thi và đầu ra đã lưu trữ nơi chúng áp dụng.
- Ghi lại quyết định. Giải thích lý do tại sao What Is GraphQL phù hợp với ranh giới này và nêu tên chứng cứ có thể biện minh cho một cách tiếp cận khác sau này.
Kết luận
What Is GraphQL nên mô tả một phần có thể kiểm tra của thiết kế hơn là đóng vai trò như một nhãn mơ hồ cho hành vi lân cận. Bản đánh giá nên bảo tồn quyết định trung tâm này: GraphQL là một ngôn ngữ truy vấn và hệ thống thực thi cho các API. Các khách hàng chọn các trường dựa trên một sơ đồ kiểu, và dịch vụ giải quyết lựa chọn đó. Nó cũng nên bảo vệ chống lại giả định rằng một yêu cầu đồng nghĩa với chi phí backend thấp. và giữ quyền truy cập What Is GraphQL trong chính sách đã được tài liệu hóa cho giao diện hoặc mạng.
Sẵn sàng xây dựng quy trình làm việc với dữ liệu web của bạn?
Kết nối một bước tiếp nhận hoặc tích hợp What Is GraphQL đã được đo lường với các thực tiễn xác thực và lưu trữ đã mô tả ở trên.
Đăng ký hôm nay và nhận $5 tín dụng miễn phí — không yêu cầu thẻ tín dụng.
Yêu cầu tín dụng $5 của bạn →Câu hỏi thường gặp
GraphQL có phải là một cơ sở dữ liệu không?
Không. GraphQL là một ngôn ngữ truy vấn và hệ thống thực thi cho các API. Các resolver có thể lấy giá trị từ các cơ sở dữ liệu, dịch vụ, bộ nhớ đệm, tệp, hoặc các API khác, nhưng GraphQL không quy định động cơ lưu trữ.
GraphQL có luôn sử dụng một điểm cuối không?
Các dịch vụ GraphQL thường chấp nhận các hoạt động tại một điểm cuối HTTP, nhưng đặc tả không yêu cầu một URL hoặc HTTP duy nhất. Hợp đồng xác định là sơ đồ và ngữ nghĩa thực thi.
GraphQL chỉ dành cho việc đọc không?
Không. GraphQL định nghĩa các hoạt động truy vấn để đọc, các hoạt động thay đổi cho những thay đổi được yêu cầu, và các hoạt động đăng ký cho các luồng khi một dịch vụ hỗ trợ chúng. Sơ đồ xác định các trường có sẵn.
GraphQL có thay thế REST không?
Không. GraphQL và REST giải quyết thiết kế giao diện khác nhau. GraphQL hữu ích cho các đồ thị được chọn kiểu của khách hàng, trong khi REST phù hợp với các tương tác HTTP theo hướng tài nguyên và ngữ nghĩa bộ nhớ đệm. Một hệ thống có thể phơi bày cả hai.