?????? ??? ??? ??? ?? ?? RESTful API? ? ?? ?? ???? ?? ??? ??? ? ????. ??? ? ???? API? ??? ???? ?? ? ??? ??? ??? ????? ??? ?? ??? ???? ???? ????? ?? ???? ??? ??? ?? ???? ????. ??? ?? ??.
GraphQL? ??? ??? ??? ?????. ???? ??? ???? ?? ?? ????? ?? ? ?? ??? ??? API ?? ?? ? ??????. RESTful API? ?? GraphQL? ??? ???? ???? ???? ????? ?????? ??? ???? ??? ???? ??? ? ???? ??? ???? ?? ??? ?????.
PHP ???? ThinkPHP6? ?? ?? ?????, ???, ??? ? ?????? ??? ?? ? ?? ??? ??? ???? ?? ?? ? ????????. ?? ???? ThinkPHP6?? GraphQL? ???? ??? ???????.
Installation
???? ?? PHP? Composer? ???? ??? ???? ThinkPHP6 ????? ?? ??? ???? ???. ???? ????? GraphQL? ???? ???.
composer require overblog/graphql-bundle:^0.12.17
Configuration
GraphQL? ??? ? ThinkPHP6 ?? ??? ? ?? ??? ??? ???? ???. config/app.php
??? ?? providers
??? ?? ?? GraphQL ServiceProvider? ?????. config/app.php
文件,找到 providers
數(shù)組,添加 GraphQL ServiceProvider:
'providers' => [ // ... OverblogGraphQLBundleGraphQLBundleServiceProvider::class, ]
接下來,我們需要定義 GraphQL 的路由,它將指向我們的 GraphQL 查詢控制器。這里我們可以使用一個獨立的路由文件 route/graphql.php
,它返回一個路由列表:
<?php use thinkacadeRoute; Route::any('/graphql', 'graphql/index')->name('graphql');
其中,graphql/index
指向我們的 GraphQL 查詢控制器。
控制器
現(xiàn)在我們需要創(chuàng)建 GraphQL 控制器,它將負責(zé)處理所有 GraphQL 查詢和突變。我們創(chuàng)建一個 appcontrollerGraphql.php
文件,定義一個空類 Graphql
,并繼承 OverblogGraphQLBundleControllerController
:
<?php namespace appcontroller; use OverblogGraphQLBundleControllerController; class Graphql extends Controller { // }
在這個類中,我們需要定義一些方法來處理 GraphQL 查詢和突變。在 PHP 中,我們可以使用注解來定義這些方法的操作。因此,我們需要添加注解支持。這里使用 doctrine/annotations
庫,使用 Composer 安裝:
composer require doctrine/annotations:^1.13.1
現(xiàn)在我們需要在 ThinkPHP6 中配置注解。打開 config/app.php
文件,編輯 providers
數(shù)組,添加 DoctrineCommonAnnotationsAnnotationReader
類:
'providers' => [ // ... DoctrineCommonAnnotationsAnnotationReader::class, ]
在控制器中,我們可以定義一個 @Route
注解來指定 GraphQL 查詢的路由地址,以及一個 @ParamConverter
注解來自動轉(zhuǎn)換查詢參數(shù)等信息。例如,我們定義一個簡單的查詢方法:
use OverblogGraphQLBundleAnnotation as GQL; /** * @GQLType(type="MySchema") * @GQLQueryList() */ public function index() { return []; }
其中,@Type
注解指定了返回值類型,@QueryList
注解指定這個方法是一個查詢方法。這里返回空數(shù)組,方便測試。接下來,我們需要定義圖形查詢模式。
模式
在模式中,我們定義了 GraphQL 的圖形方案。我們使用 GraphQL
類創(chuàng)建它,并使用 @Object
, @Route
和 @Field
注解定義類型、方法和字段。例如,我們假設(shè)我們要查詢一個用戶列表,定義一個 UserQuery
類:
use GraphQLTypeDefinitionObjectType; use OverblogGraphQLBundleAnnotation as GQL; /** * @GQLType(type="query") */ class UserQuery extends ObjectType { /** * @GQLField(type="[User]", name="users") */ protected function getUsers() { return // return data from database or service; } }
這里我們使用 GraphQLTypeDefinitionObjectType
類作為 UserQuery 的基類,它定義了查詢的字段和返回類型。我們添加了一個 getUsers
方法,它將返回一個用戶列表。我們還添加了一個 @Field
注解,它指定了這個字段的類型和名稱。在這個例子中,我們返回的是一個列表的用戶類型。
這里,我們使用 type="[User]"
指定了用戶類型,它與定義用戶類型的方式有關(guān)。我們還可以寫一個 User
類型,具體定義方式可以參考 GitHub 上的 overblog/graphql-bundle
文檔。
查詢
現(xiàn)在我們已經(jīng)定義了控制器和模式,我們可以通過瀏覽器訪問我們的 GraphQL Endpoint,我們的請求地址是 http://project.com/graphql?query={users{id,name}}
。這里我們使用 POST 請求,傳遞查詢參數(shù):
{ "query": "{users{id,name}}" }
這個請求將返回一個 JSON 格式的數(shù)據(jù),其中包含了 ID 和名稱等信息。它的格式類似于這樣:
{ "data": { "users": [ { "id": 1, "name": "Alice" }, { "id": 2, "name": "Bob" } ] } }
我們還可以使用變量來傳遞參數(shù)。例如,我們想要查詢用戶 ID 為 1 的詳細信息:
{ "query": "query GetUser($id:Int){user(id:$id){id,name,email}}", "variables": {"id":1} }
這將返回用戶 ID、名稱和電子郵件地址等詳細信息。這里我們使用了一個 $
符號來傳遞參數(shù),它指定了我們要查詢用戶的 ID。我們使用 variables
rrreee
route/graphql.php
? ??? ? ????. ??rrreee?? ?? graphql/index
? GraphQL ?? ????? ?????. . ????Controller?????? ?? GraphQL ??? ??? ???? GraphQL ????? ???? ???. appcontrollerGraphql.php
??? ????, ? ??? Graphql
? ????, OverblogGraphQLBundleControllerController
?? ?????. ??rrreee??? ?????? ??? ???? ???. GraphQL ?? ? ??? ???? ? ?? ??? ?????. PHP??? ??? ???? ??? ???? ??? ??? ? ????. ??? ?? ??? ???? ???. ???? doctrine/annotations
?????? ???? Composer? ???? ?????. ??rrreee???? ThinkPHP6?? ??? ???? ???. config/app.php
??? ?? providers
??? ??? ?? DoctrineCommonAnnotationsAnnotationReader
???? ?????. ??rrreee???????? ??? ??? ? ????. GraphQL ??? ??? ??? ????? @Route
??? ????, ?? ???? ? ?? ??? ???? ????? @ParamConverter
??? ?????. ?? ?? ??? ?? ??? ?? ???? ?????. ??rrreee?? ? ? @Type
??? ?? ? ??? ???? @QueryList
??? ? ???? ?? ??. ???? ???? ?? ?? ???? ? ??? ?????. ???? ??? ?? ??? ???? ???. ????Patterns????????? GraphQL? ??? ???? ?????. GraphQL
???? ???? ???? @Object
, @Route
? @Field
??? ???? ??? ???? ?????. ??? ??. ?? ??, ??? ??? ???? UserQuery
???? ????? ?????. ??rrreee??????? GraphQLTypeDefinitionObjectType
???? UserQuery? ?? ???? ?????. ?? ? ?? ??? ??? ?????. ??? ??? ???? getUsers
???? ??????. ?? ? ??? ??? ??? ???? @Field
??? ??????. ? ???? ??? ?? ??? ?????. ??????? type="[User]"
? ???? ??? ??? ?????, ?? ??? ??? ???? ??? ?????. User
??? ??? ?? ????. ???? ?? ??? GitHub? overblog/graphql-bundle
??? ?????. ????Query?????? ????? ???? ??????? ????? ?? GraphQL ?????? ???? ? ????. ?? ??? http://project.com/graphql?query={users{id ,name???. }}
. ???? POST ??? ???? ?? ????? ?????. ??rrreee??? ??? ID ? ??? ?? ??? ??? JSON ??? ???? ?????. ??? ??? ?????. ??rrreee?? ??? ???? ????? ??? ?? ????. ?? ?? ??? ID 1? ?? ??? ????? ???. ??rrreee?? ??? ?? ??? ID, ??, ??? ??? ?? ?? ??? ?????. ???? $
??? ???? ????? ???? ID? ???? ????? ?????. ?? ??? ?? ????? ???? ?? variables
???? ???? ?? ??? ?????. ????
? ???? ThinkPHP6 ??????? GraphQL? ???? ??? ??????. ?? GraphQL? ??? ??? ??? ? ??? ???? ???? ???? ??????. ???? ??? ?? ??? ???? ??? ???? ?? ??? ??? ?????. ????? GraphQL? ??? ?? ???? ???? GraphQL? ???? ???? ???? ???? ??? ???????. ?? ????? ??? ?? GraphQL ??? ??? ??? ???? ?? ??? ??? ?? ??? ??? ? ????.
? ??? ThinkPHP6?? GraphQL ????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

foobar2000? ???? ?? ???? ?? ? ?? ????????. ?? ??? ??? ??? ??? ?????. ?? ????? ??? ??? ???? ?? ????? ??? ?? ??? ?? ? ????. ????? ?? ???? ?????. ? ??? ?? ???? ???? ?? ?? ??? ?????. ????? ???? ???? ???? ???? ????. ?? ??? ??? ??? ????, ??? ???? ?? ??? ?????, ??? ??? ??? ??? ???? ?? ?? ????? ?????. ?? ??? ???? ??? ?? ??? ?????. ??? ???? ?? ?? ??? ????? ??? ?? ??? ?? ??????. ??? ?? ????

CrystalDiskMark? ?? ? ??? ??/?? ??? ??? ???? ?? ????? ?? HDD ???? ?????. ???? ?????? CrystalDiskMark ??? crystaldiskmark ???? ???????~ 1. CrystalDiskMark ?? CrystalDiskMark? ??? ?? ????? ??? ???? ????(SSD)? ?? ? ?? ??? ??? ???? ? ?? ???? ??? ?? ??? ?????. ). ??? I/O ??. ?? Windows ?? ?????? ??? ???? ?????? ??? ??? ??? ???? ?? ???? ??? ??? ??? ???? ???? ??? ?? ?????.

??? ???? ????? ??? ?? ??? ??? ???? ? ? ??? ?????. ?? ??? ???? ???? ??? ? ??? Baidu Netdisk? ??? ???? ??, ???? ?? ?? ? ??? ?? ???? ?? ???? ??? ?????. ??? ??? ????, ??? ????, ????? ???? ????, ??? ?? ?? ?? Baidu Cloud Disk? ??? ??? ??? ? ????. ??? ?? ???? Baidu Netdisk ?? ???? ?? ??? ???? ?? ? ???? ? ??????? Baidu Netdisk ? ?? ??? ??? ?????. Baidu ???? ???? ??? ?? ??: 1. ?? ?? Baidu Cloud ?????? ?????? ??? ? ??? ?? ?? ??? ??????.

ThinkPHP ????? ????? ??? ?????: Composer? ????, ???? ????? ???? php bin/console? ????, ?? ???? ??? http://localhost:8000? ?????.

MetaMask(???? Little Fox Wallet???? ?)? ???? ??? ?? ??? ?? ????????. ?? BTCC? MetaMask ??? ?? ???? ?????. ??? ? MetaMask ??? ???? ??? ????? ??? ???? ??? ??? ? ??? ? ????? 20 USDT ??? ???? ?? ? ????. BTCCMetaMask ?? ??????? MetaMask ?? ? ?? ??, BTCC?? Little Fox ??? ????? ???? ??? ??? ?????. MetaMask ???? ?????? 3?? ? ??? ???? ??? MetaMask Little Fox Wallet? ??? ?? ?? ?? ???? ?? ? ?????. ??? ??? ? ??? ???? ????? ??? ? ????.

NetEase Mailbox? ?? ????? ?? ???? ??? ???, ????? ???? ???? ?? ????? ??? ?? ????. NetEase Mailbox Master? ??? ???? ?? ??? ??? ??? ?????? ??? ??? ? ?? ????? ?? ????? ??? ??? ?? ???? ????. ??? NetEase Mailbox Master? ???? ??? ? ??? ???? ???? ? ???? ???? ??? ??? ???? ??? ?? ????! ??, ??? ?????? NetEase Mailbox Master ?? ???? ?????? ? ????. App Store ?? Baidu Mobile Assistant?? "NetEase Mailbox Master"? ??? ? ??? ?? ?????. ???? ? ??? ???? NetEase ??? ??? ?? ??????. ??? ?????? ??? ????.

ThinkPHP?? ??? PHP ????? ??? ?? ??? ????. ??? ???? 3.2, 5.0, 5.1, 6.0? ????, ??? ??? ??? ???? ??? ??? ???? ? ?????. ?? ?? ??? ThinkPHP 6.0.16???. ??? ??? ? PHP ??, ?? ?? ?? ? ???? ??? ??????. ??? ??? ??? ???? ?? ?? ??? ???? ?? ????.

ThinkPHP Framework? ???? ???? ??: ThinkPHP Framework? ?? ????? ?????? ??? ???. ThinkPHP ?? ????? ???? ?? ???(?? ??)? ????. ?????? ?? ????? ?????. ? ??? ?????. ThinkPHP ??????? ??????. ThinkPHP ?????? URL? ???? ?????.
