That is a new feature I want to implement it.

Let us discuss it first.

On Thu, Oct 29, 2020 at 5:05 PM YuanSheng Wang <[email protected]> wrote:

> *what is GraphQL*
>
> GraphQL is a query language for APIs and a runtime for fulfilling those
> queries with your existing data. GraphQL provides a complete and
> understandable description of the data in your API, gives clients the power
> to ask for exactly what they need and nothing more, makes it easier to
> evolve APIs over time, and enables powerful developer tools.
>
> *How GraphQL works*
>
> `client` -> `APISIX` -> `GraphQL server` .
>
> Proxy the user's GraphQL request and forward it to the GraphQL server
> according to the user's request information.
>
> When a client resource requests, GraphQL is submitted in the request body,
> for example:
>
> ```
> curl http://***/graphql -X POST -d '
> query getUser($id: ID) {
>   person(id: $id) {
>     firstName
>     lastName
>   }
> }
> '
> ```
>
> ## feature
>
> > **1th feature**: Forward to different requests upstream according to
> the root field.
>
> ```lua
> local graphql_str = [[
> query getUser($id: ID) {    -- root
>   person(id: $id) {         -- field 为 `person`
>     firstName
>     lastName
>   }
> }]]
> local ast = parse(graphql_str)
> ...
> ```
>
> > **2th feature**: For different GraphQL queries, different plugins are
> allowed to be bound.
>
> For example, querying different root fields allows completely different
> plug-ins to be bound.
>
> * query `person`: enable plugin prometheus.
> * query `bill`: enable plugin limit-count and prometheus.
>
> > **3th feature**: Later support GraphQL's `mutation`:
> https://graphql.org/learn/queries/#mutations
>
> *implement way*
>
> Support adding GraphQL field to route matching conditions.
>
> For example:
>
> ```shell
> curl http://127.0.0.1:9080/apisix/admin/routes/1 -X PUT -i -d '
> {
>     "uri": "/graphql",
>     "vars": [
>         ["graphql_field", "==", "person"]
>     ],
>     "upstream": {
>         "type": "roundrobin",
>         "nodes": {
>             "127.0.0.1:3000": 1  # GrapQL server
>         }
>     }
> }'
> ```
>
> --
>
> *MembPhis*
> My GitHub: https://github.com/membphis
> Apache APISIX: https://github.com/apache/apisix
>


-- 

*MembPhis*
My GitHub: https://github.com/membphis
Apache APISIX: https://github.com/apache/apisix

Reply via email to