【Graphql實踐】使用 Apollo(iOS) 訪問 Github 的 Graphql API

最近在協助調研 Apollo 生成的代碼是否有可能跨 Query 共享模型的問題,雖然初步結論是不能,並非預期的結果,可是在調研過程當中積累的一些經驗,有必要記錄下。若是你也對 Graphql 感興趣,不妨先從 Github 的 Graphql API 來切手實踐。html

關於 Graphql 官網

儘管只是作客戶端的一些實踐,我仍是建議你先過一遍 Graphql 官網的學習指南。這樣能更快速地理解概念。一些客戶端庫的文檔,大部分都只是介紹基本用法。前端

中文版,能夠直接看 http://graphql.cn/ios

製做訪問 Github API 的 Token

Github 中有多個 Token 的概念,你須要的是在 https://github.com/settings/tokens 這個頁面。初步接觸 Github API 的童鞋,可能會走好多彎路,好比把 Github APP 的token生成規則當成了 API 的訪問 Token,幾經周折生成出來,卻發現徹底很差使。git

curl -H "Authorization: bearer 7b7cc672235587292be65d11d8ae729b14a0d162" https://api.github.com/graphql

其中的 7b7cc672235587292be65d11d8ae729b14a0d162 是我本身生成的幾乎沒有私人權限的 Token,能夠臨時提供給你們快速上手。可是不保證其一直可用,因此仍是建議你們本身去新建一個本身的專屬 Toekn。github

配置 graphiql -- graphql 調試工具

這個地方,也是各類坑。第一反應就是去看官方文檔,可是文檔過期太多,坑太深。若是你非要看的話,我友情提醒一句,須要在父目錄執行的是npm

yarn && npm run build

或者你乾脆本身新建一個本身的示例:json

yarn add graphiql
yarn add graphql

若是看不懂我上面在說什麼,說明你極可能不是一個 Web 前端,那就直接用一個基於 graphiql 開發的 APP 吧:swift

https://github.com/skevy/graphiql-app。Github 甚至還有專門的使用該 App 訪問 Github API 的教程:https://developer.github.com/v4/guides/using-the-explorer/api

注意: 這個 App 是基於 Electron 開發的,做者沒有直接說起對 Windows 的支持,可是若是你確實有須要,本身看下 Electron 的編譯教程,確定是能夠搞定的。app

以可視化方式查看 Github API

想象下,Graphql 把數據當作一個具體的圖來處理,那這個圖真的畫出來是什麼樣呢?原本想本身用 Web 畫下效果的,可是居然發現網上已經有了相關的工具。

完整的工具庫,見https://github.com/APIs-guru/graphql-voyager。若是能和上文的 graphiql 的 App 聚合在一塊兒,就很是完美了。

若是直接向看下效果,能夠直接訪問在線Demo: https://apis.guru/graphql-voyager/。裏面提供了幾個實例。Github 的 API 看起來,彷佛也不是很複雜嘛~~

關於 Apollo iOS 庫

文檔確定是要要先看下的:https://www.apollographql.com/docs/ios/。可是其中的坑,仍是有幾個,記錄下,或許能幫助後來的童鞋:

  • iOS 兼容性是 iOS 9.0。若是你的項目指定最低版本爲 8.0,會發現 pod 安裝的老是舊版 Apollo 庫。

  • 若是找不到最新的庫,可能須要更新下 pod:

pod install --repo-update
  • 寫到 Xcode 裏那段腳本,是不正確的。官網文檔沒有及時更新,應該下面這樣寫:
APOLLO_FRAMEWORK_PATH="$(eval find $FRAMEWORK_SEARCH_PATHS -name "Apollo.framework" -maxdepth 1)"

if [ -z "$APOLLO_FRAMEWORK_PATH" ]; then
echo "error: Couldn't find Apollo.framework in FRAMEWORK_SEARCH_PATHS; make sure to add the framework to your project."
exit 1
fi

cd "${SRCROOT}/${TARGET_NAME}"
$APOLLO_FRAMEWORK_PATH/check-and-run-apollo-codegen.sh generate "$(find . -name '*.graphql')" --schema=schema.json --output API.swift
相關文章
相關標籤/搜索