2016-11-18 72 views
1

出於好奇,我開始閱讀關於GraphQL的知識。根據this article上的示例,它看起來像REST API請求。它是無國籍的嗎?意味着它沒有請求,服務器沒有響應?如果是,那麼它是如何比REST API更輕的資源?GraphQL無狀態嗎?

回答

1

它是無狀態的嗎?

是的,只要服務器不需要任何客戶端狀態知識來正確解釋請求;所有必要的信息都包含在請求本身(標題和正文)中。

它看起來像REST API請求給我。

它可能沒有。它在超媒體約束上完全失敗(規範缺少對鏈接的任何引用,這是一個很大的暗示)。 「資源」有點混亂。

graphql.org

HTTP通常與REST,它使用 「資源」 作爲其核心概念相關聯。相比之下,GraphQL的概念模型是一個實體圖。因此,GraphQL中的實體不會被URL標識。

因此,您得到了許多不同的URI,指向實體圖的不同子集的表示,以及用於圖的所有修改的單個URI。在統一界面的後面,這些「資源」將全部使用單一路線實施。

REST is an architectural style,「選擇它們在候選架構上引發的屬性」。看起來好像GraphQL對不同的一組屬性感興趣;也就是說他們正試圖解決一個不同類型的問題。

+2

這裏有幾個問題:1.許多人稱爲REST的API不支持HATEOAS或鏈接,並且人們將其稱爲REST,2.您可以完全通過GET請求發送GraphQL查詢參數,可以像往常一樣緩存。 – stubailo

+0

沒有這麼相關的問題:既然它們都基於HTTP,我仍然可以使用相同的Oauth 2.0和OpendID連接令牌的實現嗎? –

+0

使用GET方法的好處;我發現一些不好的/舊的東西,表明一切都是通過POST。 – VoiceOfUnreason

2

GraphQL通常被認爲比REST更有效率,因爲它允許客戶端在一個請求中請求多個資源,這樣可以節省往返時間,並且還允許客戶端只過濾他們實際需要的字段。因此,在一天結束時,請求完成的方式看起來很相似,但更強大的查詢語言允許客戶端準確獲取所需的數據,而不再需要更多。

是的,它就像REST一樣是無狀態的。實際上有些人可能會說GraphQL滿足REST描述的許多原始要求。