Rumah > Artikel > rangka kerja php > Menggunakan GraphQL dalam ThinkPHP6
Dengan populariti pemisahan bahagian hadapan dan belakang, API RESTful tradisional tidak lagi dapat memenuhi keperluan Internet moden. Masalahnya ialah API setiap sumber perlu direka secara berasingan, dan setiap permintaan hanya akan mengembalikan struktur tetap, yang membawa kepada sejumlah besar permintaan dan data yang berlebihan, dan program menjadi sangat rumit, yang tidak kondusif untuk pembangunan. dan penyelenggaraan.
Kemunculan GraphQL menyelesaikan masalah ini Ia adalah jenis bahasa pertanyaan API dan masa jalan yang berkesan dapat mengurangkan jumlah penghantaran data rangkaian dan bilangan permintaan. Tidak seperti API RESTful, GraphQL memproses data dengan mentakrifkan jenis dan skema, yang membolehkan pelanggan meminta dengan tepat data dan jenis yang mereka perlukan, dengan itu meningkatkan kecekapan data dan kelajuan tindak balas.
Dalam pembangunan PHP, ThinkPHP6 ialah rangka kerja web popular yang menyediakan beberapa ciri berkuasa seperti pengaturcaraan berorientasikan objek, penghalaan, templat dan operasi pangkalan data. Dalam artikel ini, kami akan memperkenalkan cara menggunakan GraphQL dalam ThinkPHP6.
Sebelum kita mula, kita perlu memastikan PHP dan Komposer dipasang dan biasa dengan struktur asas projek ThinkPHP6. Seterusnya, kami perlu memperkenalkan GraphQL ke dalam projek:
composer require overblog/graphql-bundle:^0.12.17
Selepas memperkenalkan GraphQL, kami perlu menambah beberapa tetapan yang diperlukan dalam fail konfigurasi ThinkPHP6. Buka fail config/app.php
, cari tatasusunan providers
dan tambahkan GraphQL ServiceProvider:
'providers' => [ // ... OverblogGraphQLBundleGraphQLBundleServiceProvider::class, ]
Seterusnya, kami perlu menentukan laluan GraphQL yang akan menghala ke pengawal pertanyaan GraphQL kami. Di sini kita boleh menggunakan fail laluan kendiri route/graphql.php
, yang mengembalikan senarai laluan:
<?php use thinkacadeRoute; Route::any('/graphql', 'graphql/index')->name('graphql');
di mana graphql/index
menunjuk ke pengawal pertanyaan GraphQL kami.
Kini kita perlu mencipta pengawal GraphQL, yang akan bertanggungjawab untuk mengendalikan semua pertanyaan dan mutasi GraphQL. Kami mencipta fail appcontrollerGraphql.php
, mentakrifkan kelas kosong Graphql
dan mewarisi daripada OverblogGraphQLBundleControllerController
:
<?php namespace appcontroller; use OverblogGraphQLBundleControllerController; class Graphql extends Controller { // }
Dalam kelas ini, kami perlu menentukan beberapa kaedah untuk mengendalikan pertanyaan dan mutasi GraphQL. Dalam PHP, kita boleh menggunakan anotasi untuk menentukan operasi kaedah ini. Oleh itu, kita perlu menambah sokongan anotasi. Pustaka doctrine/annotations
digunakan di sini dan dipasang menggunakan Komposer:
composer require doctrine/annotations:^1.13.1
Sekarang kita perlu mengkonfigurasi anotasi dalam ThinkPHP6. Buka fail config/app.php
, edit tatasusunan providers
dan tambah kelas DoctrineCommonAnnotationsAnnotationReader
:
'providers' => [ // ... DoctrineCommonAnnotationsAnnotationReader::class, ]
Dalam pengawal, kita boleh mentakrifkan anotasi @Route
untuk menentukan alamat penghalaan pertanyaan GraphQL , dan @ParamConverter
Anotasi untuk menukar parameter pertanyaan dan maklumat lain secara automatik. Sebagai contoh, kami mentakrifkan kaedah pertanyaan mudah:
use OverblogGraphQLBundleAnnotation as GQL; /** * @GQLType(type="MySchema") * @GQLQueryList() */ public function index() { return []; }
Antaranya, anotasi @Type
menentukan jenis nilai pulangan, dan anotasi @QueryList
menentukan bahawa kaedah ini ialah kaedah pertanyaan. Tatasusunan kosong dikembalikan di sini untuk memudahkan ujian. Seterusnya, kita perlu menentukan corak pertanyaan graf.
Dalam skema, kami mentakrifkan skema graf GraphQL. Kami menciptanya menggunakan kelas GraphQL
dan mentakrifkan jenis, kaedah dan medan menggunakan anotasi @Object
, @Route
dan @Field
. Sebagai contoh, mari kita anggap bahawa kita ingin menanyakan senarai pengguna, tentukan kelas 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; } }
Di sini kita menggunakan kelas GraphQLTypeDefinitionObjectType
sebagai kelas asas UserQuery, yang mentakrifkan medan dan jenis pulangan daripada pertanyaan itu. Kami menambah kaedah getUsers
yang akan mengembalikan senarai pengguna. Kami juga menambahkan anotasi @Field
, yang menentukan jenis dan nama medan ini. Dalam contoh ini, kami mengembalikan senarai jenis pengguna.
Di sini, kami menentukan jenis pengguna menggunakan type="[User]"
, yang berkaitan dengan cara jenis pengguna ditakrifkan. Kami juga boleh menulis jenis User
Untuk definisi khusus, sila rujuk dokumen overblog/graphql-bundle
di GitHub.
Sekarang kami mempunyai pengawal dan skema yang ditentukan, kami boleh mengakses Titik Akhir GraphQL kami melalui penyemak imbas, dan alamat permintaan kami ialah http://project.com/graphql?query={users{id,name}}
. Di sini kami menggunakan permintaan POST dan lulus parameter pertanyaan:
{ "query": "{users{id,name}}" }
Permintaan ini akan mengembalikan data dalam format JSON, yang mengandungi maklumat seperti ID dan nama. Formatnya adalah serupa dengan ini:
{ "data": { "users": [ { "id": 1, "name": "Alice" }, { "id": 2, "name": "Bob" } ] } }
Kami juga boleh menggunakan pembolehubah untuk menghantar parameter. Sebagai contoh, kami ingin menanyakan butiran ID pengguna 1:
{ "query": "query GetUser($id:Int){user(id:$id){id,name,email}}", "variables": {"id":1} }
Ini akan mengembalikan butiran seperti ID pengguna, nama dan alamat e-mel. Di sini kami menggunakan simbol $
untuk menghantar parameter, yang menentukan ID pengguna yang ingin kami tanyakan. Kami menggunakan kata kunci variables
untuk mentakrifkan pembolehubah sebenar, sekali gus menyediakan parameter pertanyaan yang lebih tepat.
Dalam artikel ini, kami memperkenalkan cara menggunakan GraphQL dalam rangka kerja ThinkPHP6. Mula-mula, kami membentangkan latar belakang dan faedah GraphQL, kemudian memasang pakej yang diperlukan dan penghalaan yang dikonfigurasikan. Seterusnya, kami mentakrifkan contoh pertanyaan mudah dan menggunakan anotasi untuk menentukan jenis dan operasinya. Akhir sekali, kami memperkenalkan pembolehubah dan kaedah pertanyaan GraphQL, menunjukkan cara menggunakan GraphQL untuk membuat pertanyaan dan memproses data. Dalam pembangunan sebenar, kami boleh menyesuaikan jenis dan operasi GraphQL mengikut keperluan untuk mencapai gelagat dan fungsi pertanyaan yang lebih kompleks.
Atas ialah kandungan terperinci Menggunakan GraphQL dalam ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!