My summary for your idea is: 1. move manager-api as a separate project (apiserver), and extend it. 2. fill the gap between manager-api and admin-api
Am I correct? Joey Ma <[email protected]> 于2021年5月24日周一 上午10:38写道: > Sorry for the chart was not shown in the previous email. I resend it here. > > ------------------------------------------------------------------------ > ------------------------------------ > > Hi folks, > > Background > > As we all know that there are two kinds of API in APISIX, one is called > Admin API, written in lua, provided by the APISIX instance and the other is > Manager API, written in Golang, to serve for the APISIX Dashboard. For now, > both APIs are actively maintained and in use. Although they have very much > similar functionality which is mainly to validate the request and write > data into etcd, there are still some slight differences between them. Admin > API has a more complex validation for data schema than Manager API. Let's > take https://github.com/apache/apisix/issues/4150 for example, Admin API > does have a check on the input body to see if it is base64-decodable for > response-rewrite plugin, while there is no such check on Manager API. > Meanwhile, Manager API has much more easy-to-use functionalities for users > than Admin API, such as plugin orchestration. > > So in plan, Manager API will come to the stage to completely replace Admin > API along with APISIX 3.0. While actually, in order to make Manager API as > a pure API for control plane, we still need to move some functionalities > related to UE out of it and add some more validations in it. However, this > will definitely break the compatibility between Manager API and current > APISIX Dashboard. > > In addition, I've got a little of confused which API should be picked for > integration with other projects. For example, the internal architecture > chart ( > https://github.com/apache/apisix-ingress-controller#internal-architecture) > shows that APISIX-ingress-controller is now utilizing Admin API for > managing APISIX. End users are using Manager API via web browser. In issue > https://github.com/apache/apisix-dashboard/issues/1884 , @bzp1000 is > going to create a CLI tool to manage resources in APISIX, then which API > shall we choose? Probably we will have the same confusion when introducing > other tools, like Terraform. > > Solution to discuss > > So in order to make things more clear, after some discussions with some > guys and refer to the implementations of etcd, I want to send a proposal to > introduce a dedicated control-plane API for APISIX. Please see the > following architecture diagram. > > [image: 657A2236-5B9F-43A0-ADE9-5CA688BF8446.png] > > Please let me provide more details on this. > > - The Data Plane only consists of the APISIX, since the > previous Admin-API component is completely removed from the APISIX. This > will keep APISIX as small and simple as possible. > - Move the API layer out of Dashboard, with adding more plugin/schema > validation and removing some APIs only related to UE, then we can call it > APISIX-apiserver who deserves a dedicated repository. So most of current > codes in Manager API could be reused by APISIX-apiserver. > - The data schema validations on writing etcd will be and only be > performed by APISIX-apiserver. APISIX only needs to do validation on > reading from etcd. > - Dashboard will be have its own backend APIs, either keeping current > Go implementation or building a new one written in Node or anything else. > The FE team will be much more free to pick their own solution stack. The > new Dashboard backend will turn to give more focus on users experience and > complicated business logics, such as plugin orchestration, multi tenants, > API lifecycle management, API market, and etc. > - APISIX-apiserver provides both gRPC and restful-json(yaml) APIs for > clients. gRPC will be the most recommend one. While restful-json(yaml) will > also be very helpful for the languages that not well supported by gRPC or > some scenarios that gRPC is unusable. > - The restful-json(yaml) APIs of APISIX-apiserver is provisioned by > the grpc-grpcgateway project which could auto generate all the required > codes for restful APIs, by the gRPC protobuf definitions. > - The APISIX-apiserver can add backward compatibility support for > multiple API versions, which could be well working with various versions of > APISIX. > - The community could officially maintain several most commonly used > gRPC or restful SDKs for developers’ convenience. > > > This will definitely introduce huge changes on current infrastructure. > Please no hesitate to tell me what you think about it and any questions > that you gonna ask. Also please let me know if I was wrong. Looking forward > to you. Thanks. > > On Mon, May 24, 2021 at 10:35 AM Joey Ma <[email protected]> wrote: > >> >> Hi folks, >> >> Background >> >> As we all know that there are two kinds of API in APISIX, one is called >> Admin API, written in lua, provided by the APISIX instance and the other is >> Manager API, written in Golang, to serve for the APISIX Dashboard. For now, >> both APIs are actively maintained and in use. Although they have very much >> similar functionality which is mainly to validate the request and write >> data into etcd, there are still some slight differences between them. Admin >> API has a more complex validation for data schema than Manager API. Let's >> take https://github.com/apache/apisix/issues/4150 for example, Admin API >> does have a check on the input body to see if it is base64-decodable for >> response-rewrite plugin, while there is no such check on Manager API. >> Meanwhile, Manager API has much more easy-to-use functionalities for users >> than Admin API, such as plugin orchestration. >> >> So in the plan, Manager API will come to the stage to completely replace >> Admin API along with APISIX 3.0. While actually, in order to make Manager >> API a pure API for the control plane, we still need to move some >> functionalities related to UE out of it and add some more validations to >> it. However, this will definitely break the compatibility between Manager >> API and the current APISIX Dashboard. >> >> In addition, I've got a little confused about which API should be picked >> for integration with other projects. For example, the internal architecture >> chart ( >> https://github.com/apache/apisix-ingress-controller#internal-architecture) >> shows that APISIX-ingress-controller is now utilizing Admin API for >> managing APISIX. End users are using Manager API via the web browser. In >> issue https://github.com/apache/apisix-dashboard/issues/1884 , @bzp1000 >> is going to create a CLI tool to manage resources in APISIX, then which API >> shall we choose? Probably we will have the same confusion when introducing >> other tools, like Terraform. >> >> Solution to discuss >> >> So in order to make things more clear, after some discussions with some >> guys and refer to the implementations of etcd, I want to send a proposal to >> introduce a dedicated control-plane API for APISIX, which is provided by >> the new APISIX-apiserver project. Please see the following architecture >> diagram. >> >> >> Please let me provide more details on this. >> >> - The Data Plane only consists of the APISIX, since the >> previous Admin-API component is completely removed from the APISIX. This >> will keep APISIX as small and simple as possible. >> - Move the API layer out of Dashboard, add more plugin/schema >> validation and remove some APIs only related to UE, then we can call it >> APISIX-apiserver who deserves a dedicated repository. So most of the >> current codes in Manager API could be reused by APISIX-apiserver. >> - The data schema validations on writing etcd will be and only be >> performed by APISIX-apiserver. APISIX only needs to do validation on >> reading from etcd. >> - Dashboard will have its own backend APIs, either keeping the >> existing Go implementation or building a new one written in Node or >> anything else. The FE team will be much freer to pick their own solution >> stack. The new Dashboard backend will turn to give more focus on users >> experience and complicated business logic, such as plugin orchestration, >> multi-tenants, API lifecycle management, API market, and etc. >> - APISIX-apiserver provides both gRPC and restful-json(yaml) APIs for >> clients. gRPC will be the most recommend one. While restful-json(yaml) >> will >> also be very helpful for the languages that not well supported by gRPC or >> some scenarios that gRPC is unusable. >> - The restful-json(yaml) APIs of APISIX-apiserver is provisioned by >> the grpc-grpcgateway project which could auto-generate all the required >> codes for restful APIs, by the gRPC protobuf definitions. >> - The APISIX-apiserver can add backward compatibility support for >> multiple API versions, which could be well working with various versions >> of >> APISIX. >> - The community could officially maintain several most commonly used >> gRPC or restful SDKs for developers’ convenience. >> >> >> >> >> This will definitely introduce huge changes to the current >> infrastructure. Please no hesitate to tell me what you think about it and >> any questions that you gonna ask. Also please let me know if I was wrong. >> Looking forward to you. Thanks. >> >>
