I think the support to GraphQL is the direction to go.

One suggestion here, I think the support for GraphQL operation is also
important.

For example, people might limit mutation rate to a lower value than query.

So apart from  ["graphql_field", "==", "person"], we better also support
["graphql_operation", "==", "query"]

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

> 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
>


-- 



Jan Li

Senior Software Engineer, Tech



Mobile +86 15316315503

Room 1802, 18th Floor, Tower A, China Overseas International Center

Lane 838, South Huangpi Road, Huangpu District,Shanghai,China



Transforming the way businesses move and manage money globally

Amsterdam | Beijing | Bangalore | Hong Kong | Kuala Lumpur | London |
Melbourne | San Francisco | Shanghai | Shenzhen | Singapore | Tokyo

Reply via email to