Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In
Continue with Google
Continue with Facebook
or use


Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here
Continue with Google
Continue with Facebook
or use


Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.


Have an account? Sign In Now

Sorry, you do not have a permission to ask a question, You must login to ask question.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Stack Ask

Stack Ask Logo Stack Ask Logo

Stack Ask Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 1303
Next
Answered
Vu Luong Anh
  • 0
Vu Luong AnhPundit
Asked: September 4, 20212021-09-04T04:04:40+00:00 2021-09-04T04:04:40+00:00In: GraphQL

So sánh GraphQL và REST API

  • 0

Cho em hỏi điểm mạnh và điểm yếu khi so sánh GraphQL và REST API, đặc biệt khi triển khai dự án thực tế ạ.

  • 4 4 Answers
  • 1k Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook
  • Report

4 Answers

  • Voted
  • Oldest
  • Recent
  1. Best Answer
    tvd12 Enlightened
    2021-09-04T16:12:37+00:00Added an answer on September 4, 2021 at 4:12 pm
    This answer was edited.

    Thật may là dự án ezyhttp cũng đang tích hợp GraphQL nên anh có thể trả lời em thế này nhé.

    1. Có vẻ như em đã sử dụng 1 thư viện client nào đó nên có sự nhầm lẫn ở đây, GraphQL là một ngôn ngữ truy vấn còn Rest là một giao thức được xây dựng trên http nên 2 thứ này bổ trợ cho nhau chứ không có sự so sánh nào ở đây cả
    2. Bản thân GraphQL có thể sử dụng với bất kì giao thức nào như tcp, websocket hay Rest (http), khi kết hợp với Rest thì nó có thể gọi thông qua GET và POST, ví dụ:

    curl --location -g --request GET 'http://localhost:8083/graphql?operationName=me&query={me{id+name+friends{name}}}&variables={"id" : 1}'
    

    Em có thể tham khảo ở trang chủ của GrahpQL để biết thêm chi tiết nhé

    Nói rộng thêm 1 chút.

    A. Khi kết hợp với Rest thì GraphQL cũng tiết kiệm được khá nhiều công sức. Ví dụ em có 1 đối tượng user thế này:

    User { id, name, nickName}
    

    Ví dụ Rest có 3 APIs:

    1. getUserId: chỉ trả về id
    2. getUsername: chỉ trả về name
    3. getUserNickName: chỉ trả về nickName

    Thì với GraphQL em sẽ chỉ cần 1 API duy nhất với 3 truy vấn:

    1. curl --location -g --request GET 'http://localhost:8083/graphql?operationName=getUser&query={user{id}}&variables={"id" : 1}'
    2. curl --location -g --request GET 'http://localhost:8083/graphql?operationName=getUser&query={user{name}}&variables={"id" : 1}'
    3. curl --location -g --request GET 'http://localhost:8083/graphql?operationName=getUser&query={user{nickName}}&variables={"id" : 1}'

    Rõ ràng là mọi thứ đơn giản hơn rất nhiều

    B. GraphQL khi kết hợp với Rest sẽ chỉ nên có 1 API là /graphql thôi, và thay vì viết các lớp controller như ngày xưa thì giờ đây chúng ta sẽ viết các lớp DataFetcher

    C. Nhìn chung kết hợp Rest với GraphQL cũng là một ý hay, nó giúp chúng ta tuỳ biến được số lượng trường cần response từ đó tiết kiệm được rất nhiều dung lượng.

    * Trong dự án hiện tại bọn anh đang làm thì chưa đả động gì đến GraphQL cả, một phần dự án bọn anh cũng lâu rồi, 1 phần là API của bọn anh khá phức tạp, gọi đến nhiều service khác nhau nên ứng dụng GraphQL cũng không có nhiều ý nghĩa.

    • 0
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • quanndh Beginner
      2021-09-05T05:05:34+00:00Replied to answer on September 5, 2021 at 5:05 am
      This answer was edited.

      Thật sự phải signup tài khoản để dislike=)) Fact sai trùng trùng
      1. Rest không phải giao thức nó là standard thiết kế api qua http method.
      2, Graphql chưa support giao thức nào khác http.
      3. Rest không thể kết hợp graphql vì nó chả liên quan gì đến nhau (1 cái là standard, 1 cái là query language).
      4. Không ai làm rest lại viết api getUserId, getUsername, getUserNickName. Vì rest là 1 quy chuẩn viết api nếu bạn viết api như này thì bạn chưa hiểu rest là gì. Tất nhiên tôi hiểu là bạn chỉ muốn lấy ví dụ nhưng mà ví dụ như này không có giá trị.
      5. “Không áp dụng Graphql vì logic phức tạp” đây là 1 câu nói vô nghĩa. Tôi đoán dự án bạn cũng dùng 3 data layers (controller – service – repositoty). Graphql khi được áp dụng vào dự án cũ sẽ đóng vài trò như 1 data fetching layer tương đương với tầng đầu tiên chứa các resolver (mình hay gọi thế tương đương với controller) và trỏ đến các service có sẵn của bạn nên logic của bạn ở service thế nào chả quan trọng.

      Từ các ý trên thì mình thấy thứ nhất là fact về lý thuyết của bạn sai, thứ 2 là áp dụng thực tiện bạn chưa có nên mình dislike câu trả lời của bạn ^^

      Nhân tiện mình muốn hỏi có cách nào xóa tài khoản không vì mình chỉ signup để comment đúng 1 cái thôi

      • -2
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
      • tvd12 Enlightened
        2021-09-05T06:50:17+00:00Replied to answer on September 5, 2021 at 6:50 am

        Cám ơn bạn đã trả lời nhé, nhân tiện nếu bạn nghĩ bạn giỏi hãy ở lại để trả lời những câu hỏi khác nữa nhé, cám ơn bạn nhiều 😀

        • 0
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
          • Report
      • tvd12 Enlightened
        2021-09-05T07:44:36+00:00Replied to answer on September 5, 2021 at 7:44 am
        This answer was edited.

        Mình đang hiểu là mục tiêu trả lời của bạn là để target đến cá nhân mình sai thay vì tập trung vào câu trả lời, vậy thì hãy cùng nhau phân tích nhé.

        1. Bạn có thể gọi REST là cái gì cũng được, theo wiki: https://en.wikipedia.org/wiki/Representational_state_transfer thì nó là một software architectural style chứ cũng không phải là “standard thiết kế api qua http method” như bạn nói, với mình thì mình gọi là giao thức (để client với server trao đổi thông tin với nhau) cho đơn giản
        2. Lại theo wiki: https://en.wikipedia.org/wiki/GraphQL, GraphQL is an open-source data query and manipulation language for APIs nghĩa là nó cung cấp dữ liệu cho APIs vậy thì nó có thể dùng với HTTP hay websocket hây bất kì tầng giao vận nào cũng được, hãy tham khảo spring để biết thêm chi tiết: https://github.com/spring-projects/spring-graphql/blob/main/spring-graphql/src/main/java/org/springframework/graphql/web/webflux/GraphQlWebSocketHandler.java
        3. Theo 1 và 2 thì GraphQL hoàn toàn có thể kết hợp với REST để cung cấp data cho API
        4. Nếu không viết thế thì phải viết thế nào? Hãy chỉ ra cách viết của bạn
        5. Dự án tôi đang làm liên quan đến blockchain, nó phức tạp hơn những gì bạn đang nghĩ đấy, nên không nên mang hệ quy chiếu của mình vào câu trả lời của người khác
        6. Dự án ezyhttp: https://github.com/youngmonkeys/ezyhttp/pull/13 của chúng tôi đang tích hợp để support GraphQL cũng gần giống với spring, nên hãy tham khảo trước khi phán xét nhé

        Cuối cùng, hãy học cách trả lời, tập trung vào trả lời thay vì target vào cá nhân 1 người nào đó. Cám ơn bạn.

        • 0
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
          • Report

You must login to add an answer.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 826
  • Answers 1k
  • Best Answers 80
  • Users 338
  • Popular
  • Answers
  • monkey

    [Deep Learning] Làm thế nào để xác định được cái ...

    • 16 Answers
  • Thành Vương

    Bug sai đường dẫn khi config ckeditor lên live

    • 14 Answers
  • Tú Trần Anh

    [Ezyfox Server] Unity game client không gửi được command khi ...

    • 12 Answers
  • tvd12
    tvd12 added an answer 1. Anh không hiểu tại sao em lại cần phải… February 4, 2023 at 7:50 am
  • tvd12
    tvd12 added an answer Cái này anh thấy là em đang gửi dữ liệu… February 4, 2023 at 7:46 am
  • monkey
    monkey added an answer Đây em: class Event{} class Room{} class EventRoom{eventId, roomId} February 2, 2023 at 9:07 am

Related Questions

  • Nguyễn Thái Sơn

    làm chức năng ẩn hiện 1 số trường

    • 3 Answers
  • Nguyễn Thái Sơn

    [Duplicated]Graphql hơn gì Restful

    • 1 Answer
  • Tú Hoàng

    khi nào nên chọn graphQL

    • 1 Answer

Top Members

tvd12

tvd12

  • 76 Questions
  • 1k Points
Enlightened
monkey

monkey

  • 122 Questions
  • 1k Points
Enlightened
Nguyễn Thái Sơn

Nguyễn Thái Sơn

  • 205 Questions
  • 307 Points
Enlightened

Trending Tags

#formatdate .net .net core .net oop abstract class access app access token ai analytics android ansible anti-flooding apache poi api app architecture artificial intelligence assembly async asyncawait atomicboolean authentication backend backend nestjs background bash script batch bean big project binding bitcoin blockchain blog boot-nodes branch british btree bucket4j buffered build bundle c# c# .net cache caching callback career career path cast centos chat cloud cloud reliability commit communication company computer science concurrent config-css connection pool content-disposition contract convert date to number cookie cors cosmos cosmos-sdk crawl data cron css database database migration datasource datastructure deadlock decentralized exchange deep learning deploy contract design-pattern design patterns devops dex di distraction programing dns docker download draw.io du học duration dữ liệu lớn eclip editor elasticsearch email employee english erc20 erc721 estimation eth ethereum ethereum login excel exception exception handle exception handler executor export compliance extensions exyfox ezyfox ezyfox-boot ezyfox-server ezyfoxserver ezyhttp ezymq-kafka ezyredis facebook fe filter floating point flutter format json freetank french front-end frontend fullstack fulltextsearch future gallery game game-box game-room game-server gateway get get file zip git glide go golang google gorilla graduation thesis graphql grapql grpc guide h2 database handy terminal hazelcast hibernate hibernateconfig html http https hyperloglog image index indexing integration-test intellij interface interview io ioc ipfs isolate issue it java java core javacore javascript java spring javaw java web jenkins jetbrains job join jotform jpa js json json file jsonproperty json to object jsp jsp & servlet junit-test jvm jwt kafka keep promise kerberos keycloak kotlin language languague library list load-balancing load balancer lock log log4j log4j-core login lưu trữ machine learning macos mail mail template main maria db math maven merge message queue messaging metamask microservice microservices migration mobile model mongo monitoring mq msgpack multi-threading multiple tenant multithread multithreading mysql n naming naming convention nan netcore netty networking nft nft game nginx nio node.js nodejs non-blocking io null oop opensource optimize oracle orm otp message paginaiton pagination pancakeswap panic partition pdf pgpool phỏng vấn plugin pointer postgresql postman pre private_key procedure profile programming project management promise properties push-noti push message android push notification python python unicode qrcode question queue rabbitmq reactive reactjs reactjs download readmoretextview recyclerview redis refactor refresh token regex replica repository request resilence4j resource rest resttemplate roadmap ropssten ropsten round robin rust rxjava s3 schedule scheduled scheduled spring boot search security send email send mail server servlet session shift jis singleton sjis slack smart contract soap socket socket server soft delete solution sosanh spring spring-boot-test spring-jpa spring aop springboot spring boot spring data jpa spring redis springsecurity spring security springwebflux mysql spring websocket spring websocket cors sql sql server sse ssl email stackask storage stream stream api stress test structure trong spring boot study synchronize synchronized system environment variables test thread threadjava threadpool thread pool thymeleaf tomcat totp tracking location transaction transfer transfer git udp uniswap unit test unity upload upload file utf-8 file validate validate date vector view volatile vue vue cli watermark web web3 web3 client webassembly webflux webpack websocket windows 11 winforms work zip file zookeeper

Footer

Stack Ask

Stack Ask is where Developers Ask & Answers. It will help you resolve any questions and connect you with other people.

About Us

  • Meet The Team
  • About Us
  • Contact Us

Legal Stuff

  • Terms of Service
  • Privacy Policy
  • Cookie Policy

Help

Follow

© 2021 Stack Ask. All Rights Reserved
Powered by youngmonkeys.org