GraphQL - Matters API為例 (use python GQL)
參考自@robertu 的社區開放一小步:Matters API
大概筆記
1 我可以在哪試打api?
2 輸入格式怎麼打
3 文件怎麼看
4 喔有資料了然後咧 (Python - GQL)
(1) token打在哪
(2) input怎麼設為變數
1 我可以在哪試打api?
2個方法:
(1) postman(https://www.postman.com) 需要註冊,如果只是試用一下,建議用方法(2) playground
參考至postman的官方文件(https://learning.postman.com/docs/sending-requests/supported-api-frameworks/graphql/),現在是有支援GraphQL的哦
(2)playground 不需要註冊,不用載任何東西,有夠方便,真是好東西耶QQ
playground連結附上:
https://server.matters.news/playground
2 輸入格式怎麼打
不管是query,還是mutation,基本格式都是這樣
query { SOME_SCRIPT } mutation { SOME_SCRIPT }
直接來個實例
query { user(input: { userName: "INPUT_USER_NAME" }) { displayName } }
他的輸入格式應該是這樣的
query { SOME_API_NAME(INPUT_PARA: { KEY1: VALUE1, KEY2: VALUE2 }) { SOME_VALUE_YOU_WANT SOME_VALUE_YOU_WANT { SOME_SUB_VALUE SOME_SUB_VALUE } } }
3 文件怎麼看
好哦,所以學會格式了,那我怎麼知道我要輸入什麼,我又可以拿到什麼輸出?
(1) 點選playground右邊的doc (有夠精美),可以看到api應該是用query或是mutation去取得
(2) 以user為例,可以得知api的名稱是user(紅字),並且他的型別是User (黃字)
(3) 發現要打user這支api,是有input的,並且型別是UserInput
(4) 滑鼠滾輪到底的過程中,中間這些值,通通都是我可以取得的值
(5) 找到input要輸入的格式是UserInput,點選進去後
(6) 發現格式就是打一個key叫做userName,並且value是一個字串
好了,從以上6個順序,就可以湊出第2步的實例的打法了,有興趣可以多玩玩,打錯他還會提示你,揪肝心,根本天使QQQQQ
4 喔有資料了然後咧 (Python - GQL)
以上的步驟,學到了怎麼取得資料,不過取得資料之後應該是要做某些處理的,不然上述的步驟,只是在確認這些api沒壞掉,可以用而已
以下使用python的GQL(https://github.com/graphql-python/gql)套件為例,他的Github已經有附使用例子了,所以這邊我只大概記錄一下實際我用到的功能
(1) token打在哪
transport = AIOHTTPTransport(url="https://server.matters.news/graphql", headers={"x-access-token": "YOUR_TOKEN"}) client = Client(transport=transport, fetch_schema_from_transport=True)
(2) gql的input怎麼設為變數
一樣以user為例,原本打在playground的內容是
query { user(input: { userName: "USER_NAME" }) { displayName } }
直接把script貼進GQL內,程式碼如下
query = gql( """ query{ user(input: { userName: "USER_NAME" }) { displayName } } """ )
但現在,userName我不想寫死,想設為變數,那就改這樣
userName = "USER_NAME" paras = {"userName": userName} query = gql( """ query ($userName: String!){ user(input: { userName: $userName }) { displayName } } """ ) result = client.execute(query, variable_values=paras)
大致上就是多設個參數,並在query後面,先加上多了哪些變數,並且變數的型別是什麼
結論
最近剛好發生兩件事,一個是@志工爺爺 的白菩提花名冊 2021-0709 ( 本日頭條 : 盜文事件 ),另一個是則是@catding的Matters儀表板發佈,每日自動更新,剛好可以跟到什麼叫做水能載舟,亦能覆舟,平平都是開放API,就有人拿來盜文(對,依照DOC的內容,只要你想,現在也可以練習盜一波XDD),但也有人把資料來拿視覺化,讓大家更可以瞭解平臺的活躍度,以及大家可能喜歡的話題,欸,大概學習到了對於開源專案的一些正確使用方式了啊3口3!!