인터넷 기술이 지속적으로 발전하면서 API는 다양한 소프트웨어가 서로 통신하는 중요한 방법이 되었습니다. API는 서로 다른 소프트웨어가 서로 액세스하고 사용할 수 있도록 통합된 데이터 인터페이스를 제공할 수 있습니다. 그러나 API의 수와 규모가 계속해서 증가함에 따라 API 데이터에 대한 쿼리와 연산을 어떻게 빠르고 효율적으로 처리할 것인가가 중요한 문제로 대두되고 있습니다.
이 문제에서는 PHP와 GraphQL이 매우 효과적인 솔루션을 제공할 수 있습니다. 이 문서에서는 이 솔루션에 대한 간략한 소개와 분석을 제공합니다.
PHP 개요
PHP는 범용 오픈 소스 스크립팅 언어로, 특히 웹 개발에 적합하며 HTML에 포함될 수 있습니다. 다른 프로그래밍 언어와 달리 PHP의 구문은 상대적으로 시작하기가 쉽기 때문에 많은 초보자가 선택하는 언어가 되었습니다. 동시에 PHP는 강력한 프로그래밍 기능을 갖추고 있어 다양하고 복잡한 작업을 쉽게 처리할 수 있습니다.
PHP의 장점과 단점
PHP의 장점은 다음과 같습니다.
PHP의 단점은 다음과 같습니다.
GraphQL 개요
GraphQL은 API 쿼리 및 운영에 사용할 수 있는 데이터 쿼리 언어이자 런타임 환경입니다. 원래 Facebook에서 개발하여 2015년에 공개적으로 출시되었습니다. GraphQL의 핵심 아이디어는 클라이언트가 필요한 데이터를 지정할 수 있도록 하여 불필요한 네트워크 트래픽과 서버 부하를 줄이는 것입니다.
GraphQL의 장점과 단점
GraphQL의 장점은 다음과 같습니다.
GraphQL의 단점은 다음과 같습니다.
PHP와 GraphQL을 사용하여 효율적인 API 데이터 쿼리 및 작업을 달성하는 방법은 무엇입니까?
PHP와 GraphQL을 함께 사용하면 API 쿼리 및 작업 효율성을 향상시킬 수 있습니다. 다음은 구현 방법 중 하나입니다.
1단계: GraphQL 스키마 생성
GraphQL 스키마는 데이터 유형과 작업을 정의하는 템플릿으로, API에서 지원하는 데이터 유형과 실행 가능한 작업을 지정하는 데 사용됩니다. GraphQL의 스키마를 사용한 후 해당 모델에서 작동하는 쿼리 언어를 사용할 수 있습니다.
다음 스키마를 생성할 수 있습니다.
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 }
2단계: GraphQL 실행기 구현
GraphQL 실행기는 쿼리, 변형, 구독과 같은 작업을 수행할 수 있습니다. PHP를 사용하여 GraphQL의 실행기를 구현할 수 있습니다. 다음은 간단한 예입니다.
<?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() ] ]); } ?>
이 PHP 스크립트에서는 GraphQL 스키마를 생성하고 getBook, getAllBooks 및 addBook, updateBook, deleteBook(Mutation에 정의됨)의 세 가지 요청을 정의했습니다. 이러한 요청은 쿼리는 물론 추가, 업데이트, 삭제라는 세 가지 변형 작업도 제공합니다. MySQL 데이터베이스에 저장할 수 있습니다. 런타임 시 쿼리 문을 실행하여 요청을 처리합니다.
3단계: GraphQL 클라이언트 개발
이 단계에서 클라이언트는 PHP 스크립트를 사용하여 쿼리(또는 변형) 문을 자동으로 생성할 수 있습니다. 즉, 클라이언트는 코드를 직접 작성할 필요가 없으며 웹 양식이나 UI를 사용하지 않고도 GraphQL 쿼리를 빠르게 구축할 수 있습니다. 다음 PHP 라이브러리를 사용하여 구현할 수 있습니다.
composer require webonyx/graphql-php
다음은 간단한 PHP GraphQL 클라이언트 예입니다.
<?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); ?>
이 클라이언트 스크립트에서는 getAllBooks, getBook, addBook, updateBook 및 deleteBook의 5개 요청을 정의합니다. 이러한 요청은 GraphQL API에서 수행되는 가장 일반적인 작업을 다룹니다.
최종 생각
PHP와 GraphQL의 조합은 API 쿼리 및 작업을 효율적으로 처리하기 위한 솔루션을 제공합니다. 웹 프로그래밍 언어로서 PHP는 서버 측 비즈니스 로직을 처리하는 데 적합하며 GraphQL은 클라이언트 제어 및 템플릿 아키텍처를 통해 데이터 전송량을 줄이고 쿼리 효율성을 향상시킬 수 있습니다. 위의 세 단계를 통해 API 개발에서 PHP와 GraphQL의 애플리케이션 시나리오를 더 잘 이해할 수 있으며, 더 스마트하고 효율적인 API를 만들 수도 있습니다.
위 내용은 PHP 및 GraphQL을 사용하여 효율적인 API 데이터 쿼리 및 작업 달성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!