Rumah pembangunan bahagian belakang tutorial php Laksanakan pertanyaan dan manipulasi data API yang cekap menggunakan PHP dan GraphQL

Laksanakan pertanyaan dan manipulasi data API yang cekap menggunakan PHP dan GraphQL

Jun 25, 2023 am 11:23 AM
php api graphql

Dengan perkembangan berterusan teknologi Internet, API telah menjadi cara penting untuk pelbagai perisian untuk berkomunikasi antara satu sama lain. API boleh menyediakan antara muka data bersatu supaya perisian yang berbeza boleh mengakses dan menggunakan antara satu sama lain. Walau bagaimanapun, apabila bilangan dan skala API terus meningkat, cara mengendalikan pertanyaan dan pengendalian data API dengan cepat dan cekap telah menjadi isu penting.

Dalam masalah ini, PHP dan GraphQL boleh memberikan penyelesaian yang sangat berkesan. Artikel ini akan memberikan beberapa pengenalan ringkas dan analisis penyelesaian ini.

Gambaran Keseluruhan PHP

PHP ialah bahasa skrip sumber terbuka tujuan umum, terutamanya sesuai untuk pembangunan web dan boleh dibenamkan dalam HTML. Tidak seperti bahasa pengaturcaraan lain, sintaks PHP agak mudah untuk dimulakan, jadi ia telah menjadi bahasa pilihan bagi ramai pemula. Pada masa yang sama, PHP juga mempunyai keupayaan pengaturcaraan yang kuat dan boleh mengendalikan pelbagai tugas yang kompleks dengan mudah.

Kebaikan dan Kelemahan PHP

Kebaikan PHP termasuk:

  • Mudah dimulakan: Sintaks PHP agak mudah dan ramai pemula boleh bermula dengan cepat.
  • Penggunaan merentas platform: PHP boleh dijalankan pada kebanyakan sistem pengendalian, termasuk Windows, Linux, MacOS, dll.
  • Sokong sumber terbuka: PHP ialah projek sumber terbuka sepenuhnya dengan komuniti yang besar dan pembangun aktif.
  • Skala yang baik: PHP boleh menggunakan pelbagai sambungan untuk meningkatkan fungsinya, seperti sambungan MySQL, sambungan SOAP, dsb.
  • Boleh dibenamkan dalam HTML: PHP boleh dibenamkan dalam HTML untuk memudahkan pembangunan web.

Kelemahan PHP termasuk:

  • Kebolehbacaan kod yang lemah: Kod PHP biasanya padat dan tidak boleh dibaca seperti bahasa lain.
  • Prestasi terhad: Terhad oleh sifat tafsiran dinamiknya, prestasi PHP agak rendah.
  • Keselamatan rendah: PHP mempunyai beberapa risiko keselamatan, seperti suntikan SQL, serangan XSS, dsb.

Ikhtisar GraphQL

GraphQL ialah bahasa pertanyaan data dan persekitaran masa jalan yang boleh digunakan untuk membuat pertanyaan dan mengendalikan API. Ia pada asalnya dibangunkan oleh Facebook dan dikeluarkan secara terbuka pada tahun 2015. Idea teras GraphQL adalah untuk membolehkan pelanggan menentukan data yang mereka perlukan, dengan itu mengurangkan trafik rangkaian dan beban pelayan yang tidak diperlukan.

Kelebihan dan Kelemahan GraphQL

Kelebihan GraphQL termasuk:

  • Fleksibiliti yang kuat: GraphQL membolehkan pelanggan menyesuaikan pertanyaan dan kaedah pengembalian data, yang lebih fleksibel daripada API REST tradisional.
  • Nestable: GraphQL boleh menyusun data mengikut keperluan dan melaksanakan berbilang pertanyaan mengikut keperluan, meningkatkan kecekapan pertanyaan.
  • Templat: Skema GraphQL mentakrifkan templat untuk data dan jenis data yang tersedia, meningkatkan kecekapan pembangunan.
  • Kawalan pelanggan: GraphQL membenarkan pelanggan mengawal data yang dikembalikan oleh API, mengelakkan penghantaran data yang tidak perlu dan masalah lain dalam API tradisional.

Kelemahan GraphQL termasuk:

  • Kos pembelajaran yang tinggi: Berbanding dengan REST API, GraphQL mempunyai kos pembelajaran yang lebih tinggi dan memerlukan lebih banyak masa untuk mempelajari bahasa dan konsepnya.
  • Sekatan akses merentas domain: Atas sebab keselamatan, API JavaScript penyemak imbas tidak boleh mengakses domain silang API GraphQL.
  • Kebolehan nyahpepijat yang lemah: Oleh kerana pertanyaan dan kaedah pemulangan GraphQL adalah fleksibel, sukar untuk nyahpepijat.

Bagaimana untuk menggunakan PHP dan GraphQL untuk mencapai pertanyaan dan operasi data API yang cekap?

PHP dan GraphQL boleh digunakan bersama-sama antara satu sama lain untuk menambah baik pertanyaan API dan kecekapan operasi. Berikut ialah salah satu kaedah pelaksanaan:

Langkah 1: Cipta Skema GraphQL

Skema GraphQL ialah templat yang mentakrifkan jenis data dan operasi, dan digunakan untuk menentukan jenis data dan operasi boleh laku yang disokong oleh API. Selepas menggunakan GraphQL's Schema, kita boleh menggunakan bahasa pertanyaan yang berfungsi pada model tersebut.

Kita boleh mencipta Skema berikut:

type Book {
    id: ID!
    title: String!
    author: String!
    publisher: String!
    price: Float!
}

type Query {
    getBook(id: ID!): Book
    getAllBooks: [Book]
}

type Mutation {
    addBook(title: String!, author: String!, publisher: String!, price: Float!): ID!
    updateBook(id: ID!, title: String, author: String, publisher: String, price: Float): Book
    deleteBook(id: ID!): Boolean
}
Salin selepas log masuk

Langkah 2: Laksanakan pelaksana GraphQL

Pelaksana GraphQL boleh melakukan operasi seperti pertanyaan, mutasi dan langganan. Kita boleh menggunakan PHP untuk melaksanakan pelaksana GraphQL Berikut ialah contoh mudah.

<?php
require_once(__DIR__ . '/vendor/autoload.php');
use GraphQLTypeSchema;
use GraphQLTypeDefinitionObjectType;
use GraphQLTypeDefinitionType;
use GraphQLGraphQL;
use GraphQLTypeDefinitionResolveInfo;

$db = mysqli_connect('localhost', 'root', '', 'books');
mysqli_query($db, "SET NAMES 'UTF8'");

$queryType = new ObjectType([
    'name' => 'Query',
    'fields' => [
        'getBook' => [
            'type' => $bookType,
            'args' => [
                'id' => Type::nonNull(Type::id())
            ],
            'resolve' => function ($root, $args) use ($db) {
                $result = mysqli_query($db, "SELECT * FROM books WHERE id = {$args['id']}");
                $book = mysqli_fetch_assoc($result);
                return $book;
            }
        ],
        'getAllBooks' => [
            'type' => Type::listOf($bookType),
            'resolve' => function ($root, $args) use ($db) {
                $result = mysqli_query($db, "SELECT * FROM books");
                $books = mysqli_fetch_all($result, MYSQLI_ASSOC);
                return $books;
            }
        ]
    ]
]);

$mutationType = new ObjectType([
    'name' => 'Mutation',
    'fields' => [
        'addBook' => [
            'type' => Type::id(),
            'args' => [
                'title' => Type::nonNull(Type::string()),
                'author' => Type::nonNull(Type::string()),
                'publisher' => Type::nonNull(Type::string()),
                'price' => Type::nonNull(Type::float())
            ],
            'resolve' => function ($root, $args) use ($db) {
                $result = mysqli_query($db, "INSERT INTO books (title, author, publisher, price) VALUES ('{$args['title']}', '{$args['author']}', '{$args['publisher']}', {$args['price']})");
                $id = mysqli_insert_id($db);
                return $id;
            }
        ],
        'updateBook' => [
            'type' => $bookType,
            'args' => [
                'id' => Type::nonNull(Type::id()),
                'title' => Type::string(),
                'author' => Type::string(),
                'publisher' => Type::string(),
                'price' => Type::float()
            ],
            'resolve' => function ($root, $args) use ($db) {
                $sql = "UPDATE books SET";
                if (!is_null($args['title'])) $sql .= " title='{$args['title']}',";
                if (!is_null($args['author'])) $sql .= " author='{$args['author']}',";
                if (!is_null($args['publisher'])) $sql .= " publisher='{$args['publisher']}',";
                if (!is_null($args['price'])) $sql .= " price={$args['price']},";
                $sql = rtrim($sql, ',');
                $sql .= " WHERE id = {$args['id']}";
                mysqli_query($db, $sql);
                $result = mysqli_query($db, "SELECT * FROM books WHERE id = {$args['id']}");
                $book = mysqli_fetch_assoc($result);
                return $book;
            }
        ],
        'deleteBook' => [
            'type' => Type::boolean(),
            'args' => [
                'id' => Type::nonNull(Type::id())
            ],
            'resolve' => function ($root, $args) use ($db) {
                mysqli_query($db, "DELETE FROM books WHERE id = {$args['id']}");
                return true;
            }
        ],
    ]
]);

$bookType = new ObjectType([
    'name' => 'Book',
    'fields' => [
        'id' => [
            'type' => Type::nonNull(Type::id())
        ],
        'title' => [
            'type' => Type::nonNull(Type::string())
        ],
        'author' => [
            'type' => Type::nonNull(Type::string())
        ],
        'publisher' => [
            'type' => Type::nonNull(Type::string())
        ],
        'price' => [
            'type' => Type::nonNull(Type::float())
        ],
    ]
]);

$schema = new Schema([
    'query' => $queryType,
    'mutation' => $mutationType
]);

$input = file_get_contents('php://input');

try {
    $result = GraphQL::executeQuery($schema, $input);
    echo json_encode($result->toArray());
} catch (Exception $e) {
    echo json_encode([
        'error' => [
            'message' => $e->getMessage()
        ]
    ]);
}
?>
Salin selepas log masuk

Dalam skrip PHP ini, kami mencipta Skema GraphQL dan menentukan tiga permintaan: getBook, getAllBooks dan addBook, updateBook, deleteBook (ditakrifkan dalam Mutasi). Permintaan ini akan memberikan pertanyaan, serta tiga operasi mutasi - tambah, kemas kini dan padam. Kita boleh menyimpannya dalam pangkalan data MySQL. Pada masa jalan, permintaan diproses dengan melaksanakan pernyataan pertanyaan.

Langkah 3: Bangunkan klien GraphQL

Pada peringkat ini, pelanggan boleh menggunakan skrip PHP untuk menjana pernyataan pertanyaan (atau mutasi) secara automatik. Ini bermakna pelanggan tidak perlu menulis kod dengan tangan dan boleh membina pertanyaan GraphQL dengan cepat tanpa menggunakan borang web atau UI. Kami boleh menggunakan perpustakaan PHP berikut untuk melaksanakan:

composer require  webonyx/graphql-php
Salin selepas log masuk

Berikut ialah contoh klien PHP GraphQL yang mudah:

<?php
require_once(__DIR__ . '/vendor/autoload.php');
use GraphQLClient;
use GraphQLQuery;
use GraphQLVariable;

$client = new Client('http://localhost/graphql.php', [
  'headers' => [
      'Content-Type' => 'application/json',
      'Accept' => 'application/json',
  ],
]);

// 查询所有书籍
$queryAllBooks = new Query('getAllBooks', [], [
    'id',
    'title',
    'author',
    'publisher',
    'price'
]);
$response = $client->runQuery($queryAllBooks);
var_dump($response);

// 查询某本书
$queryBook = new Query('getBook', [
    new Variable('id', 'ID!', '1')
], [
    'id',
    'title',
    'author',
    'publisher',
    'price'
]);
$response = $client->runQuery($queryBook);
var_dump($response);

// 添加一本新书
$mutationAddBook = new Query('addBook', [
    new Variable('title', 'String!', 'PHP Programming'),
    new Variable('author', 'String!', 'John Doe'),
    new Variable('publisher', 'String!', 'Publisher 123'),
    new Variable('price', 'Float!', 123.45)
], [
    'id'
]);
$response = $client->runQuery($mutationAddBook);
var_dump($response);

// 更新一本书
$mutationUpdateBook = new Query('updateBook', [
    new Variable('id', 'ID!', 1),
    new Variable('title', 'String', 'PHP Programming'),
    new Variable('author', 'String', 'John Doe'),
    new Variable('publisher', 'String', 'Publisher 321'),
    new Variable('price', 'Float', 123.45)
], [
    'id',
    'title',
    'author',
    'publisher',
    'price'
]);
$response = $client->runQuery($mutationUpdateBook);
var_dump($response);

// 删除一本书
$mutationDeleteBook = new Query('deleteBook', [
    new Variable('id', 'ID!', 1),
], [
    'id'
]);
$response = $client->runQuery($mutationDeleteBook);
var_dump($response);
?>
Salin selepas log masuk

Dalam skrip klien ini, kami mentakrifkan lima permintaan: getAllBooks, getBook, addBook, updateBook dan deleteBook. Permintaan ini meliputi operasi yang paling biasa dilakukan dalam API GraphQL.

Fikiran Akhir

Gabungan PHP dan GraphQL menyediakan penyelesaian untuk mengendalikan pertanyaan dan operasi API dengan cekap. Sebagai bahasa pengaturcaraan Web, PHP sesuai untuk memproses logik perniagaan sebelah pelayan manakala GraphQL boleh mengurangkan jumlah penghantaran data dan meningkatkan kecekapan pertanyaan melalui kawalan klien dan seni bina templat. Melalui tiga langkah di atas, kita boleh lebih memahami senario aplikasi PHP dan GraphQL dalam pembangunan API, dan juga boleh menjadikan API yang lebih pintar dan cekap.

Atas ialah kandungan terperinci Laksanakan pertanyaan dan manipulasi data API yang cekap menggunakan PHP dan GraphQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

See all articles