graph ql
TRANSCRIPT
GraphQL
• Do Facebook open source• http://graphql.org/• Dùng để xây dựng API• Triết lý: biểu diễn API dưới dạng đồ thị
Yêu cầu thiết kế API
• API được sử dụng để tích hợp hệ thống• Dễ dàng sử dụng để tích hợp• Phát triển, nâng cấp dễ dàng
Nhu cầu từ client• Liệt kê các story kèm thông tin tác giả• Liệt kê các story kèm theo comment. Với
các coment kèm theo thông tin user và danh sách các reply cho comment đó…
• Liệt kê story cuối cùng của user kèm theo thông tin của comment: người post, các comment reply…
Restful API• Phải định nghĩa thêm nhiều resouces - URI
để giải quyết các nhu cầu của client:• /user/id/story• /story/id/comment• /comment/replies• ….
Restful API• Cách sử dụng api bị bó buộc trong cấu trúc các
resource với các verb cơ bản: GET, POST, PUT, DELETE, PATCH, HEAD
• Cấu trúc API ngày một phức tạp• Client cần phải gọi nhiều API để có được dữ liệu
mong muốn• Khó customize khi client chỉ cần một vài field tuỳ
theo kịch bản• Trùng lặp API lớn
GraphQL
• Biểu diễn mỗi một resource là một node duy nhất trên một đồ thị
• Định nghĩa mối quan hệ giữa các node• Truy vấn api là quá trình duyệt qua đồ thị
Query• Là quá trình duyệt qua các node từ gốc tới
lá:• Tại mỗi một node xác định các fields cần
lấy• Có thể định argument cho từng fields để
lấy dữ liệu mong muốn• Client chỉ cần request một lần để có tất cả
dữ liệu cần
Cấu trúc GraphQL• GraphQL định nghĩa schema là mối quan
hệ giữa các node• Mỗi node gồm nhiều fields, mỗi fields được
định nghĩa một hàm resolver để truy vấn• Định nghĩa kiểu dữ liệu cho từng node, và
từng fields• Có thể định nghĩa Interface cho từng node
Type• GraphQL định nghĩa chính type cho từng
node và từng fields• Có thể định nghĩa riêng từng Type theo nhu
cầu: UserType, StoryType, CommentType…• GraphQL định nghĩa: Primitive Type,
ObjectType, Enum, Union, Interface…
Resolver
• Dùng để truy vấn dữ liệu• Có hai loại ResolveField và Resolve:• ResolveField: định nghĩa ở mức node• Resolve: định nghĩa cụ thể cho từng field
Nâng cấp, mở rộng• Có thể thêm bớt các node và các mối quan
hệ giữa các node• Các node có thể truy vấn dữ liệu độc lập
với nhau• Vẫn đảm bảo một endpoint duy nhất với
client• —> Có thể không cần sử dụng Version
Hạn chế
• Cần phải tính toán tối ưu truy vấn dữ liệu, do truy vấn nhiều node
• Tham khảo cách implement Dataloader của Facebook (implement bằng node.js)
Ứng dụng cho tiki• Xây dựng API cho App và ứng dụng front
end• Xây dựng các API tổng hợp phục vụ cho
market place• Có thể wrap lại các api của các service
riêng