### Install, Initiate, and Start APISIX Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2024/10/22/apisix-integrates-with-open-appsec.md Installs a specific version of APISIX, initializes its configuration, and starts the service. Ensure prerequisites and repositories are set up beforehand. ```shell apt install apisix=3.9.1-0 apisix init apisix start ``` -------------------------------- ### Quickstart Installation of APISIX Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2025/07/31/load-balancing-between-ai-ml-api-with-apisix.md Download and run the APISIX quickstart script which includes etcd and APISIX. Confirm APISIX is running by checking the server header. ```bash # 1. Download and run the quickstart script (includes etcd + APISIX) curl -sL https://run.api7.ai/apisix/quickstart | sh # 2. Confirm APISIX is up and running curl -I http://127.0.0.1:9080 | grep Server # ➜ Server: APISIX/3.13.0 ``` -------------------------------- ### Start Apache APISIX Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/01/18/consul-with-apisix.md Navigate to the example folder and start APISIX using Docker Compose. ```sh # cd example folder,and start APISIX docker-compose -f docker-compose.yml -p apisix-docker up -d ``` -------------------------------- ### Start Keycloak in Development Mode Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/01/02/accessing_apisix-dashboard_from_everywhere_with_keycloak_authentication.md Navigate to the Keycloak bin directory and start Keycloak using the `kc.sh` script in development mode. This is suitable for testing and initial setup. ```bash cd ~/H/keycloak-20.0.1/bin/ ./kc.sh start-dev ``` -------------------------------- ### Install Protocol Buffer Tools Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/25/apisix-grpc-web-integration.md Installs protoc compiler and gRPC web plugins for Go and JavaScript. Ensure you have wget and unzip installed. ```bash #!/usr/bin/env bash set -ex PROTOBUF_VERSION="3.19.0" wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOBUF_VERSION}/protoc-${PROTOBUF_VERSION}-linux-x86_64.zip unzip protoc-${PROTOBUF_VERSION}-linux-x86_64.zip mv bin/protoc /usr/local/bin/protoc mv include/google /usr/local/include/ chmod +x /usr/local/bin/protoc PROTO_GO_PLUGIN_VER="1.2.0" wget https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v${PROTO_GO_PLUGIN_VER}/protoc-gen-go-grpc.v${PROTO_GO_PLUGIN_VER}.linux.amd64.tar.gz tar -zxvf protoc-gen-go-grpc.v${PROTO_GO_PLUGIN_VER}.linux.amd64.tar.gz mv protoc-gen-go-grpc /usr/local/bin/protoc-gen-go chmod +x /usr/local/bin/protoc-gen-go PROTO_JS_PLUGIN_VER="1.3.0" wget https://github.com/grpc/grpc-web/releases/download/${PROTO_JS_PLUGIN_VER}/protoc-gen-grpc-web-${PROTO_JS_PLUGIN_VER}-linux-x86_64 mv protoc-gen-grpc-web-${PROTO_JS_PLUGIN_VER}-linux-x86_64 /usr/local/bin/protoc-gen-grpc-web chmod +x /usr/local/bin/protoc-gen-grpc-web ``` -------------------------------- ### Cert Manager Deployment Status Example Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/10/22/cert-manager-in-ingress.md An example output of 'kubectl get all -n ingress-apisix' showing the status of pods, services, deployments, replicasets, statefulsets, and jobs related to cert-manager and APISIX. Look for 'Running' status and ensure no pods are in a 'Terminating' or 'Error' state. ```shell NAME READY STATUS RESTARTS AGE pod/apisix-5d99956d88-j68sj 1/1 Running 0 63s pod/apisix-69459554d4-btnwn 0/1 Terminating 0 57m pod/apisix-etcd-0 1/1 Running 0 57m pod/apisix-etcd-1 1/1 Running 0 57m pod/apisix-etcd-2 0/1 Running 0 50s pod/apisix-ingress-controller-7b5c767cc7-j62hb 1/1 Running 0 55m pod/cert-manager-5ffd4f6c89-q9f7m 1/1 Running 0 45m pod/cert-manager-cainjector-748dc889c5-nrvkh 1/1 Running 0 45m pod/cert-manager-startupapicheck-kmgxf 0/1 Completed 0 45m pod/cert-manager-webhook-bc964d98b-mkjj7 1/1 Running 0 45m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/apisix-admin ClusterIP 10.96.16.25 9180/TCP 57m service/apisix-etcd ClusterIP 10.96.232.251 2379/TCP,2380/TCP 57m service/apisix-etcd-headless ClusterIP None 2379/TCP,2380/TCP 57m service/apisix-gateway NodePort 10.96.118.75 80:32039/TCP,443:30107/TCP 57m service/apisix-ingress-controller ClusterIP 10.96.13.76 80/TCP 57m service/cert-manager-webhook ClusterIP 10.96.182.188 443/TCP 45m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/apisix 1/1 1 1 57m deployment.apps/apisix-ingress-controller 1/1 1 1 57m deployment.apps/cert-manager 1/1 1 1 45m deployment.apps/cert-manager-cainjector 1/1 1 1 45m deployment.apps/cert-manager-webhook 1/1 1 1 45m NAME DESIRED CURRENT READY AGE replicaset.apps/apisix-5d99956d88 1 1 1 63s replicaset.apps/apisix-69459554d4 0 0 0 57m replicaset.apps/apisix-ingress-controller-74c6b5fbdd 0 0 0 57m replicaset.apps/apisix-ingress-controller-7b5c767cc7 1 1 1 55m replicaset.apps/apisix-ingress-controller-7d58db957c 0 0 0 55m replicaset.apps/cert-manager-5ffd4f6c89 1 1 1 45m replicaset.apps/cert-manager-cainjector-748dc889c5 1 1 1 45m replicaset.apps/cert-manager-webhook-bc964d98b 1 1 1 45m NAME READY AGE statefulset.apps/apisix-etcd 2/3 57m NAME COMPLETIONS DURATION AGE job.batch/cert-manager-startupapicheck 1/1 6m24s 45m ``` -------------------------------- ### Initialize and Start APISIX Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2024/04/05/build-apisix-in-sles15.md Run these commands to initialize the APISIX configuration and then start the service. ```shell apisix init apisix start ``` -------------------------------- ### High Availability Pod Status Example Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/10/18/ingress-apisix.md Example output showing multiple replicas of the APISIX Ingress Controller deployment running, indicating successful high availability setup. ```text NAME READY STATUS RESTARTS AGE ingress-apisix-composite-deployment-6bfdc5d6f6-gjgql 2/2 Running 0 20s ingress-apisix-composite-deployment-6bfdc5d6f6-jb24q 2/2 Running 0 20s ingress-apisix-composite-deployment-6bfdc5d6f6-sjpzr 2/2 Running 0 45h ``` -------------------------------- ### Install APISIX ADC via Go Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/10/07/apisix-gitops-adc.md Install the ADC binary to your Go bin directory using the go install command. Ensure your Go environment is set up correctly. ```shell go install github.com/api7/adc@latest ``` -------------------------------- ### Enable and Start Keycloak Service Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/01/02/accessing_apisix-dashboard_from_everywhere_with_keycloak_authentication.md Enable the Keycloak systemd service to start automatically on boot and then start the service immediately. Verify its status afterwards. ```bash sudo systemctl enable keycloak sudo systemctl start keycloak ``` -------------------------------- ### Install Docker Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/06/07/installation-performance-test-of-apigateway-apisix-on-aws-graviton3.md Installs Docker on Ubuntu 20.04. Ensure Docker is installed before proceeding with APISIX deployment. ```shell sudo apt-get update && sudo apt-get install docker.io ``` -------------------------------- ### Start grpc-server Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/12/30/apisix-proxy-grpc-service.md Navigate to the cloned directory and start the gRPC server using the provided Go script. ```shell cd grpc_server_example go run main.go ``` -------------------------------- ### Install Nginx Prerequisites Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/01/02/accessing_apisix-dashboard_from_everywhere_with_keycloak_authentication.md Install necessary packages for Nginx installation, including wget for downloading files, GPG for key management, and other utilities. ```bash sudo apt install wget gnupg2 ca-certificates lsb-release ubuntu-keyring software-properties-common -y ``` -------------------------------- ### Install OpenResty Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/11/building-apisix-in-ubuntu-for-arm.md Install the OpenResty software package using APT. ```shell sudo apt-get -y install openresty ``` -------------------------------- ### Install Client Dependencies Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/25/apisix-grpc-web-integration.md Install the necessary npm packages for gRPC-Web and Google Protobuf. ```shell $ npm i grpc-web $ npm i google-protobuf ``` -------------------------------- ### Install APISIX Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/11/building-apisix-in-ubuntu-for-arm.md Install APISIX after all dependencies are met. Use sudo if permission errors occur. ```shell make install ``` ```shell sudo make install ``` -------------------------------- ### Install Nginx Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/01/02/accessing_apisix-dashboard_from_everywhere_with_keycloak_authentication.md Update the package list again after adding the new repository and then install the Nginx web server. ```bash sudo apt update sudo apt install nginx ``` -------------------------------- ### Start RocketMQ Broker Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/12/08/apisix-integrate-rocketmq-logger-plugin.md Starts the RocketMQ NameServer and Broker for local testing. Ensure RocketMQ is downloaded and extracted. ```shell wget https://dlcdn.apache.org/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip unzip rocketmq-all-4.9.2-bin-release.zip cd rocketmq-4.9.2/ nohup sh bin/mqnamesrv & nohup sh bin/mqbroker -n 127.0.0.1:9876 -c conf/broker.conf & ``` -------------------------------- ### Install Dependencies and Prepare Data Source: https://github.com/apache/apisix-website/blob/master/README.md Run these commands after downloading the project for the first time to install dependencies and prepare necessary data. If issues arise, try running them again. ```sh # 1. Install deps yarn # 2. Prepare necessary data yarn prepare-data ``` -------------------------------- ### Start Apache APISIX Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/08/16/Using-the-Apache-APISIX-OpenID-Connect-Plugin-for-Centralized-Authentication.md Starts the Apache APISIX service. This command is used after installation and initialization to bring the service online. ```shell apisix start ``` -------------------------------- ### Compile and Start Server Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/25/apisix-grpc-web-integration.md Build the Go server application and run the executable. ```bash go build -o grpc-server server.go ./grpc-server ``` -------------------------------- ### Download APISIX Example Configuration Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2024/10/22/apisix-integrates-with-open-appsec.md Download a sample APISIX declarative configuration file for verification. ```bash wget https://raw.githubusercontent.com/openappsec/openappsec/main/deployment/apisix/apisix-example-config/apisix-standalone.yaml -O ./apisix-localconfig/apisix-standalone.yaml ``` -------------------------------- ### Create Backend Service and Expose Pod Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/10/22/cert-manager-in-ingress.md Sets up a backend service named 'httpbin' using the 'kennethreitz/httpbin' image and exposes it on port 80. ```shell # Create backend kubectl run httpbin --image kennethreitz/httpbin --namespace ingress-apisix kubectl expose pod httpbin -n ingress-apisix --port 80 ``` -------------------------------- ### Testing APISIX with Coraza - Normal Request Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2024/02/13/apisix-owasp-coraza-core-ruleset.md Send a normal GET request to APISIX to verify the setup. The response should be a JSON object with request details. ```bash curl localhost:9080?user=foobar ``` -------------------------------- ### Start Development Preview for Docs Source: https://github.com/apache/apisix-website/blob/master/README.md Use these commands to start the development server for previewing changes to documentation, blogs, or pages. Only English docs are built by default in development mode. ```sh # Start docs part yarn start:doc ``` ```sh # Start English Blog yarn start:blog:en ``` ```sh # Start Chinese Blog yarn start:blog:zh ``` ```sh # Start general docs, other pages part yarn start:website ``` -------------------------------- ### Configure Nginx Upstream with TLS Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/03/23/mtls-everywhere.md Defines a Kubernetes ConfigMap for Nginx configuration and a Pod to serve static content over TLS. This setup is used as an example for securing upstream services. ```yaml apiVersion: v1 kind: ConfigMap #1 metadata: name: nginx-config namespace: tls data: nginx.conf: >- events { worker_connections 1024; } http { server { listen 443 ssl; server_name upstream; ssl_certificate /etc/ssl/private/tls.crt; #2 ssl_certificate_key /etc/ssl/private/tls.key; #2 root /www/data; location / { index index.json; } } } --- apiVersion: v1 kind: Pod metadata: name: upstream namespace: tls labels: role: upstream spec: containers: - name: upstream image: nginx:1.23-alpine ports: - containerPort: 443 volumeMounts: - name: config mountPath: /etc/nginx/nginx.conf #1 subPath: nginx.conf - name: content mountPath: /www/data/index.json #3 subPath: index.json - name: ssl #2 mountPath: /etc/ssl/private volumes: - name: config configMap: name: nginx-config - name: ssl #2 secret: secretName: upstream-secret - name: content #3 configMap: name: nginx-content ``` -------------------------------- ### Configure Route with Coraza WAF Rules Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/09/08/APISIX-integrates-with-Coraza.md Use the APISIX Admin API to create or update a route, enabling the 'coraza-filter' plugin and defining WAF directives. This example sets up a rule to deny requests starting with '/anything'. ```bash curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{ "uri": "/anything", "plugins": { "coraza-filter": { "conf": { "directives_map": { "default": [ "SecDebugLogLevel 9", "SecRuleEngine On", "SecRule REQUEST_URI \"@beginsWith /anything\" \"id:101,phase:1,t:lowercase,deny\"" ] }, "default_directives": "default" } } }, "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } } }' ``` -------------------------------- ### Create OPA Policy Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/12/24/open-policy-agent.md Defines an OPA policy named 'example' to control access based on request headers, method, path, and query parameters. This policy checks for a specific header, GET method, path prefix, and query parameters. ```shell # Create policy curl -XPUT 'localhost:8181/v1/policies/example' \ --header 'Content-Type: text/plain' \ --data-raw 'package example import input.request import data.users default allow = false allow { # has the name test-header with the value only-for-test request header request.headers["test-header"] == "only-for-test" # The request method is GET request.method == "GET" # The request path starts with /get startswith(request.path, "/get") # GET parameter test exists and is not equal to abcd request.query["test"] != "abcd" # GET parameter user exists request.query["user"] } reason = users[request.query["user"]].reason { not allow request.query["user"] } headers = users[request.query["user"]].headers { not allow request.query["user"] } status_code = users[request.query["user"]].status_code { not allow request.query["user"] }' ``` -------------------------------- ### Install APISIX Dashboard with Helm Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/06/14/how-mse-supports-canary-release-with-apache-apisix.md Install the APISIX Dashboard using Helm. Specify the namespace for the installation. ```bash helm repo add apisix https://charts.apiseven.com helm repo update helm install apisix-dashboard apisix/apisix-dashboard --namespace ingress-apisix ``` -------------------------------- ### Directory Structure of Go Runner Example Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/08/19/go-makes-Apache-APISIX-better.md This shows the file organization for a typical Go plugin runner example. It includes the main entry point, tests, and plugin-specific files. ```bash tree cmd/go-runner cmd/go-runner ├── main.go ├── main_test.go ├── plugins │ ├── say.go │ └── say_test.go └── version.go ``` -------------------------------- ### Build and Preview Website Source: https://github.com/apache/apisix-website/blob/master/README.md These commands build and serve the website locally, mimicking the online environment. The `preview=true` environment variable or `build:preview` command is required. ```bash # Since the local environment is slightly different from the online one, you must add the environment variable `preview` preview=true yarn build # or yarn build:preview ``` ```bash # The above commands only build the site, to preview it locally you need the following commands yarn serve ``` -------------------------------- ### Install APISIX Dependencies Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/11/building-apisix-in-ubuntu-for-arm.md Run the automation script to install project dependencies. This may fail if OpenResty is not installed. ```shell bash utils/install-dependencies.sh ``` -------------------------------- ### Deploy Sample HTTPBin Project Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/11/17/dapr-with-apisix.md Applies Kubernetes manifests to deploy the HTTPBin sample application. ```shell kubectl apply -f 01.namespace.yaml kubectl apply -f 02.deployment.yaml kubectl apply -f 03.svc.yaml ``` -------------------------------- ### Download Open AppSec Installer Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2024/10/22/apisix-integrates-with-open-appsec.md Downloads the Open AppSec installer script and makes it executable. This script is used to install the WAF agent. ```shell wget https://downloads.openappsec.io/open-appsec-install && chmod +x open-appsec-install ``` -------------------------------- ### Deploy Sample Application Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/09/09/kubernetes-ingress-with-apisix.md Deploys a sample HTTP server application on Kubernetes. Ensure the image 'navendup/bare-minimum-api' is accessible. ```shell kubectl run bare-minimum-api-v1 --image navendup/bare-minimum-api --port 8080 -- 8080 v1.0 kubectl expose pod bare-minimum-api-v1 --port 8080 ``` ```shell kubectl port-forward bare-minimum-api-v1 8080:8080 ``` ```shell curl http://127.0.0.1:8080 ``` ```shell kubectl run bare-minimum-api-v2 --image navendup/bare-minimum-api --port 8081 -- 8081 v2.0 kubectl expose pod bare-minimum-api-v2 --port 8081 ``` -------------------------------- ### Install cert-manager with Helm Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/03/23/mtls-everywhere.md Installs cert-manager using Helm, adding the repository and configuring the installation. Ensure to use the correct version and namespace. ```bash helm repo add jetstack https://charts.jetstack.io #1 helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.11.0 \ --set installCRDs=true \ --set prometheus.enabled=false #3 ``` -------------------------------- ### Download open-appsec Configuration File Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2024/10/22/apisix-integrates-with-open-appsec.md Download the initial declarative configuration file for open-appsec. ```bash wget https://raw.githubusercontent.com/openappsec/openappsec/main/config/linux/latest/prevent/local_policy.yaml -O appsec-localconfig/local_policy.yaml ``` -------------------------------- ### Clone grpc-server-example Repository Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/12/30/apisix-proxy-grpc-service.md Clone the grpc-server-example repository to set up a sample gRPC service. ```shell git clone https://github.com/api7/grpc_server_example ``` -------------------------------- ### Install Missing APT Packages Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/11/building-apisix-in-ubuntu-for-arm.md Install essential packages like wget, sudo, and unzip if they are missing, which might be required for LuaRocks installation. ```shell sudo apt install wget sudo unzip ``` -------------------------------- ### Install Istio with Minimal Profile Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/12/17/exposure-istio-with-apisix-ingress.md Bash command to install Istio on the Kubernetes cluster using a minimal profile. The '-y' flag confirms the installation. ```bash istioctl install --set profile=minimal -y ``` -------------------------------- ### Clone and Set Up Repository Source: https://github.com/apache/apisix-website/blob/master/README.md Clone your fork of the repository and add the upstream remote. Ensure you are in the 'apisix-website' directory. ```bash git clone git@github.com:${your GitHub name}/apisix-website.git # add this repo as upstream git remote add upstream https://github.com/apache/apisix-website.git # default dir should be apisix-website cd apisix-website ``` -------------------------------- ### Install Software Properties Common Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/01/11/building-apisix-in-ubuntu-for-arm.md Install a package that provides scripts for managing repositories and adding PPAs. This step is optional. ```shell sudo apt-get -y install --no-install-recommends software-properties-common ``` -------------------------------- ### Install Cert Manager with Helm Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/10/22/cert-manager-in-ingress.md Install cert-manager using Helm, ensuring CRDs are installed and Prometheus is disabled. This command should be run in the 'ingress-apisix' namespace. ```shell helm install cert-manager jetstack/cert-manager --namespace ingress-apisix --set prometheus.enabled=false --set installCRDs=true ``` -------------------------------- ### Build and Preview Individual Parts Source: https://github.com/apache/apisix-website/blob/master/README.md You can build and preview each part of the website (docs, blogs, general pages) individually, similar to development mode, by combining build and serve commands with the `preview=true` environment variable. ```bash preview=true yarn build:doc && yarn serve:doc ``` ```bash preview=true yarn build:blog:en && yarn serve:blog:en ``` ```bash preview=true yarn build:blog:zh && yarn serve:blog:zh ``` ```bash preview=true yarn build:website && yarn serve:website ``` -------------------------------- ### Install Prometheus Operator and Grafana with Helm Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2021/12/13/monitor-apisix-ingress-controller-with-prometheus.md Set up the Prometheus Operator, which also installs Grafana, by adding the prometheus-community Helm repository and installing the kube-prometheus-stack chart. ```shell helm repo add prometheus-community https://prometheus-community.github.io/helm-charts heml repo update kubectl create namespace prometheus helm install prometheus prometheus-community/kube-prometheus-stack -n prometheus ``` -------------------------------- ### Start a Test Service with Koa Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2022/03/04/apisix-uses-coredns-enable-service-discovery.md Use Node.js's Koa framework to start a simple test service on a specified port. This service will respond with 'Hello World'. ```Shell const Koa = require('koa'); const app = new Koa(); app.use(async ctx => { ctx.body = 'Hello World'; }); app.listen(3005); ``` -------------------------------- ### GraphQL Query Example Source: https://github.com/apache/apisix-website/blob/master/blog/en/blog/2023/03/10/release-apache-apisix-3.2.0.md An example of a GraphQL query with variables. ```graphql query($name: String!, $githubAccount: String!) { persons(filter: { name: $name, githubAccount: $githubAccount }) { id name blog githubAccount talks { id title } } } ```