摘要:代碼示例產品列表和用戶列表的例子昨天我們學習了在中搭建環境,現在我們來學習的。可以提升調用的靈活性,我們可以像寫數據庫查詢語句一樣來請求來獲取所需要的數據,這對構建復雜的查詢來說非常有用。
代碼示例:產品列表和用戶列表的 API 例子
昨天我們學習了?在 Visual Code 中搭建 Laravel 環境,現在我們來學習 Facebook 的 GraphQL 。
GraphQL 是一種 API 查詢語言,還是一種根據你為數據定義的類型系統執行查詢的服務器端運行時。GraphQL 不依賴于任何指定的數據庫或存儲引擎,而是由你的代碼和數據來作支持的。?graphql.org
GraphQL?可以提升 API 調用的靈活性,我們可以像寫數據庫查詢語句一樣來請求 API 來獲取所需要的數據,這對構建復雜的 API 查詢來說非常有用。GraphQL 還提供了可視化界面來幫助我們編寫查詢語句,還提供了自動補全的功能,這讓編寫查詢更加簡單。
https://github.com/graphql/gr...
從以下圖片可以看出,GraphQL 和 Rest 一樣都是運行在業務邏輯層以外的:
開始 1. 安裝?Laravel使用下面命令安裝最新版本的 Laravel :
# 在命令行中執行 composer global require "laravel/installer" laravel new laravel-graphql2. 添加?GraphQL 的包
使用 composer 安裝?graphql-laravel,這個包提供了非常多的功能用于整合 Laravel 和 GraphQL 。
3. 創建模型像下面這樣創建模型和表?user_profiles,?products,?product_images,別忘了還要創建模型間的關系。
4. 創建查詢和定義 GraphQL 的類型GraphQL 中的查詢與 Restful API 中的末端路徑查詢是一樣的,查詢只是用于獲取數據,以及創建、更新、刪除操作。我們把它稱作 Mutation 。
GraphQL 中的 類型 用于定義查詢中每個字段的類型定義,類型會幫助我們格式化查詢結果中的有格式的字段,例如布爾類型,字符串類型,浮點類型,整數類型等等,以及我們的自定義類型。下面是查詢和類型的目錄結構:
這是 UsersQuery.php?和?UsersType.php 文件完整的源代碼:
"Users Query", "description" => "A query of users" ]; public function type() { // 帶分頁效果的查詢結果 return GraphQL::paginate("users"); } // 過濾查詢的參數 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, // 定義用戶類型的數據模型 ]; // 定義字段的類型 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" ], // 數據模型 user_profiles 中的關聯字段 "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?來十分簡單地編寫查詢語句,因為在編寫的時候它可以自動補全,或者我們也可以使用 postman 來請求 API,下面是自動補全的示例:
下面是查詢結果的示例
如果你想查閱源代碼,可以訪問以下地址 :)。
https://github.com/ardani/lar...
轉自 PHP / Laravel 開發者社區 https://laravel-china.org/top...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29969.html
摘要:通過對比各項目過去個月在上新增數量,來評估其在年度的受關注程度,進而選出年度領域崛起的明星項目。也許正因為上述最后一點,在中國擁有大量的擁躉。不僅被中國最大的電商平臺阿里巴巴使用,也獲得了與這些公司青睞。 共 4741 字,讀完需 8 分鐘,速讀 2 分鐘。我有幸參與了該項目的部分中文版翻譯、校對工作,感謝 Sacha Grief,Micheal Ramberu 的統計整理,以及 Fr...
showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區優秀文章 Laravel 5.5+passport 放棄 dingo 開發 API 實戰,讓 API 開發更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項目中使用 - API 文檔撰寫方案 推薦 Laravel API 項目必須使用的 8 個...
摘要:以下內容來自我特別喜歡的一個頻道這是一個年你成為前端,后端或全棧開發者的進階指南你不需要學習所有的技術成為一個開發者這個指南只是通過簡單分類列出了技術選項我將從我的經驗和參考中給出建議首選我們會介紹通用的知識最后介紹年的的一些趨勢基礎前端開 以下內容來自我特別喜歡的一個Youtube頻道: Traversy Media 這是一個2019年你成為前端,后端或全棧開發者的進階指南: 你...
最近寫了一個node項目,主要使用到的技術有: koa2 // nodejs 框架 koa-router // koa路由 graphql // 查詢api typescript // 強類型語言 jwt // 授權 typeorm // typescript的一個orm mysql2 // 內容數據庫 mongodb // 日志存儲數據庫 redis // 服務器緩存 項目結構:sh...
閱讀 2306·2021-11-23 10:09
閱讀 2885·2021-10-12 10:11
閱讀 2594·2021-09-29 09:35
閱讀 1337·2019-08-30 15:53
閱讀 2261·2019-08-30 11:15
閱讀 2904·2019-08-29 13:01
閱讀 2290·2019-08-28 18:15
閱讀 3363·2019-08-26 12:13