I have a concern. The debug/disabled state routera are also in the
production system. If there is a bug, it will be very serious.

Thanks,
Ming Wen, Apache APISIX & Apache SkyWalking
Twitter: _WenMing


JunXu Chen <[email protected]> 于2020年9月26日周六 下午11:50写道:

> Hi, community,
>
> @liuxiran previously submitted a nice PR that implements route publish and
> offline feature [1].
>
> We hope that instead of releasing a route immediately, we can test it
> first, and release it after the test result is OK.
>
> So we think it is more suitable to implement this feature directly in
> `Apache APISIX` instead of dashboard.
>
> Here is the implementation steps in my mind:
>
> 1. Add an `enable` field, or another more suitable field to the route
> configuration, and the default value of the field is false when adding a
> route. Which means the route is not released.
>
> 2. Add a matching item `enable` similar to `host` or `method` in the
> `lua-resty-radixtree` library.
> When matching a route for client request, If the value of `enable` is
> false, skip the route directly.
> But when there is `X-APISIX-ROUTE-DEBUG` in the http header and the value
> is true, routes which `enable` are false can be matched according to other
> conditions.
>
> 3. Now, normal client requests will skip routes not released, and requests
> for testing by specifying the http header `X-APISIX-ROUTE-DEBUG` can match
> routes not released, thus realizing our needs.
>
> Example:
>
> 1. Create a route (it's not released by default)
>
> ```shell
> $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H'X-API-KEY:
> edd1c9f034335f136f87ad84b625c8f1'-X PUT -i -d'
> {
>     "Uri": "/route-debug-test",
>     "Upstream": {
>         "Type": "roundrobin",
>         "node":{
>             "127.0.0.1:80": 1
>         }
>     }
> }'
> ```
> 2. Normal request (404 not found)
> ```
> curl 127.0.0.1:9080/route-debug-test
> ```
>
> 3. Debugging (200)
> ```
> curl 127.0.0.1:9080/route-debug-test -H "X-APISIX-ROUTE-DEBUG: true"
> ```
>
> 4. Release the route
> ```
> $ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H'X-API-KEY:
> edd1c9f034335f136f87ad84b625c8f1'-X PATCH -i -d'
> {
>     "Status": 0
> }'
> ```
>
> 5. Normal access (200)
> ```
> curl 127.0.0.1:9080/route-debug-test
> ```
>
>
> [1] https://github.com/apache/apisix-dashboard/pull/451
>

Reply via email to