国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

完爆F(xiàn)acebook/GraphQL,APIJSON全方位對比解析(三)-表關(guān)聯(lián)查詢

Jioby / 874人閱讀

摘要:相關(guān)閱讀完爆,全方位對比解析一基礎(chǔ)功能完爆,全方位對比解析二權(quán)限控制自發(fā)布以來,不斷有網(wǎng)友拿來和的對比,甚至有不少人聲稱完爆。近年穩(wěn)步上升,已躍居第名。

相關(guān)閱讀:

完爆F(xiàn)acebook/GraphQL,APIJSON全方位對比解析(一)-基礎(chǔ)功能

完爆F(xiàn)acebook/GraphQL,APIJSON全方位對比解析(二)-權(quán)限控制

自APIJSON發(fā)布以來,不斷有網(wǎng)友拿來和Facebook的GraphQL對比,

甚至有不少人聲稱“完爆”APIJSON。

然而事實正好相反,本系列博客將以大量真實依據(jù)來證明,

APIJSON“完爆”GraphQL!

APIJSON的口號是:

后端接口和文檔自動化,前端(客戶端) 定制返回JSON的數(shù)據(jù)和結(jié)構(gòu)!

APIJSON的簡介:

APIJSON是一種為API而生的JSON網(wǎng)絡(luò)傳輸協(xié)議。
為 簡單的增刪改查、復(fù)雜的查詢、簡單的事務(wù)操作 提供了完全自動化的API。
能大幅降低開發(fā)和溝通成本,簡化開發(fā)流程,縮短開發(fā)周期。
適合中小型前后端分離的項目,尤其是互聯(lián)網(wǎng)創(chuàng)業(yè)項目和企業(yè)自用項目。

通過自動化API,前端可以定制任何數(shù)據(jù)、任何結(jié)構(gòu)!
大部分HTTP請求后端再也不用寫接口了,更不用寫文檔了!
前端再也不用和后端溝通接口或文檔問題了!再也不會被文檔各種錯誤坑了!
后端再也不用為了兼容舊接口寫新版接口和文檔了!再也不會被前端隨時隨地沒完沒了地?zé)┝耍?/p> 特點功能 在線解析

自動生成文檔,清晰可讀永遠(yuǎn)最新

自動生成請求代碼,支持Android和iOS

自動生成JavaBean文件,一鍵下載

自動管理與測試接口用例,一鍵共享

自動校驗與格式化JSON,支持高亮和收展

對于前端

不用再向后端催接口、求文檔

數(shù)據(jù)和結(jié)構(gòu)完全定制,要啥有啥

看請求知結(jié)果,所求即所得

可一次獲取任何數(shù)據(jù)、任何結(jié)構(gòu)

能去除重復(fù)數(shù)據(jù),節(jié)省流量提高速度

對于后端

提供通用接口,大部分API不用再寫

自動生成文檔,不用再編寫和維護(hù)

自動校驗權(quán)限、自動管理版本

開放API無需劃分版本,始終保持兼容

支持增刪改查、模糊搜索、正則匹配、遠(yuǎn)程函數(shù)等

視頻演示:http://i.youku.com/apijson

[以下Gif圖看起來比較卡,實際在手機上App運行很流暢]

項目主頁: https://github.com/TommyLemon/APIJSON

完爆F(xiàn)acebook/GraphQL,APIJSON全方位對比解析(三)-表關(guān)聯(lián)查詢

DB-Engines 發(fā)布了 2018 年 6 月份的數(shù)據(jù)庫排名:

以及它們的歷年發(fā)展走勢:

很明顯,Oracle, MySQL, Microsoft SQL Server 常年穩(wěn)占前三名,

并且大幅超過其他數(shù)據(jù)庫,只有這3個的 Score 在1000以上。

PostgreSQL 近年穩(wěn)步上升,已躍居第4名。

以上前4大最流行的數(shù)據(jù)庫都有一個共同點 —— 它們都是【關(guān)系型數(shù)據(jù)庫】

APIJSON 和 GraphQL 作為和 HTTP API 相關(guān)的通用開源項目,都必須支持 關(guān)系型數(shù)據(jù)庫。

然后它們雖然都支持,但 APIJSON “完爆” GraphQL !

用 GraphQL 實現(xiàn)表關(guān)聯(lián)查詢是復(fù)雜繁瑣的,而用 APIJSON 則非常簡單方便!

關(guān)系型數(shù)據(jù)庫之所以稱之為“關(guān)系”型數(shù)據(jù)庫,是因為它們能很好地支持表關(guān)聯(lián)查詢

例如 查詢當(dāng)前用戶的【全部信息】和TA的前5個朋友的【名字】

GraphQL 是這樣查的:

{
  user(id: 82001) {
    id
    sex
    name
    tag
    head
    contactIdList
    pictureList
    friends(first: 5) {
      name
    }
  }
}

返回結(jié)果是

{
    "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數(shù)組 呢?

因為后端提前用大量代碼寫死了數(shù)據(jù)結(jié)構(gòu)和解析方式,也就是 Type 和 Schema :

//聲明 GraphQLObjectType 類型,包括字段 fields 和解析函數(shù) resolver
var UserType = new GraphQLObjectType({
  name: "User",
  fields: () => ({
    name: { type: GraphQLString },
    friends: {
      args: {
        first: { type: GraphQLInt }
      },
      type: new GraphQLList(UserType), //聲明 friends 的類型是 User 數(shù)組
      resolve: (user, { first }) => { //查 friends 的解析函數(shù)
         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)));
      }
    }
  })
});
//聲明結(jié)構(gòu) Schema,包括 查詢結(jié)構(gòu) 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 的解析函數(shù)
        return ctx.db.findOne(
          "SELECT * FROM User WHERE id = " + id
        ).then(row => getUserFromRow(row));
      }
    }
  }
});

以上代碼是根據(jù)官方代碼

https://github.com/graphql/gr...__tests__/starWarsSchema.js

https://github.com/facebook/d...

和 http://apijson.org 提供測試的數(shù)據(jù)庫表 來實現(xiàn)的。

GraphQL 用 JavaScript 就這么復(fù)雜繁瑣了,用 Java,C# 等靜態(tài)類型語言會麻煩幾倍!

APIJSON 是這樣查的:

{
  "User": {
    "id": 82001, //查詢條件:id = 82001
    "User[]": { //數(shù)組,提取里面每一項的 User
      "count": 5, //前 5 條:LIMIT 0, 5
      "User": {
        "id{}@": "User/contactIdList", //在朋友id列表里:id IN contactIdList
        "@column": "name" //只查字段 name: SELECT name
      }
    }
  }
}

或者把 User 數(shù)組放到外面減少嵌套層級(不知道GraphQL怎么實現(xiàn),知道的留個評論謝謝)

{
  "User": {
    "id": 82001    
  },
  "User[]": {
    "count": 5,
    "User": {
      "id{}@": "User/contactIdList",
      "@column": "name"
    }
  }
}

User 數(shù)組里每個對象里都只有 name 這一個字段,如果想去掉多余的一層包裝,

APIJSON 可以【提取字段】(GraphQL 未提供)

{
  "User": {
    "id": 82001    
  },
  "User-name[]": { //從數(shù)組里面每個 User 里取出 name
    "count": 5,
    "User": {
      "id{}@": "User/contactIdList",
      "@column": "name"
    }
  }
}

以上信息已經(jīng)充分描述了 表、字段、查詢條件、表關(guān)聯(lián)方式 等信息。

APIJSON 后端不用寫任何代碼,

它會【完全自動】地 將以上請求 JSON 自動解析成 SQL 語句

SELECT * FROM User WHERE id = 82001
SELECT name FROM User WHERE id IN ${contactIdList} -- contactIdList 從上面的 User 取出

然后【自動執(zhí)行】并返回對應(yīng)結(jié)構(gòu)的 JSON 結(jié)果!

點左邊 [ "/" ] 按鈕可以將數(shù)組符號 [] 轉(zhuǎn)為單詞 List 哦(用 JSONResponse.format 格式化)

注: 以上APIJSON請求都可以在 http://apijson.org 在線工具上測試

后期預(yù)告:

完爆F(xiàn)acebook/GraphQL,APIJSON全方位對比解析

——? 數(shù)據(jù)結(jié)構(gòu)靈活性、接口安全性、接口工具、社區(qū)生態(tài)、靜態(tài)類型/強類型 語言 …

總結(jié)

用 GraphQL 實現(xiàn)表關(guān)聯(lián)查詢是復(fù)雜繁瑣的,后端要寫大量代碼,容易出錯、擴展麻煩!

而用 APIJSON 則非常簡單方便,后端不用寫任何代碼,完全自動解析,沒有維護(hù)成本!

APIJSON,讓后端接口和文檔自動化,前端(客戶端) 定制返回JSON的數(shù)據(jù)和結(jié)構(gòu)!

創(chuàng)作不易,右上角點Star支持下吧,非常感謝^_^

https://github.com/TommyLemon/APIJSON?(Java Server, Anroid, iOS, JavaScript)

https://github.com/liaozb/APIJSON.NET?(C# .NET Core Server)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/96204.html

相關(guān)文章

  • DeepMind 為何總能完爆人類?世界第一深度學(xué)習(xí)實驗室內(nèi)部探秘

    摘要:第二次則是今年初,論文被深度學(xué)習(xí)盛會拒絕。表示遺憾乃至憤怒的人不在少數(shù)。他認(rèn)為,使從其他學(xué)術(shù)實驗室中脫穎而出的,是它的跨領(lǐng)域文化。騰訊也在籌建人工智能實驗室,近期消息就會正式公布。 牛津大學(xué)和 DeepMind 的研究人員合作,開發(fā)出一款能夠閱讀唇語的系統(tǒng),這個名叫 Watch, Attend and Spell(WAS)的軟件在實際表現(xiàn)中遠(yuǎn)遠(yuǎn)超越了人類專家的水平。研究人員使用計算機視覺和機...

    yy736044583 評論0 收藏0
  • 開源|性能優(yōu)化利器:數(shù)據(jù)庫審核平臺Themis的選型與實踐

    摘要:正是存在問題,促使我們考慮引入數(shù)據(jù)庫審核平臺。的確,與很多互聯(lián)網(wǎng)公司相比,數(shù)據(jù)庫數(shù)十套的估摸并不是太大但與互聯(lián)網(wǎng)類公司不同,類似宜信這類金融類公司對數(shù)據(jù)庫的依賴性更大,大量的應(yīng)用是重數(shù)據(jù)庫類的,且其使用復(fù)雜程度也遠(yuǎn)比互聯(lián)網(wǎng)類的復(fù)雜。 作者:韓鋒 出處:DBAplus社群分享 Themis開源地址:https://github.com/CreditEaseDBA 拓展閱讀:宜信開源|數(shù)...

    wenhai.he 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<