graph ql

23
GraphQL 11/2016

Upload: nghia-minh

Post on 21-Jan-2017

252 views

Category:

Technology


2 download

TRANSCRIPT

GraphQL11/2016

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

Ví dụ

User Story

Comment

Has

HasHas

Has Replies

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• Biểu diễn ba resouces: User, Story,

Comment:• /user• /story• /comment

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ị

GraphQL

User Story

Comment

Author

LastStory

CommentsAuthor

Replies

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

Query

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…

Tạo một node

• Định nghĩa Type• Định nghĩa fields• Định nghĩa hàm resolver để truy vấn

CommentType

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

Resolver

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

Nâng cấp, mở rộngRoot

Node

NewNod

e

Node

NewNod

e

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

Ứng dụng cho tiki

Order API

Catalog API

Seller API

Customer API

- CustomerField

- SellerField- CatalogFie

ld- OrderField