摘要:代碼示例產(chǎn)品列表和用戶列表的例子昨天我們學(xué)習(xí)了在中搭建環(huán)境,現(xiàn)在我們來學(xué)習(xí)的??梢蕴嵘{(diào)用的靈活性,我們可以像寫數(shù)據(jù)庫查詢語句一樣來請求來獲取所需要的數(shù)據(jù),這對構(gòu)建復(fù)雜的查詢來說非常有用。
代碼示例:產(chǎn)品列表和用戶列表的 API 例子
昨天我們學(xué)習(xí)了?在 Visual Code 中搭建 Laravel 環(huán)境,現(xiàn)在我們來學(xué)習(xí) Facebook 的 GraphQL 。
GraphQL 是一種 API 查詢語言,還是一種根據(jù)你為數(shù)據(jù)定義的類型系統(tǒng)執(zhí)行查詢的服務(wù)器端運(yùn)行時(shí)。GraphQL 不依賴于任何指定的數(shù)據(jù)庫或存儲(chǔ)引擎,而是由你的代碼和數(shù)據(jù)來作支持的。?graphql.org
GraphQL?可以提升 API 調(diào)用的靈活性,我們可以像寫數(shù)據(jù)庫查詢語句一樣來請求 API 來獲取所需要的數(shù)據(jù),這對構(gòu)建復(fù)雜的 API 查詢來說非常有用。GraphQL 還提供了可視化界面來幫助我們編寫查詢語句,還提供了自動(dòng)補(bǔ)全的功能,這讓編寫查詢更加簡單。
https://github.com/graphql/gr...
從以下圖片可以看出,GraphQL 和 Rest 一樣都是運(yùn)行在業(yè)務(wù)邏輯層以外的:
開始 1. 安裝?Laravel使用下面命令安裝最新版本的 Laravel :
# 在命令行中執(zhí)行 composer global require "laravel/installer" laravel new laravel-graphql2. 添加?GraphQL 的包
使用 composer 安裝?graphql-laravel,這個(gè)包提供了非常多的功能用于整合 Laravel 和 GraphQL 。
3. 創(chuàng)建模型像下面這樣創(chuàng)建模型和表?user_profiles,?products,?product_images,別忘了還要?jiǎng)?chuàng)建模型間的關(guān)系。
4. 創(chuàng)建查詢和定義 GraphQL 的類型GraphQL 中的查詢與 Restful API 中的末端路徑查詢是一樣的,查詢只是用于獲取數(shù)據(jù),以及創(chuàng)建、更新、刪除操作。我們把它稱作 Mutation 。
GraphQL 中的 類型 用于定義查詢中每個(gè)字段的類型定義,類型會(huì)幫助我們格式化查詢結(jié)果中的有格式的字段,例如布爾類型,字符串類型,浮點(diǎn)類型,整數(shù)類型等等,以及我們的自定義類型。下面是查詢和類型的目錄結(jié)構(gòu):
這是 UsersQuery.php?和?UsersType.php 文件完整的源代碼:
"Users Query", "description" => "A query of users" ]; public function type() { // 帶分頁效果的查詢結(jié)果 return GraphQL::paginate("users"); } // 過濾查詢的參數(shù) public function args() { return [ "id" => [ "name" => "id", "type" => Type::int() ], "email" => [ "name" => "email", "type" => Type::string() ] ]; } public function resolve($root, $args, SelectFields $fields) { $where = function ($query) use ($args) { if (isset($args["id"])) { $query->where("id",$args["id"]); } if (isset($args["email"])) { $query->where("email",$args["email"]); } }; $user = User::with(array_keys($fields->getRelations())) ->where($where) ->select($fields->getSelect()) ->paginate(); return $user; } }
"Users", "description" => "A type", "model" => User::class, // 定義用戶類型的數(shù)據(jù)模型 ]; // 定義字段的類型 public function fields() { return [ "id" => [ "type" => Type::nonNull(Type::int()), "description" => "The id of the user" ], "email" => [ "type" => Type::string(), "description" => "The email of user" ], "name" => [ "type" => Type::string(), "description" => "The name of the user" ], // 數(shù)據(jù)模型 user_profiles 中的關(guān)聯(lián)字段 "user_profiles" => [ "type" => GraphQL::type("user_profiles"), "description" => "The profile of the user" ] ]; } protected function resolveEmailField($root, $args) { return strtolower($root->email); } }
在編寫完查詢語句和類型之后,我們需要編輯 config/graphql.php 文件,將查詢語句和類型注冊到 Schema 中。
"graphql", "routes" => "query/{graphql_schema?}", "controllers" => RebingGraphQLGraphQLController::class . "@query", "middleware" => [], "default_schema" => "default", // 注冊查詢命令 "schemas" => [ "default" => [ "query" => [ "users" => UsersQuery::class, "products" => ProductsQuery::class, ], "mutation" => [ ], "middleware" => [] ], ], // 注冊類型 "types" => [ "product_images" => ProductImagesType::class, "products" => ProductsType::class, "user_profiles" => UserProfilesType::class, "users" => UsersType::class, ], "error_formatter" => ["RebingGraphQLGraphQL", "formatError"], "params_key" => "params" ];5. Testing
我們可以使用?GraphiQL?來十分簡單地編寫查詢語句,因?yàn)樵诰帉懙臅r(shí)候它可以自動(dòng)補(bǔ)全,或者我們也可以使用 postman 來請求 API,下面是自動(dòng)補(bǔ)全的示例:
下面是查詢結(jié)果的示例
如果你想查閱源代碼,可以訪問以下地址 :)。
https://github.com/ardani/lar...
轉(zhuǎn)自 PHP / Laravel 開發(fā)者社區(qū) https://laravel-china.org/top...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29969.html
摘要:通過對比各項(xiàng)目過去個(gè)月在上新增數(shù)量,來評估其在年度的受關(guān)注程度,進(jìn)而選出年度領(lǐng)域崛起的明星項(xiàng)目。也許正因?yàn)樯鲜鲎詈笠稽c(diǎn),在中國擁有大量的擁躉。不僅被中國最大的電商平臺(tái)阿里巴巴使用,也獲得了與這些公司青睞。 共 4741 字,讀完需 8 分鐘,速讀 2 分鐘。我有幸參與了該項(xiàng)目的部分中文版翻譯、校對工作,感謝 Sacha Grief,Micheal Ramberu 的統(tǒng)計(jì)整理,以及 Fr...
showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區(qū)優(yōu)秀文章 Laravel 5.5+passport 放棄 dingo 開發(fā) API 實(shí)戰(zhàn),讓 API 開發(fā)更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項(xiàng)目中使用 - API 文檔撰寫方案 推薦 Laravel API 項(xiàng)目必須使用的 8 個(gè)...
摘要:以下內(nèi)容來自我特別喜歡的一個(gè)頻道這是一個(gè)年你成為前端,后端或全棧開發(fā)者的進(jìn)階指南你不需要學(xué)習(xí)所有的技術(shù)成為一個(gè)開發(fā)者這個(gè)指南只是通過簡單分類列出了技術(shù)選項(xiàng)我將從我的經(jīng)驗(yàn)和參考中給出建議首選我們會(huì)介紹通用的知識(shí)最后介紹年的的一些趨勢基礎(chǔ)前端開 以下內(nèi)容來自我特別喜歡的一個(gè)Youtube頻道: Traversy Media 這是一個(gè)2019年你成為前端,后端或全棧開發(fā)者的進(jìn)階指南: 你...
最近寫了一個(gè)node項(xiàng)目,主要使用到的技術(shù)有: koa2 // nodejs 框架 koa-router // koa路由 graphql // 查詢api typescript // 強(qiáng)類型語言 jwt // 授權(quán) typeorm // typescript的一個(gè)orm mysql2 // 內(nèi)容數(shù)據(jù)庫 mongodb // 日志存儲(chǔ)數(shù)據(jù)庫 redis // 服務(wù)器緩存 項(xiàng)目結(jié)構(gòu):sh...
閱讀 2331·2021-11-23 10:09
閱讀 2898·2021-10-12 10:11
閱讀 2605·2021-09-29 09:35
閱讀 1346·2019-08-30 15:53
閱讀 2272·2019-08-30 11:15
閱讀 2916·2019-08-29 13:01
閱讀 2300·2019-08-28 18:15
閱讀 3369·2019-08-26 12:13