You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2022/03/02 08:38:04 UTC

[GitHub] [apisix-website] hf400159 opened a new pull request #930: docs: add GraphQL blog

hf400159 opened a new pull request #930:
URL: https://github.com/apache/apisix-website/pull/930


   add GraphQL blog.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] yzeng25 commented on a change in pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
yzeng25 commented on a change in pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#discussion_r818330278



##########
File path: website/blog/2022/03/02/apisix-integration-graphql-plugin.md
##########
@@ -0,0 +1,347 @@
+---
+title: "How to Use GraphQL with API Gateway Apache APISIX"
+authors:
+  - name: "JohnChever"
+    title: "Author"
+    url: "https://github.com/Chever-John"
+    image_url: "https://avatars.githubusercontent.com/u/43690894?v=4"
+  - name: "Fei Han"
+    title: "Technical Writer"
+    url: "https://github.com/hf400159"
+    image_url: "https://avatars.githubusercontent.com/u/97138894?v=4"
+keywords: 
+- Apache APISIX
+- API Gateway
+- GraphQL
+- Ecosystem
+description: This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+tags: [Technology,Ecosystem]
+---
+
+> This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+
+<!--truncate-->
+
+## Background Information
+
+GraphQL is an open source, API oriented data query operation language and corresponding running environment. Originally developed internally by Facebook in 2012 and publicly released in 2015. On November 7, 2018, Facebook transferred the GraphQL project to the newly established GraphQL foundation.
+
+You can understand GraphQL by analogy with SQL query statements. Compared with SQL query statements, GraphQL provides an easy to understand and complete description of the data in the API, so that the client can accurately obtain the data it needs through the customized description. This also allows the API to calmly face the development of increasingly complex interfaces and avoid eventually becoming a daunting complex interface.
+
+Apache APISIX is a dynamic, real-time, high-performance API gateway that provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.
+
+As a cloud native API gateway, Apache APISIX already has the matching ability to recognize GraphQL syntax at the beginning of its design. By efficiently matching GraphQL statements carried in requests, it can filter out abnormal traffic to further ensure security and improve system performance.
+
+### Scene Analysis
+
+We are in the era of big data and large traffic, Apache APISIX and GraphQL can be combined to form a win-win situation. The following is a detailed description of a scenario.
+
+This article will discuss the practical application of Apache APISIX and GraphQL in the context of microservice architecture.
+
+### Problems Encountered In the Actual Scene
+
+In the late stage of the project, business complexity and team mobility are often the problems. Micro service architecture has become a common solution to such problems. In microservice architecture, GraphQL exposes two kinds of interfaces: decentralized and centralized. However, only centralized interface design can maximize GraphQL's advantages. However, in centralized interface design, all microservices are exposed to the same interface. **So processing flow routing cannot simply forwarded according to the URL, but should be based on the request contained in different fields are forwarded.**
+
+Because NGINX only processes URLs and some parameters when processing requests, but only by parsing the query information in the request parameters can the resources accessed by the client be known, so as to perform routing forwarding, so this routing forwarding method cannot be completed through traditional NGINX. . In practical application scenarios, it is very dangerous to directly expose the GraphQL interface to the outside world, so a professional high-performance API gateway is required to protect the GraphQL interface.
+
+### Solution
+
+Based on the security, stability, and high performance of Apache APISIX, adding flexible routing matching rules to GraphQL is the best solution to GraphQL's centralized interface design.
+
+![error/graphql architecture.png](https://static.apiseven.com/202108/1646200966179-1d649ab0-8d49-49f5-a8fa-a1a30af0519d.png)
+
+In this scheme, Apache APISIX is deployed before GraphQL Server as an API gateway, providing security for the whole backend system. In addition, Apache APISIX has GraphQL matching functions according to its own. Some of the requests are filtered and processed by the GraphQL Server, making the whole request resource process more efficient.
+
+Thanks to the dynamic features of Apache APISIX, you can enable plug-ins such as current limiting, authentication, and observability without restarting services, which further improves the operating efficiency of this solution and facilitates operation and maintenance.
+
+In addition, Apache APISIX can also perform different permission checks for different `graphql_operations`, and forward to different Upstream for different graphql_names. The details will be described below.
+
+**To sum up, the solution of Apache APISIX + GraphQL can fully utilize the advantages of GraphQL search and also have the security and stability of Apache APISIX as API gateway.**
+
+## Application of GraphQL In API Gateway
+
+### Basic Logic
+
+![error/GraphQL principle.png](https://static.apiseven.com/202108/1646201215532-f5965158-7456-443a-84a7-cadadb95fc1f.png)
+
+The execution logic of GraphQL in Apache APISIX is as follows:
+
+1. Clients to  Apache APISIX initiated with GraphQL statements request;
+2. Apache APISIX matching routing and extract the preset GraphQL data;
+3. Apache APISIX matches the request data with the preset GraphQL data;
+
+- If the match is successful,  Apache APISIX will continue to forward the request;
+- If the match fails, Apache APISIX will immediately terminate the request.
+
+4. Whether plugins exist;
+
+- if the plug-in exists, the request will continue to be processed by the plug-in, and after the processing is completed, it will continue to be forwarded to the GraphQL Server;
+- If no plug-in exists, the request will be forwarded directly to GraphQL Server.
+
+In the internal matching of APISIX core, Apache APISIX implements GraphQL support through the [`graphql-lua`](https://github.com/bjornbytes/graphql-lua) library. The Apache APISIX GraphQL parsing library will first parse the request carrying the GraphQL syntax, and then match the parsed request with the configuration data preset in the Apache APISIX database. If the match is successful, Apache APISIX will pass and forward the request, otherwise it will terminate the request.
+
+### Specific Configuration
+
+Apache APISIX currently supports filtering routes by some properties of GraphQL:
+
+- graphql_operation
+- graphql_name
+- graphql_root_fields
+
+The GraphQL properties correspond to the GraphQL query statement shown below:
+
+```Nginx
+query getRepo {
+    owner {
+        name
+    }
+    repo {
+        created
+    }
+}
+```
+
+- `graphql_operation` corresponds to `query`
+- `graphql_name` corresponds to `getRepo`
+- `graphql_root_fields` corresponds to `["owner", "repo"]`
+
+You can set up a route for Apache APISIX to verify GraphQL matching capabilities with the following example:
+
+```Shell
+curl http://127.0.0.1:9080/apisix/admin/routes/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+  {
+      "methods": ["POST"],
+      "uri": "/_graphql",
+      "vars": [
+          ["graphql_operation", "==", "query"],
+          ["graphql_name", "==", "getRepo"],
+          ["graphql_root_fields", "has", "owner"]
+      ],
+      "upstream": {
+          "type": "roundrobin",
+          "nodes": {
+              "192.168.1.200:4000": 1
+          }
+      }
+  }'
+```
+
+Then use GraphQL statements request to visit:
+
+```Shell
+curl -H 'content-type: application/graphql' \
+-X POST http://127.0.0.1:9080/graphql -d '
+query getRepo {
+    owner {
+        name
+    }
+    repo {
+        created
+    }
+}'
+```
+
+If the match is successful, Apache APISIX proceeds to forward the request.
+
+```Shell
+HTTP/1.1 200 OK
+```
+
+Otherwise, terminate the request.
+
+```Shell
+HTTP/1.1 404 Not Found
+```
+
+## Advanced Operation
+
+Apache APISIX can forward to different Upstreams according to different `graphql_names`, and perform different permission checks according to different `graphql_operation`. The following will show you the code configuration for this feature.
+
+### Match Upstream with `graphql_name`
+
+1. Create the first Upstream:
+
+```Shell
+  curl http://192.168.1.200:9080/apisix/admin/upstreams/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
+  {
+      "type": "chash",
+      "key": "remote_addr",
+      "nodes": {
+          "192.168.1.200:1980": 1
+      }
+  }'
+```
+
+2. 2. Create GraphQL route bound to the first Upstream service with `graphql_name` set to `getRepo111`:
+
+```Shell
+  curl http://192.168.1.200:9080/apisix/admin/routes/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+  {
+      "methods": ["POST"],
+      "uri": "/graphql",
+      "vars": [
+          ["graphql_operation", "==", "query"],
+          ["graphql_name", "==", "getRepo111"],
+          ["graphql_root_fields", "has", "owner"]
+      ],
+      "upstream_id": "1"
+  }'
+```
+
+3. 3. Create the second Upstream :

Review comment:
       ```suggestion
   3. Create the second Upstream:
   ```

##########
File path: website/blog/2022/03/02/apisix-integration-graphql-plugin.md
##########
@@ -0,0 +1,347 @@
+---
+title: "How to Use GraphQL with API Gateway Apache APISIX"
+authors:
+  - name: "JohnChever"
+    title: "Author"
+    url: "https://github.com/Chever-John"
+    image_url: "https://avatars.githubusercontent.com/u/43690894?v=4"
+  - name: "Fei Han"
+    title: "Technical Writer"
+    url: "https://github.com/hf400159"
+    image_url: "https://avatars.githubusercontent.com/u/97138894?v=4"
+keywords: 
+- Apache APISIX
+- API Gateway
+- GraphQL
+- Ecosystem
+description: This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+tags: [Technology,Ecosystem]
+---
+
+> This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+
+<!--truncate-->
+
+## Background Information
+
+GraphQL is an open source, API oriented data query operation language and corresponding running environment. Originally developed internally by Facebook in 2012 and publicly released in 2015. On November 7, 2018, Facebook transferred the GraphQL project to the newly established GraphQL foundation.
+
+You can understand GraphQL by analogy with SQL query statements. Compared with SQL query statements, GraphQL provides an easy to understand and complete description of the data in the API, so that the client can accurately obtain the data it needs through the customized description. This also allows the API to calmly face the development of increasingly complex interfaces and avoid eventually becoming a daunting complex interface.
+
+Apache APISIX is a dynamic, real-time, high-performance API gateway that provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.
+
+As a cloud native API gateway, Apache APISIX already has the matching ability to recognize GraphQL syntax at the beginning of its design. By efficiently matching GraphQL statements carried in requests, it can filter out abnormal traffic to further ensure security and improve system performance.
+
+### Scene Analysis
+
+We are in the era of big data and large traffic, Apache APISIX and GraphQL can be combined to form a win-win situation. The following is a detailed description of a scenario.
+
+This article will discuss the practical application of Apache APISIX and GraphQL in the context of microservice architecture.
+
+### Problems Encountered In the Actual Scene
+
+In the late stage of the project, business complexity and team mobility are often the problems. Micro service architecture has become a common solution to such problems. In microservice architecture, GraphQL exposes two kinds of interfaces: decentralized and centralized. However, only centralized interface design can maximize GraphQL's advantages. However, in centralized interface design, all microservices are exposed to the same interface. **So processing flow routing cannot simply forwarded according to the URL, but should be based on the request contained in different fields are forwarded.**
+
+Because NGINX only processes URLs and some parameters when processing requests, but only by parsing the query information in the request parameters can the resources accessed by the client be known, so as to perform routing forwarding, so this routing forwarding method cannot be completed through traditional NGINX. . In practical application scenarios, it is very dangerous to directly expose the GraphQL interface to the outside world, so a professional high-performance API gateway is required to protect the GraphQL interface.
+
+### Solution
+
+Based on the security, stability, and high performance of Apache APISIX, adding flexible routing matching rules to GraphQL is the best solution to GraphQL's centralized interface design.
+
+![error/graphql architecture.png](https://static.apiseven.com/202108/1646200966179-1d649ab0-8d49-49f5-a8fa-a1a30af0519d.png)
+
+In this scheme, Apache APISIX is deployed before GraphQL Server as an API gateway, providing security for the whole backend system. In addition, Apache APISIX has GraphQL matching functions according to its own. Some of the requests are filtered and processed by the GraphQL Server, making the whole request resource process more efficient.
+
+Thanks to the dynamic features of Apache APISIX, you can enable plug-ins such as current limiting, authentication, and observability without restarting services, which further improves the operating efficiency of this solution and facilitates operation and maintenance.
+
+In addition, Apache APISIX can also perform different permission checks for different `graphql_operations`, and forward to different Upstream for different graphql_names. The details will be described below.
+
+**To sum up, the solution of Apache APISIX + GraphQL can fully utilize the advantages of GraphQL search and also have the security and stability of Apache APISIX as API gateway.**
+
+## Application of GraphQL In API Gateway
+
+### Basic Logic
+
+![error/GraphQL principle.png](https://static.apiseven.com/202108/1646201215532-f5965158-7456-443a-84a7-cadadb95fc1f.png)
+
+The execution logic of GraphQL in Apache APISIX is as follows:
+
+1. Clients to  Apache APISIX initiated with GraphQL statements request;
+2. Apache APISIX matching routing and extract the preset GraphQL data;
+3. Apache APISIX matches the request data with the preset GraphQL data;
+
+- If the match is successful,  Apache APISIX will continue to forward the request;
+- If the match fails, Apache APISIX will immediately terminate the request.
+
+4. Whether plugins exist;
+
+- if the plug-in exists, the request will continue to be processed by the plug-in, and after the processing is completed, it will continue to be forwarded to the GraphQL Server;
+- If no plug-in exists, the request will be forwarded directly to GraphQL Server.
+
+In the internal matching of APISIX core, Apache APISIX implements GraphQL support through the [`graphql-lua`](https://github.com/bjornbytes/graphql-lua) library. The Apache APISIX GraphQL parsing library will first parse the request carrying the GraphQL syntax, and then match the parsed request with the configuration data preset in the Apache APISIX database. If the match is successful, Apache APISIX will pass and forward the request, otherwise it will terminate the request.
+
+### Specific Configuration
+
+Apache APISIX currently supports filtering routes by some properties of GraphQL:
+
+- graphql_operation
+- graphql_name
+- graphql_root_fields
+
+The GraphQL properties correspond to the GraphQL query statement shown below:
+
+```Nginx
+query getRepo {
+    owner {
+        name
+    }
+    repo {
+        created
+    }
+}
+```
+
+- `graphql_operation` corresponds to `query`
+- `graphql_name` corresponds to `getRepo`
+- `graphql_root_fields` corresponds to `["owner", "repo"]`
+
+You can set up a route for Apache APISIX to verify GraphQL matching capabilities with the following example:
+
+```Shell
+curl http://127.0.0.1:9080/apisix/admin/routes/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+  {
+      "methods": ["POST"],
+      "uri": "/_graphql",
+      "vars": [
+          ["graphql_operation", "==", "query"],
+          ["graphql_name", "==", "getRepo"],
+          ["graphql_root_fields", "has", "owner"]
+      ],
+      "upstream": {
+          "type": "roundrobin",
+          "nodes": {
+              "192.168.1.200:4000": 1
+          }
+      }
+  }'
+```
+
+Then use GraphQL statements request to visit:
+
+```Shell
+curl -H 'content-type: application/graphql' \
+-X POST http://127.0.0.1:9080/graphql -d '
+query getRepo {
+    owner {
+        name
+    }
+    repo {
+        created
+    }
+}'
+```
+
+If the match is successful, Apache APISIX proceeds to forward the request.
+
+```Shell
+HTTP/1.1 200 OK
+```
+
+Otherwise, terminate the request.
+
+```Shell
+HTTP/1.1 404 Not Found
+```
+
+## Advanced Operation
+
+Apache APISIX can forward to different Upstreams according to different `graphql_names`, and perform different permission checks according to different `graphql_operation`. The following will show you the code configuration for this feature.
+
+### Match Upstream with `graphql_name`
+
+1. Create the first Upstream:
+
+```Shell
+  curl http://192.168.1.200:9080/apisix/admin/upstreams/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
+  {
+      "type": "chash",
+      "key": "remote_addr",
+      "nodes": {
+          "192.168.1.200:1980": 1
+      }
+  }'
+```
+
+2. 2. Create GraphQL route bound to the first Upstream service with `graphql_name` set to `getRepo111`:
+
+```Shell
+  curl http://192.168.1.200:9080/apisix/admin/routes/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+  {
+      "methods": ["POST"],
+      "uri": "/graphql",
+      "vars": [
+          ["graphql_operation", "==", "query"],
+          ["graphql_name", "==", "getRepo111"],
+          ["graphql_root_fields", "has", "owner"]
+      ],
+      "upstream_id": "1"
+  }'
+```
+
+3. 3. Create the second Upstream :
+
+```Shell
+  curl http://192.168.1.200:9080/apisix/admin/upstreams/2 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
+  {
+      "type": "chash",
+      "key": "remote_addr",
+      "nodes": {
+          "192.168.1.200:1981": 1
+      }
+  }'
+```
+
+4. Create a GraphQL route bound to the second upstream service with `graphql_name` set to `getRepo222`:
+
+```Shell
+  curl http://192.168.1.200:9080/apisix/admin/routes/2 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+  {
+      "methods": ["POST"],
+      "uri": "/graphql",
+      "vars": [
+          ["graphql_operation", "==", "query"],
+          ["graphql_name", "==", "getRepo222"],
+          ["graphql_root_fields", "has", "owner"]
+      ],
+      "upstream_id": 2
+  }'
+```
+
+5. Test Example
+
+Test with the two `graphql_name` services created earlier, you can find that Apache APISIX can automatically select the forwarded Upstream based on the different `graphql_names` in the request.

Review comment:
       ```suggestion
   5. Test with the two `graphql_name` services created earlier, you can find that Apache APISIX can automatically select the forwarded Upstream based on the different `graphql_names` in the request.
   ```

##########
File path: website/blog/2022/03/02/apisix-integration-graphql-plugin.md
##########
@@ -0,0 +1,347 @@
+---
+title: "How to Use GraphQL with API Gateway Apache APISIX"
+authors:
+  - name: "JohnChever"
+    title: "Author"
+    url: "https://github.com/Chever-John"
+    image_url: "https://avatars.githubusercontent.com/u/43690894?v=4"
+  - name: "Fei Han"
+    title: "Technical Writer"
+    url: "https://github.com/hf400159"
+    image_url: "https://avatars.githubusercontent.com/u/97138894?v=4"
+keywords: 
+- Apache APISIX
+- API Gateway
+- GraphQL
+- Ecosystem
+description: This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+tags: [Technology,Ecosystem]
+---
+
+> This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+
+<!--truncate-->
+
+## Background Information
+
+GraphQL is an open source, API oriented data query operation language and corresponding running environment. Originally developed internally by Facebook in 2012 and publicly released in 2015. On November 7, 2018, Facebook transferred the GraphQL project to the newly established GraphQL foundation.
+
+You can understand GraphQL by analogy with SQL query statements. Compared with SQL query statements, GraphQL provides an easy to understand and complete description of the data in the API, so that the client can accurately obtain the data it needs through the customized description. This also allows the API to calmly face the development of increasingly complex interfaces and avoid eventually becoming a daunting complex interface.
+
+Apache APISIX is a dynamic, real-time, high-performance API gateway that provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.
+
+As a cloud native API gateway, Apache APISIX already has the matching ability to recognize GraphQL syntax at the beginning of its design. By efficiently matching GraphQL statements carried in requests, it can filter out abnormal traffic to further ensure security and improve system performance.
+
+### Scene Analysis
+
+We are in the era of big data and large traffic, Apache APISIX and GraphQL can be combined to form a win-win situation. The following is a detailed description of a scenario.
+
+This article will discuss the practical application of Apache APISIX and GraphQL in the context of microservice architecture.
+
+### Problems Encountered In the Actual Scene
+
+In the late stage of the project, business complexity and team mobility are often the problems. Micro service architecture has become a common solution to such problems. In microservice architecture, GraphQL exposes two kinds of interfaces: decentralized and centralized. However, only centralized interface design can maximize GraphQL's advantages. However, in centralized interface design, all microservices are exposed to the same interface. **So processing flow routing cannot simply forwarded according to the URL, but should be based on the request contained in different fields are forwarded.**
+
+Because NGINX only processes URLs and some parameters when processing requests, but only by parsing the query information in the request parameters can the resources accessed by the client be known, so as to perform routing forwarding, so this routing forwarding method cannot be completed through traditional NGINX. . In practical application scenarios, it is very dangerous to directly expose the GraphQL interface to the outside world, so a professional high-performance API gateway is required to protect the GraphQL interface.
+
+### Solution
+
+Based on the security, stability, and high performance of Apache APISIX, adding flexible routing matching rules to GraphQL is the best solution to GraphQL's centralized interface design.
+
+![error/graphql architecture.png](https://static.apiseven.com/202108/1646200966179-1d649ab0-8d49-49f5-a8fa-a1a30af0519d.png)
+
+In this scheme, Apache APISIX is deployed before GraphQL Server as an API gateway, providing security for the whole backend system. In addition, Apache APISIX has GraphQL matching functions according to its own. Some of the requests are filtered and processed by the GraphQL Server, making the whole request resource process more efficient.
+
+Thanks to the dynamic features of Apache APISIX, you can enable plug-ins such as current limiting, authentication, and observability without restarting services, which further improves the operating efficiency of this solution and facilitates operation and maintenance.
+
+In addition, Apache APISIX can also perform different permission checks for different `graphql_operations`, and forward to different Upstream for different graphql_names. The details will be described below.
+
+**To sum up, the solution of Apache APISIX + GraphQL can fully utilize the advantages of GraphQL search and also have the security and stability of Apache APISIX as API gateway.**
+
+## Application of GraphQL In API Gateway
+
+### Basic Logic
+
+![error/GraphQL principle.png](https://static.apiseven.com/202108/1646201215532-f5965158-7456-443a-84a7-cadadb95fc1f.png)
+
+The execution logic of GraphQL in Apache APISIX is as follows:
+
+1. Clients to  Apache APISIX initiated with GraphQL statements request;
+2. Apache APISIX matching routing and extract the preset GraphQL data;
+3. Apache APISIX matches the request data with the preset GraphQL data;
+
+- If the match is successful,  Apache APISIX will continue to forward the request;
+- If the match fails, Apache APISIX will immediately terminate the request.
+
+4. Whether plugins exist;
+
+- if the plug-in exists, the request will continue to be processed by the plug-in, and after the processing is completed, it will continue to be forwarded to the GraphQL Server;
+- If no plug-in exists, the request will be forwarded directly to GraphQL Server.
+
+In the internal matching of APISIX core, Apache APISIX implements GraphQL support through the [`graphql-lua`](https://github.com/bjornbytes/graphql-lua) library. The Apache APISIX GraphQL parsing library will first parse the request carrying the GraphQL syntax, and then match the parsed request with the configuration data preset in the Apache APISIX database. If the match is successful, Apache APISIX will pass and forward the request, otherwise it will terminate the request.
+
+### Specific Configuration
+
+Apache APISIX currently supports filtering routes by some properties of GraphQL:
+
+- graphql_operation
+- graphql_name
+- graphql_root_fields
+
+The GraphQL properties correspond to the GraphQL query statement shown below:
+
+```Nginx
+query getRepo {
+    owner {
+        name
+    }
+    repo {
+        created
+    }
+}
+```
+
+- `graphql_operation` corresponds to `query`
+- `graphql_name` corresponds to `getRepo`
+- `graphql_root_fields` corresponds to `["owner", "repo"]`
+
+You can set up a route for Apache APISIX to verify GraphQL matching capabilities with the following example:
+
+```Shell
+curl http://127.0.0.1:9080/apisix/admin/routes/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+  {
+      "methods": ["POST"],
+      "uri": "/_graphql",
+      "vars": [
+          ["graphql_operation", "==", "query"],
+          ["graphql_name", "==", "getRepo"],
+          ["graphql_root_fields", "has", "owner"]
+      ],
+      "upstream": {
+          "type": "roundrobin",
+          "nodes": {
+              "192.168.1.200:4000": 1
+          }
+      }
+  }'
+```
+
+Then use GraphQL statements request to visit:
+
+```Shell
+curl -H 'content-type: application/graphql' \
+-X POST http://127.0.0.1:9080/graphql -d '
+query getRepo {
+    owner {
+        name
+    }
+    repo {
+        created
+    }
+}'
+```
+
+If the match is successful, Apache APISIX proceeds to forward the request.
+
+```Shell
+HTTP/1.1 200 OK
+```
+
+Otherwise, terminate the request.
+
+```Shell
+HTTP/1.1 404 Not Found
+```
+
+## Advanced Operation
+
+Apache APISIX can forward to different Upstreams according to different `graphql_names`, and perform different permission checks according to different `graphql_operation`. The following will show you the code configuration for this feature.
+
+### Match Upstream with `graphql_name`
+
+1. Create the first Upstream:
+
+```Shell
+  curl http://192.168.1.200:9080/apisix/admin/upstreams/1 \
+  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
+  {
+      "type": "chash",
+      "key": "remote_addr",
+      "nodes": {
+          "192.168.1.200:1980": 1
+      }
+  }'
+```
+
+2. 2. Create GraphQL route bound to the first Upstream service with `graphql_name` set to `getRepo111`:

Review comment:
       ```suggestion
   2. Create GraphQL route bound to the first Upstream service with `graphql_name` set to `getRepo111`:
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   ✔️ Deploy Preview for *apache-apisix* ready!
   
   
   🔨 Explore the source changes: 638422423878d781f00b67635d6023194039b743
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/622035077b9606000727a3d1](https://app.netlify.com/sites/apache-apisix/deploys/622035077b9606000727a3d1)
   
   😎 Browse the preview: [https://deploy-preview-930--apache-apisix.netlify.app](https://deploy-preview-930--apache-apisix.netlify.app)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   ✔️ Deploy Preview for *apache-apisix* ready!
   
   
   🔨 Explore the source changes: aaef9bd9acdf3352d33b7bbac9fa4e8d712cfe5d
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/62205c31483b9f0007569ee4](https://app.netlify.com/sites/apache-apisix/deploys/62205c31483b9f0007569ee4)
   
   😎 Browse the preview: [https://deploy-preview-930--apache-apisix.netlify.app](https://deploy-preview-930--apache-apisix.netlify.app)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   ✔️ Deploy Preview for *apache-apisix* ready!
   
   
   🔨 Explore the source changes: dca4c030a9adc6281bd3334015dab6b5076d23f8
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/621f327c7c25e30007e9c13c](https://app.netlify.com/sites/apache-apisix/deploys/621f327c7c25e30007e9c13c)
   
   😎 Browse the preview: [https://deploy-preview-930--apache-apisix.netlify.app](https://deploy-preview-930--apache-apisix.netlify.app)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] commented on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] commented on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   👷 Deploy Preview for *apache-apisix* processing.
   
   
   🔨 Explore the source changes: 8c923005f66470b9ba04c3a49b7811beab4fb01b
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/621f2ce6f4122a00087aad2c](https://app.netlify.com/sites/apache-apisix/deploys/621f2ce6f4122a00087aad2c)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   👷 Deploy Preview for *apache-apisix* processing.
   
   
   🔨 Explore the source changes: 065b784cb62bea6e4dc342316f39c1fcb6a13124
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/622034a0a834be0008949519](https://app.netlify.com/sites/apache-apisix/deploys/622034a0a834be0008949519)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] yzeng25 merged pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
yzeng25 merged pull request #930:
URL: https://github.com/apache/apisix-website/pull/930


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   ✔️ Deploy Preview for *apache-apisix* ready!
   
   
   🔨 Explore the source changes: 27aa83b0eb83bcd7f5b037085b7fc509f193872d
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/621f3b634409080008904fcf](https://app.netlify.com/sites/apache-apisix/deploys/621f3b634409080008904fcf)
   
   😎 Browse the preview: [https://deploy-preview-930--apache-apisix.netlify.app](https://deploy-preview-930--apache-apisix.netlify.app)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] yzeng25 commented on a change in pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
yzeng25 commented on a change in pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#discussion_r817631094



##########
File path: website/i18n/zh/docusaurus-plugin-content-blog/2022/03/02/apisix-integration-graphql-plugin.md
##########
@@ -0,0 +1,347 @@
+---
+title: "GraphQL 碰撞 API 网关 Apache APISIX,提升 API 领域的安全与性能"
+authors:
+  - name: "江晨炜"
+    title: "Author"
+    url: "https://github.com/Chever-John"
+    image_url: "https://avatars.githubusercontent.com/u/43690894?v=4"
+  - name: "韩飞"
+    title: "Technical Writer"
+    url: "https://github.com/hf400159"
+    image_url: "https://avatars.githubusercontent.com/u/97138894?v=4"
+keywords: 
+- Apache APISIX
+- API Gateway
+- GraphQL
+- Ecosystem
+description: 本文介绍了 Apache APISIX 和 GraphQL 的特性,以及如何使用云原生 API 网关 Apache APISIX 代理 GraphQL 请求,并提出解决实际场景痛点的方案。
+tags: [Technology,Ecosystem,Security]

Review comment:
       The `Security` tag is meant for CVE news. Please delete this tag to avoid confusion.

##########
File path: website/i18n/zh/docusaurus-plugin-content-blog/2022/03/02/apisix-integration-graphql-plugin.md
##########
@@ -0,0 +1,347 @@
+---
+title: "GraphQL 碰撞 API 网关 Apache APISIX,提升 API 领域的安全与性能"
+authors:
+  - name: "江晨炜"
+    title: "Author"
+    url: "https://github.com/Chever-John"
+    image_url: "https://avatars.githubusercontent.com/u/43690894?v=4"
+  - name: "韩飞"
+    title: "Technical Writer"
+    url: "https://github.com/hf400159"
+    image_url: "https://avatars.githubusercontent.com/u/97138894?v=4"
+keywords: 
+- Apache APISIX
+- API Gateway
+- GraphQL
+- Ecosystem
+description: 本文介绍了 Apache APISIX 和 GraphQL 的特性,以及如何使用云原生 API 网关 Apache APISIX 代理 GraphQL 请求,并提出解决实际场景痛点的方案。
+tags: [Technology,Ecosystem,Security]
+---
+
+> 本文介绍了 Apache APISIX 和 GraphQL 的特性,以及如何使用 API 网关 Apache APISIX 代理 GraphQL 请求,并提出解决实际场景痛点的方案。
+
+<!--truncate-->
+
+## 背景信息
+
+GraphQL 是一个开源的、面向 API 而创造出来的数据查询操作语言以及相应的运行环境。最初由 Facebook 于 2012 年内部开发,2015 年公开发布。2018 年 11 月 7 日,Facebook 将 GraphQL 项目转移到新成立的 GraphQL 基金会。
+
+您可以把 GraphQL 类比为 SQL 查询语句来理解,与 SQL 查询语句相比,GraphQL 对 API 中的数据提供了一套易于理解的完整描述,让客户端能够通过自定义的描述来准确获得其所需要的数据。这也让 API 能够从容面对日益复杂的接口发展,并避免最终成为一个令人望而生畏的复杂接口。
+
+Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
+
+Apache APISIX 作为云原生 API 网关,在设计之初就已经具备识别 GraphQL 语法的匹配能力。通过对请求中携带的 GraphQL 语句进行高效匹配,筛除异常流量,进一步保证安全性和提高系统性能。
+
+### 场景解析
+
+我们正处于大数据大流量的时代,Apache APISIX 和  GraphQL 可以通过结合的方式,形成共赢的局面。接下来举一个场景具体说明。
+
+本文将会讨论微服务架构场景下的 Apache APISIX 和 GraphQL 的实际应用。
+
+### 实际场景中遇到的问题
+
+在项目进行到后期时,往往会出现业务复杂化、团队人员流动性高等问题,而微服务架构已经成为解决这类问题的常见解决方案。在微服务架构中,GraphQL 暴露出的接口分为分散式和集中式两种,然而只有集中式接口设计才能够最大化体现 GraphQL 的优势,但是在集中式接口设计中,所有的微服务对外暴露的是同一个接口,**因此处理流量的路由就不能简单地根据 URL 进行转发,而是应该根据请求中包含的不同字段进行转发**。
+
+由于 NGINX 处理请求时仅会处理 URL 以及一些参数,但是只有解析请求参数中的查询信息才可以知道客户端访问的资源,从而进行路由转发,因此这种路由转发方式通过传统的 NGINX 是无法完成的。在实际应用场景中,将 GraphQL 接口直接对外暴露非常危险,因此需要一个专业的高性能 API 网关保护 GraphQL 的接口。
+
+### 解决方案
+
+基于 Apache APISIX 安全、稳定、高性能的特性,增加 GraphQL 灵活的路由匹配规则是解决 GraphQL 集中式接口设计问题的最佳方案。
+
+![error/graphql.png](https://static.apiseven.com/202108/1646200966179-1d649ab0-8d49-49f5-a8fa-a1a30af0519d.png)

Review comment:
       I think the image name is duplicated with line 65. Please change one of them or both of them.

##########
File path: website/blog/2022/03/02/apisix-integration-graphql-plugin.md
##########
@@ -0,0 +1,347 @@
+---
+title: "How to Use GraphQL with API Gateway Apache APISIX"
+authors:
+  - name: "JohnChever"
+    title: "Author"
+    url: "https://github.com/Chever-John"
+    image_url: "https://avatars.githubusercontent.com/u/43690894?v=4"
+  - name: "Fei Han"
+    title: "Technical Writer"
+    url: "https://github.com/hf400159"
+    image_url: "https://avatars.githubusercontent.com/u/97138894?v=4"
+keywords: 
+- Apache APISIX
+- API Gateway
+- GraphQL
+- Ecosystem
+description: This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+tags: [Technology,Ecosystem,Security]

Review comment:
       The Security tag is meant for CVE news. Please delete this tag to avoid confusion.
   ```suggestion
   tags: [Technology,Ecosystem]
   ```

##########
File path: website/blog/2022/03/02/apisix-integration-graphql-plugin.md
##########
@@ -0,0 +1,347 @@
+---
+title: "How to Use GraphQL with API Gateway Apache APISIX"
+authors:
+  - name: "JohnChever"
+    title: "Author"
+    url: "https://github.com/Chever-John"
+    image_url: "https://avatars.githubusercontent.com/u/43690894?v=4"
+  - name: "Fei Han"
+    title: "Technical Writer"
+    url: "https://github.com/hf400159"
+    image_url: "https://avatars.githubusercontent.com/u/97138894?v=4"
+keywords: 
+- Apache APISIX
+- API Gateway
+- GraphQL
+- Ecosystem
+description: This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+tags: [Technology,Ecosystem,Security]
+---
+
+> This article introduces the features of Apache APISIX and GraphQL, and how to use the API gateway Apache APISIX to proxy GraphQL requests, and proposes solutions to solve the pain points of practical scenarios.
+
+<!--truncate-->
+
+## Background Information
+
+GraphQL is an open source, API oriented data query operation language and corresponding running environment. Originally developed internally by Facebook in 2012 and publicly released in 2015. On November 7, 2018, Facebook transferred the GraphQL project to the newly established GraphQL foundation.
+
+You can understand GraphQL by analogy with SQL query statements. Compared with SQL query statements, GraphQL provides an easy to understand and complete description of the data in the API, so that the client can accurately obtain the data it needs through the customized description. This also allows the API to calmly face the development of increasingly complex interfaces and avoid eventually becoming a daunting complex interface.
+
+Apache APISIX is a dynamic, real-time, high-performance API gateway that provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.
+
+As a cloud native API gateway, Apache APISIX already has the matching ability to recognize GraphQL syntax at the beginning of its design. By efficiently matching GraphQL statements carried in requests, it can filter out abnormal traffic to further ensure security and improve system performance.
+
+### Scene Analysis
+
+We are in the era of big data and large traffic, Apache APISIX and GraphQL can be combined to form a win-win situation. The following is a detailed description of a scenario.
+
+This article will discuss the practical application of Apache APISIX and GraphQL in the context of microservice architecture.
+
+### Problems Encountered In the Actual Scene
+
+In the late stage of the project, business complexity and team mobility are often the problems. Micro service architecture has become a common solution to such problems. In microservice architecture, GraphQL exposes two kinds of interfaces: decentralized and centralized. However, only centralized interface design can maximize GraphQL's advantages. However, in centralized interface design, all microservices are exposed to the same interface. **So processing flow routing cannot simply forwarded according to the URL, but should be based on the request contained in different fields are forwarded.**
+
+Because NGINX only processes URLs and some parameters when processing requests, but only by parsing the query information in the request parameters can the resources accessed by the client be known, so as to perform routing forwarding, so this routing forwarding method cannot be completed through traditional NGINX. . In practical application scenarios, it is very dangerous to directly expose the GraphQL interface to the outside world, so a professional high-performance API gateway is required to protect the GraphQL interface.
+
+### Solution
+
+Based on the security, stability, and high performance of Apache APISIX, adding flexible routing matching rules to GraphQL is the best solution to GraphQL's centralized interface design.
+
+![error/graphql.png](https://static.apiseven.com/202108/1646200966179-1d649ab0-8d49-49f5-a8fa-a1a30af0519d.png)

Review comment:
       I think the image name is duplicated with line 65. Please change one of them or both of them.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452






-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   👷 Deploy Preview for *apache-apisix* processing.
   
   
   🔨 Explore the source changes: aaef9bd9acdf3352d33b7bbac9fa4e8d712cfe5d
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/62205c31483b9f0007569ee4](https://app.netlify.com/sites/apache-apisix/deploys/62205c31483b9f0007569ee4)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   ✔️ Deploy Preview for *apache-apisix* ready!
   
   
   🔨 Explore the source changes: 8c923005f66470b9ba04c3a49b7811beab4fb01b
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/621f2ce6f4122a00087aad2c](https://app.netlify.com/sites/apache-apisix/deploys/621f2ce6f4122a00087aad2c)
   
   😎 Browse the preview: [https://deploy-preview-930--apache-apisix.netlify.app](https://deploy-preview-930--apache-apisix.netlify.app)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   👷 Deploy Preview for *apache-apisix* processing.
   
   
   🔨 Explore the source changes: dca4c030a9adc6281bd3334015dab6b5076d23f8
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/621f327c7c25e30007e9c13c](https://app.netlify.com/sites/apache-apisix/deploys/621f327c7c25e30007e9c13c)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [apisix-website] netlify[bot] edited a comment on pull request #930: docs: add GraphQL blog

Posted by GitBox <gi...@apache.org>.
netlify[bot] edited a comment on pull request #930:
URL: https://github.com/apache/apisix-website/pull/930#issuecomment-1056575452


   👷 Deploy Preview for *apache-apisix* processing.
   
   
   🔨 Explore the source changes: 27aa83b0eb83bcd7f5b037085b7fc509f193872d
   
   🔍 Inspect the deploy log: [https://app.netlify.com/sites/apache-apisix/deploys/621f3b634409080008904fcf](https://app.netlify.com/sites/apache-apisix/deploys/621f3b634409080008904fcf)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org