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:
Kelemahan PHP termasuk:
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:
Kelemahan GraphQL termasuk:
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 }
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() ] ]); } ?>
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
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); ?>
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!