摘要:相關閱讀完爆,全方位對比解析一基礎功能完爆,全方位對比解析二權限控制自發布以來,不斷有網友拿來和的對比,甚至有不少人聲稱完爆。近年穩步上升,已躍居第名。
相關閱讀:
完爆Facebook/GraphQL,APIJSON全方位對比解析(一)-基礎功能
完爆Facebook/GraphQL,APIJSON全方位對比解析(二)-權限控制
自APIJSON發布以來,不斷有網友拿來和Facebook的GraphQL對比,
甚至有不少人聲稱“完爆”APIJSON。
然而事實正好相反,本系列博客將以大量真實依據來證明,
APIJSON“完爆”GraphQL!
APIJSON的口號是:
后端接口和文檔自動化,前端(客戶端) 定制返回JSON的數據和結構!
APIJSON的簡介:
APIJSON是一種為API而生的JSON網絡傳輸協議。
為 簡單的增刪改查、復雜的查詢、簡單的事務操作 提供了完全自動化的API。
能大幅降低開發和溝通成本,簡化開發流程,縮短開發周期。
適合中小型前后端分離的項目,尤其是互聯網創業項目和企業自用項目。
通過自動化API,前端可以定制任何數據、任何結構!
大部分HTTP請求后端再也不用寫接口了,更不用寫文檔了!
前端再也不用和后端溝通接口或文檔問題了!再也不會被文檔各種錯誤坑了!
后端再也不用為了兼容舊接口寫新版接口和文檔了!再也不會被前端隨時隨地沒完沒了地煩了!
自動生成文檔,清晰可讀永遠最新
自動生成請求代碼,支持Android和iOS
自動生成JavaBean文件,一鍵下載
自動管理與測試接口用例,一鍵共享
自動校驗與格式化JSON,支持高亮和收展
對于前端不用再向后端催接口、求文檔
數據和結構完全定制,要啥有啥
看請求知結果,所求即所得
可一次獲取任何數據、任何結構
能去除重復數據,節省流量提高速度
對于后端提供通用接口,大部分API不用再寫
自動生成文檔,不用再編寫和維護
自動校驗權限、自動管理版本
開放API無需劃分版本,始終保持兼容
支持增刪改查、模糊搜索、正則匹配、遠程函數等
視頻演示:http://i.youku.com/apijson
[以下Gif圖看起來比較卡,實際在手機上App運行很流暢]
項目主頁: https://github.com/TommyLemon/APIJSON
完爆Facebook/GraphQL,APIJSON全方位對比解析(三)-表關聯查詢DB-Engines 發布了 2018 年 6 月份的數據庫排名:
以及它們的歷年發展走勢:
很明顯,Oracle, MySQL, Microsoft SQL Server 常年穩占前三名,
并且大幅超過其他數據庫,只有這3個的 Score 在1000以上。
PostgreSQL 近年穩步上升,已躍居第4名。
以上前4大最流行的數據庫都有一個共同點 —— 它們都是【關系型數據庫】。
APIJSON 和 GraphQL 作為和 HTTP API 相關的通用開源項目,都必須支持 關系型數據庫。
然后它們雖然都支持,但 APIJSON “完爆” GraphQL !
用 GraphQL 實現表關聯查詢是復雜繁瑣的,而用 APIJSON 則非常簡單方便!
關系型數據庫之所以稱之為“關系”型數據庫,是因為它們能很好地支持【表關聯查詢】。
例如 查詢當前用戶的【全部信息】和TA的前5個朋友的【名字】
GraphQL 是這樣查的:
{ user(id: 82001) { id sex name tag head contactIdList pictureList friends(first: 5) { name } } }
返回結果是
{ "data":{ "user":{ "id":82001, "sex":0, "name":"測試改名", "tag":"APIJSON User", "head":"https://static.oschina.net/uploads/user/19/39085_50.jpg", "contactIdList":[ 38710, 82002, 82006, 82030, 82025, 82003, 93793 ], "pictureList":[ "http://common.cnblogs.com/images/icon_weibo_24.png" ], "friends":[ { "name":"TommyLemon" }, { "name":"Happy~" }, { "name":"Wechat" }, { "name":"Meria" }, { "name":"Tommy" } ] } } }
GraphQL 后端怎么知道 user 的類型是 User,friends 的 類型是 User數組 呢?
因為后端提前用大量代碼寫死了數據結構和解析方式,也就是 Type 和 Schema :
//聲明 GraphQLObjectType 類型,包括字段 fields 和解析函數 resolver var UserType = new GraphQLObjectType({ name: "User", fields: () => ({ name: { type: GraphQLString }, friends: { args: { first: { type: GraphQLInt } }, type: new GraphQLList(UserType), //聲明 friends 的類型是 User 數組 resolve: (user, { first }) => { //查 friends 的解析函數 var ids = user.contactIdList == null ? [] : user.contactIdList.join(); return ctx.db.findAll( "SELECT name FROM User WHERE id IN(" + ids + ") LIMIT " + first ).then(rows => rows.map(row => getUserFromRow(row))); } } }) });
//聲明結構 Schema,包括 查詢結構 Query export const UserSchema = new GraphQLSchema({ query: { user: { type: UserType //聲明 me 的類型是 User fields: () => ({ id: { type: new GraphQLNonNull(GraphQLID) }, sex: { type: GraphQLInt }, name: { type: GraphQLString }, tag: { type: GraphQLString }, head: { type: GraphQLString }, contactIdList: { type: new GraphQLList(GraphQLID) }, pictureList: { type: new GraphQLList(GraphQLString) } }), args: { id: { type: new GraphQLNonNull(GraphQLID) } }, resolve: ({ id }) => { //查 User 的解析函數 return ctx.db.findOne( "SELECT * FROM User WHERE id = " + id ).then(row => getUserFromRow(row)); } } } });
以上代碼是根據官方代碼
https://github.com/graphql/gr...__tests__/starWarsSchema.js
https://github.com/facebook/d...
和 http://apijson.org 提供測試的數據庫表 來實現的。
GraphQL 用 JavaScript 就這么復雜繁瑣了,用 Java,C# 等靜態類型語言會麻煩幾倍!
APIJSON 是這樣查的:
{ "User": { "id": 82001, //查詢條件:id = 82001 "User[]": { //數組,提取里面每一項的 User "count": 5, //前 5 條:LIMIT 0, 5 "User": { "id{}@": "User/contactIdList", //在朋友id列表里:id IN contactIdList "@column": "name" //只查字段 name: SELECT name } } } }
或者把 User 數組放到外面減少嵌套層級(不知道GraphQL怎么實現,知道的留個評論謝謝)
{ "User": { "id": 82001 }, "User[]": { "count": 5, "User": { "id{}@": "User/contactIdList", "@column": "name" } } }
User 數組里每個對象里都只有 name 這一個字段,如果想去掉多余的一層包裝,
APIJSON 可以【提取字段】(GraphQL 未提供)
{ "User": { "id": 82001 }, "User-name[]": { //從數組里面每個 User 里取出 name "count": 5, "User": { "id{}@": "User/contactIdList", "@column": "name" } } }
以上信息已經充分描述了 表、字段、查詢條件、表關聯方式 等信息。
APIJSON 后端不用寫任何代碼,
它會【完全自動】地 將以上請求 JSON 自動解析成 SQL 語句
SELECT * FROM User WHERE id = 82001
SELECT name FROM User WHERE id IN ${contactIdList} -- contactIdList 從上面的 User 取出
然后【自動執行】并返回對應結構的 JSON 結果!
點左邊 [ "/" ] 按鈕可以將數組符號 [] 轉為單詞 List 哦(用 JSONResponse.format 格式化)
注: 以上APIJSON請求都可以在 http://apijson.org 在線工具上測試
后期預告:
完爆Facebook/GraphQL,APIJSON全方位對比解析
——? 數據結構靈活性、接口安全性、接口工具、社區生態、靜態類型/強類型 語言 …
總結
用 GraphQL 實現表關聯查詢是復雜繁瑣的,后端要寫大量代碼,容易出錯、擴展麻煩!
而用 APIJSON 則非常簡單方便,后端不用寫任何代碼,完全自動解析,沒有維護成本!
APIJSON,讓后端接口和文檔自動化,前端(客戶端) 定制返回JSON的數據和結構!
創作不易,右上角點Star支持下吧,非常感謝^_^
https://github.com/TommyLemon/APIJSON?(Java Server, Anroid, iOS, JavaScript)
https://github.com/liaozb/APIJSON.NET?(C# .NET Core Server)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96204.html
摘要:第二次則是今年初,論文被深度學習盛會拒絕。表示遺憾乃至憤怒的人不在少數。他認為,使從其他學術實驗室中脫穎而出的,是它的跨領域文化。騰訊也在籌建人工智能實驗室,近期消息就會正式公布。 牛津大學和 DeepMind 的研究人員合作,開發出一款能夠閱讀唇語的系統,這個名叫 Watch, Attend and Spell(WAS)的軟件在實際表現中遠遠超越了人類專家的水平。研究人員使用計算機視覺和機...
摘要:正是存在問題,促使我們考慮引入數據庫審核平臺。的確,與很多互聯網公司相比,數據庫數十套的估摸并不是太大但與互聯網類公司不同,類似宜信這類金融類公司對數據庫的依賴性更大,大量的應用是重數據庫類的,且其使用復雜程度也遠比互聯網類的復雜。 作者:韓鋒 出處:DBAplus社群分享 Themis開源地址:https://github.com/CreditEaseDBA 拓展閱讀:宜信開源|數...
閱讀 1472·2021-10-18 13:29
閱讀 2715·2021-10-12 10:18
閱讀 3588·2021-09-22 15:06
閱讀 2605·2019-08-29 17:09
閱讀 2794·2019-08-29 16:41
閱讀 1500·2019-08-29 13:48
閱讀 3233·2019-08-26 13:49
閱讀 3332·2019-08-26 13:34