您好,登錄后才能下訂單哦!
要在ThinkPHP(TP)框架中集成GraphQL,你需要遵循以下步驟:
首先,你需要為PHP安裝GraphQL庫(kù)。我們將使用webonyx/graphql-php庫(kù)。通過(guò)Composer安裝此庫(kù):
composer require webonyx/graphql-php
接下來(lái),你需要定義GraphQL schema,它描述了你的API的數(shù)據(jù)類型和可用查詢。創(chuàng)建一個(gè)名為schema.graphql
的文件,并添加以下內(nèi)容:
type Query {
echo(message: String!): String
}
這個(gè)簡(jiǎn)單的schema定義了一個(gè)echo
查詢,它接受一個(gè)字符串參數(shù)message
,并返回一個(gè)字符串。
現(xiàn)在,你需要實(shí)現(xiàn)echo
查詢的解析器。在你的項(xiàng)目中創(chuàng)建一個(gè)新的文件夾,例如graphql
,然后創(chuàng)建一個(gè)名為resolvers.php
的文件。在這個(gè)文件中,添加以下內(nèi)容:
<?php
use GraphQL\Type\Definition\ResolveInfo;
function resolveEcho($rootValue, $args, $context, ResolveInfo $info)
{
return $args['message'];
}
這個(gè)函數(shù)將處理echo
查詢的解析。
現(xiàn)在,你需要?jiǎng)?chuàng)建一個(gè)GraphQL服務(wù)器,它將處理客戶端發(fā)送的GraphQL請(qǐng)求。在graphql
文件夾中創(chuàng)建一個(gè)名為server.php
的文件,并添加以下內(nèi)容:
<?php
require_once 'vendor/autoload.php';
require_once 'resolvers.php';
use GraphQL\GraphQL;
use GraphQL\Type\Schema;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
$queryType = new ObjectType([
'name' => 'Query',
'fields' => [
'echo' => [
'type' => Type::string(),
'args' => [
'message' => Type::nonNull(Type::string()),
],
'resolve' => 'resolveEcho',
],
],
]);
$schema = new Schema([
'query' => $queryType,
]);
$rawInput = file_get_contents('php://input');
$input = json_decode($rawInput, true);
$query = $input['query'];
$variableValues = isset($input['variables']) ? $input['variables'] : null;
try {
$result = GraphQL::executeQuery($schema, $query, null, null, $variableValues);
$output = $result->toArray();
} catch (\Exception $e) {
$output = [
'errors' => [
[
'message' => $e->getMessage(),
],
],
];
}
header('Content-Type: application/json');
echo json_encode($output);
最后,你需要配置ThinkPHP的路由,以便將GraphQL請(qǐng)求指向剛剛創(chuàng)建的服務(wù)器。打開(kāi)application/route.php
文件,并添加以下內(nèi)容:
<?php
use think\facade\Route;
Route::post('graphql', function () {
require_once 'graphql/server.php';
});
現(xiàn)在,你已經(jīng)在ThinkPHP框架中集成了GraphQL。你可以通過(guò)發(fā)送POST請(qǐng)求到/graphql
端點(diǎn)來(lái)測(cè)試你的GraphQL API。例如,使用以下請(qǐng)求體:
{
"query": "query { echo(message: \"Hello, world!\") }"
}
你應(yīng)該會(huì)收到以下響應(yīng):
{
"data": {
"echo": "Hello, world!"
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。