成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在 Laravel 應(yīng)用中構(gòu)建 GraphQL API

X_AirDu / 1005人閱讀

摘要:代碼示例產(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-graphql
2. 添加?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

相關(guān)文章

  • 2017 年崛起的 JS 項(xiàng)目

    摘要:通過對比各項(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...

    gaara 評論0 收藏0
  • PHP / Laravel API 開發(fā)推薦閱讀清單

    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è)...

    shmily 評論0 收藏0
  • 2019 - Web開發(fā)技術(shù)指南和趨勢

    摘要:以下內(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)階指南: 你...

    sourcenode 評論0 收藏0
  • koa2 + graphql + typescript + jwt + typeorm的nodejs

    最近寫了一個(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...

    Dogee 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<