GraphQL is a query language for APIs that allows clients to accurately query data and avoid wasting network bandwidth and server resources. In this article, we will discuss how to create a GraphQL API using PHP.
How GraphQL API works
GraphQL API is based on query language. The client sends a query request to the server, and the server parses the request and returns the corresponding data. Requests and responses are sent and received in GraphQL language format.
The GraphQL API also supports multi-level associated queries, where the client can query some data and then request related data in the same query. This greatly reduces network bandwidth and server overhead.
There are three main concepts in the GraphQL API: queries, types, and parsers. Queries are requests sent by the client, GraphQL types are the objects used in the API, and resolvers are the code that converts requests into responses.
Create GraphQL API
We will implement the GraphQL API using PHP and use the webonyx/graphql-php library to build and parse queries.
First, we need to create some GraphQL types, which describe the objects in the API. The following is an example User type:
use GraphQLTypeDefinitionType; use GraphQLTypeDefinitionObjectType; $userType = new ObjectType([ 'name' => 'User', 'fields' => [ 'id' => Type::int(), 'name' => Type::string(), 'email' => Type::string() ] ]);
The above code creates a type named User, containing three fields: id, name, and email. Each field has a type, Type::int() represents an integer type, and Type::string() represents a string type.
Next, we need to create a parser to handle the query. The following is a sample user query parser:
$rootValue = [ 'users' => [ ['id' => 1, 'name' => 'Alice', 'email' => 'alice@example.com'], ['id' => 2, 'name' => 'Bob', 'email' => 'bob@example.com'] ] ]; $resolver = function ($root, $args) { global $rootValue; if (isset($args['id'])) { foreach ($rootValue['users'] as $user) { if ($user['id'] == $args['id']) { return $user; } } } else { return $rootValue['users']; } };
The above code creates a $rootValue array, which contains two user objects. The $resolver function will return the corresponding data according to the request sent by the client. If the request has an id parameter, the user information with that id will be returned, otherwise all user information will be returned.
Finally, we need to bind the above types and resolvers into the GraphQL API. The following is the binding code:
use GraphQLGraphQL; use GraphQLTypeSchema; $schema = new Schema([ 'query' => new ObjectType([ 'name' => 'Query', 'fields' => [ 'user' => [ 'type' => $userType, 'args' => ['id' => Type::int()], 'resolve' => $resolver ], 'users' => [ 'type' => Type::listOf($userType), 'resolve' => $resolver ] ] ]) ]); if (!empty($_POST['query'])) { $result = GraphQL::executeQuery($schema, $_POST['query']); echo json_encode($result->toArray()); }
The above code binds the user type and resolver into the GraphQL API and creates a query object. In the query object we can define multiple queries such as 'user' and 'users'. Each query needs to specify its type and parser, which will be called when a query is detected.
Then we need to send the query into the API via a POST request and parse the response data. Taking the above code as an example, we will get the response JSON object from the API and output it directly.
Summary
In this article, we introduced how to create a GraphQL API using PHP. We discussed how the GraphQL API works and provided some sample code to demonstrate how to create types, resolvers, and bind them into the API. We also use the webonyx/graphql-php library to simplify building and parsing the API. If you want to know more about GraphQL, please refer to the official GraphQL documentation.
The above is the detailed content of Learn how to create a GraphQL API using PHP: Steps to build an API interface. For more information, please follow other related articles on the PHP Chinese website!