萬里長征行軍難,千山萬水只等閑。
GraphQL 是一個用于 API 的查詢語言,是一個使用基于類型系統(tǒng)來執(zhí)行查詢的服務(wù)端運(yùn)行時(類型系統(tǒng)由你的數(shù)據(jù)定義)。GraphQL 并沒有和任何特定數(shù)據(jù)庫或者存儲引擎綁定,而是依靠你現(xiàn)有的代碼和數(shù)據(jù)支撐。
GraphQL 規(guī)范特意忽略了一些面向 API 的重要問題,例如處理網(wǎng)絡(luò)、授權(quán)和分頁。這并不意味著在使用 GraphQL 時沒有針對這些問題的解決方案,只是因為它們并非 GraphQL 定義中的一部分,可代以工程上通行的做法來實現(xiàn)。
那么使用GraphQL有什么好處呢?
1.一次查詢,搞定需求,在單個請求中獲取許多資源
2.版本之間不會相互影響,版本兼容so easy
3.數(shù)據(jù)請求無冗余、無冗余、無冗余
4.客戶端自定義數(shù)據(jù)格式,這也算無冗余的原因
5.描述類型系統(tǒng)的可能性
6.功能強(qiáng)大的開發(fā)人員工具
7.不同平臺可以獲取不同數(shù)據(jù),不會相互影響
缺點(diǎn)呢
1.缺乏適當(dāng)?shù)闹虚g件結(jié)構(gòu)
2.學(xué)習(xí)成本及接手成本
作為一個小兵就要不考慮用不用的問題啦,下面我們介紹一下iOS 的Apollo框架吧。
1、配置電腦環(huán)境,方便之后的生成API
安裝 node
brew install node
安裝apollo
npm install -g apollo
2、cocoapods 導(dǎo)入最新版Apollo(0.16.0)
3、自動生成API控制
在項目TARGETS目錄下的Build Phases欄目下新建運(yùn)行環(huán)境
點(diǎn)擊+號,選擇 New Run Script Phase.
之后修改名稱為 Generate Apollo GraphQL API 。

??:一定要將Generate Apollo GraphQL API 環(huán)境拉到Complie Sources 上面

然后在Shell命令行里面輸入如下代碼
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-cli.sh
codegen:generate --queries="$(find . -name '*.graphql')" --
passthroughCustomScalars --schema=schema.json API.swift
SCRIPT_PATH="${PODS_ROOT}/Apollo/scripts"
cd "${SRCROOT}/${TARGET_NAME}"
"${SCRIPT_PATH}"/run-bundled-codegen.sh
codegen:generate --target=swift --includes=./**/*.graphql --
localSchemaFile="schema.json" API.swift

這樣會自動生成API.swift
再進(jìn)行Schema 下載
apollo schema:download --endpoint=http://localhost/graphql schema.json
輸入服務(wù)器的endpoint進(jìn)行下載schema.json文件
然后把schema.json和*.graphql文件導(dǎo)入項目根目錄,盡量在文件比較多的地方。
.graphql里面存放的則是你的查詢語句,Xcode會根據(jù)查詢語句自動生成查詢代碼,方便調(diào)用。

然后運(yùn)行項目即可,在項目目錄里面找到生成的API.swift拉到項目中,每次運(yùn)行都會更新API里面的內(nèi)容。所以不要修改API里面的內(nèi)容,因為修改也沒用,每次都會更新。在項目調(diào)試階段打開自動生成,在項目調(diào)試完成后可以關(guān)閉。這樣就不會更新API了。