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

Reply via email to