SQL是比GraphQL更好的API語言?
Datasette是一個使用SQL實現API查詢的專案,Datasette的建立者和Django的共同建立者Simon Willison認為:SQL是比GraphQL更好的API語言。
眾說紛紜:
Datasette的口號是“一種用於探索和釋出資料的工具”,對我來說,SQL(具有適當的限制)是對資料集執行的各種操作而言是一種合適的API,這在很大程度上是有意義的。這實際上不是典型的Web API用例,通常情況下您會遇到更多專門化和受限的使用場景。
作為Datasette專案的一部分,我已經使用SQL作為API查詢語言已有兩年,我開始認為用於API查詢的SQL確實是一個糟糕的主意。Datasette之所以支援它,是因為它被設計為即席查詢工具(恰好能夠將結果匯出為JSON),但是對於生產應用程式來說,這顯然是個糟糕的主意。
我過去曾嘗試過幾次。我認為我遇到過的最大問題是資料庫修改。在這些情況下,我不僅需要更新我的api伺服器中的查詢,還需要更新我的客戶端程式碼,而對於多個客戶端,這變得更加困難。總的來說,我認為客戶端上的SQL非常好-甚至很理想。實際上,我嘗試開發僅生成使用者特定資料庫摘錄的api,其中SQL非常適合在客戶端本地查詢資料。去年,由於這個確切的原因,我嘗試在瀏覽器中執行sqlite,但是它太繁瑣了。
我認為在這次討論中變得越來越清楚的是,有一些開發人員(肯定包括我自己)願意使用SQL作為實際資料庫之外的簡單程式設計結構的介面。
我覺得這個討論很容易使人意識到“在客戶端執行任何查詢”是一個糟糕的主意,而這正是大多數GraphQL安裝程式所提供的優點。儘管我喜歡GraphQL,但當進行安全滲透測試時,它是一個非常方便的資料滲透引擎。預設情況下,沒有授權,沒有身份驗證,甚至帶有自省功能。與SQL隱碼攻擊,不安全的S3儲存桶或錯誤配置的NoSQL例項相比,這種技術如果形成流行趨勢將對資料安全而言將更加糟糕。
雖然我也看到了許多安全性差的GraphQL API :,但認為GraphQL安全性差似乎是一種不公平的批評。對我來說,GraphQL通常是REST的一種替代方案,後者預設情況下也沒有任何授權或身份驗證,這是一個正交的問題,但是不能怪罪REST。
GraphQL有意義的是前端進行大量複雜而複雜的呼叫的情況。如果它是一個簡單的REST api,則與其進行互動可能不需要GraphQL,並且實際上可能會對其造成損害。
對我來說,GraphQL僅適合在客戶端進行快速原型製作/更改的靈活性很重視時。
實際上GraphQL是讓我重新考慮在客戶端執行查詢是否是個壞主意的事情,這是我開始認真嘗試客戶端SQL的原因之一。我絕對同意,您必須非常小心安全。根據我在足夠大的團隊中的經驗,有人會在某個時候搞砸,所以在任何客戶端查詢機制中這都是很大的風險。
就像生活中所有美好的事物一樣,這裡存在一個折衷。當您所請求的內容最好表示為樹(或“圖形”,儘管只有DAG變體)時,GraphQL更好。並非總是如此,但是在構建供生產使用的API時通常是這樣。當然,您可以用表格形式表示樹結構,但是客戶端使用它並不十分方便。特別是如果您的客戶端正在渲染巢狀的元件檢視,則您所需的通常是分層的。GraphQL對我們的生產人員來說更好的另一個方面是效能更可預測,這恰恰是因為該語言受到更多限制。您不僅可以加入所有內容,也不能偶然選擇數十億行。該模式指示允許的內容。當然,同樣可以在SQL中進行限制,只需適當地配置您的架構,限制等,但是SQL預設情況下可以執行任何操作,而GraphQL預設情況下則不允許。這就是說,作為一種語言,SQL顯然是優越的。它是最成功的4GL(說明性)語言。我希望更多的語言經過精心設計,並希望在此方向上有更多的語言創新。從我的角度來看,GraphQL是一種DSL,用於以JSON格式靈活地從API:請求分層資料,並針對複雜的不斷髮展的API進行了最佳化。SQL是用於關係資料轉換的成熟通用語言。
相關文章
- 靈活的API查詢語言——GraphQLAPI
- GO是更好的程式語言嗎?Go
- 為什麼REST比GraphQL更好? - TomaszJaskuλaREST
- 為什麼Kotlin比任何愚蠢的語言更好Kotlin
- Go 語言實戰 GraphQLGo
- GraphQL-Go-onepieceAPI:用Go語言和GraphQL開發的海賊王APIGoAPI
- 為什麼 GraphQL 是 API 的未來API
- “超越” SQL 的資料查詢語言“新秀”Top8:GraphQL、PRQL、WebAssembly上榜SQLWeb
- 耐克公司是如何將API切換到GraphQL的?API
- GraphQL API vs REST APIAPIREST
- API架構的選擇,RESTful、GraphQL還是gRPCAPI架構RESTRPC
- GraphQL Vs. REST? API 開發方法的誠實比較 | transpositRESTAPI
- SQL語言SQL
- 語言對比的地方
- Java和Python哪個更好?解讀Python對比其他語言的優勢JavaPython
- k語言和q語言的比較
- GraphQL學習:Github GraphQL API v4初探GithubAPI
- sql程式語言SQL
- sql語言演示!SQL
- 流行語言的比較 (轉)
- 程式語言——沒有更好的,只有更適合的
- 【語言】Java 日期 API 的使用技巧JavaAPI
- 【整理】各種語言的API文件API
- Java 語言是強型別語言語言(轉)Java型別
- 漢語是最了不起的語言
- PHP是最好的語言!PHP
- Oracle 的PL/SQL語言使用OracleSQL
- SQL語言基礎(資料控制語言)SQL
- SQL語言(結構化查詢語言)SQL
- Go是Google的語言,而不是我們的語言Go
- Go語言的Web框架比較GoWeb框架
- Python 和 C 語言學哪個更好?Python
- 哪一種膠水語言更好用 todo
- SQL語言分類SQL
- Oracle SQL語言(轉)OracleSQL
- GraphQL初體驗,Node.js構建GraphQL API指南Node.jsAPI
- Go語言實現的Java Stream APIGoJavaAPI
- goweb,基於go語言的API框架GoWebAPI框架