Agree, only one thing: We'd better use 201 for POST Request, but 200 makes sense to me as well :)
Best Regards! @ Zhiyuan Ju <https://github.com/juzhiyuan> Xiran Liu <liuxi...@apache.org> 于2021年9月13日周一 上午10:42写道: > Hi community, > > The Route API restful transformation has been discussed for some time, let > me summarize the design options > > * Reorganized Route API List > > | Method | Request URI | Description > | > | ------ | -------------------------------- | > -------------------------------------- | > | GET | /apisix/admin/routes | Fetch resource list > | > | GET | /apisix/admin/routes/{id} | Fetch resource by id > | > | POST | /apisix/admin/routes | Create resource > | > | DELETE | /apisix/admin/routes/{id} | Remove resource by id > | > | PUT | /apisix/admin/routes/{id} | Update/Create resource by > id | > | PATCH | /apisix/admin/routes/{id} | Update resource by id > | > | PUT | /apisix/admin/routes/{id}/{path} | Update specified attribute > though path | > > differences are: > > - change PATCH /apisix/admin/routes/{id}/{path} to PUT > /apisix/admin/routes/{id}/{path}, the reason: when user use this API they > can easier update the whole specified path in the route, refer to > https://en.wikipedia.org/wiki/Patch_verb, PUT method is more suitable. > > * Simplify request parameters > > only keep uris, remove uri, keep hosts, remove host, keep remote_addrs, > remove remote_addr. since uris/hosts/remote_addrs contains > uri/host/remote_addr, there is no need to keep two of them to Increase the > difficulty of choice for users > > * Uniform response parameter format > > - for GET /apisix/admin/routes returns HTTP code 200 and response body as > follows > ```json > { > "items":[{}], > "total_size": 1, > } > ``` > - for > GET /apisix/admin/routes, > POST /apisix/admin/routes, > PUT /apisix/admin/routes/{id} > PATCH /apisix/admin/routes/{id} > PUT /apisix/admin/routes/{id}/{path} > > returns HTTP code 200 and response body as follows > ```json > { > ...route parameters, > } > ``` > - for DELETE /apisix/admin/routes/{id} only returns HTTP code 200 > - when error occurs, it will return HTTP code 4xx and response body as > follows > ```json > { > "message": "xxxx" > } > ``` > > see https://github.com/apache/apisix-dashboard/issues/2105 for more > details > > what do you think? Looking forward to your reply, thanks a lot > > On 2021/08/31 00:50:11, Xiran Liu <liuxi...@apache.org> wrote: > > Sorry for some draft text was left in the previous email, update them to > make it easier to follow the main content > > > > Since both zhiyuan and junxu perfer to this style > > ```text > > POST /apisix/admin/routes > > ``` > > I tried to read more references: > > > > * > https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design > > * > https://www.partech.nl/nl/publicaties/2020/07/9-trending-best-practices-for-rest-api-development# > > > > `In the REST model, you frequently apply POST requests to collections`, > this viewpoint persuaded me, and this is also the way that is accepted by > most people, we should follow it. > > > > Then I tried to list the entire Route module API in detail, and the goal > is to serve as a sample of modifications to other modules, in order to make > it easier to read, I submitted a Proposal in dashboard: > https://github.com/apache/apisix-dashboard/issues/2105 > > > > looking forward to your opinion, thanks a lot > > > > > > > On 2021/08/26 02:41:58, JunXu Chen <chenju...@apache.org> wrote: > > > > 2. create a route, POST PATCH PUT. and GET resource item info > response > > > > refer to this. > > > > > > > > ```text > > > > POST /apisix/admin/route > > > > ``` > > > > > > > > ------------------------------------------ > > > > > > > > I prefer to: > > > > > > > > ```text > > > > POST /apisix/admin/routes > > > > ``` > > > > > > > > > > > > > > > > On Wed, 25 Aug 2021 at 19:08, Zhiyuan Ju <juzhiy...@apache.org> > wrote: > > > > > > > > > Waiting for others opinions, I prefer to keep using /routes here > :) Maybe > > > > > have a look at some popular sites like GitHub and Stripe? > > > > > > > > > > Xiran Liu <liuxi...@apache.org>于2021年8月25日 周三下午7:06写道: > > > > > > > > > > > Thanks zhiyuan~ > > > > > > > > > > > > 1. The singular and plural are involved here, POST would create > a route > > > > > > right, so I think route is better. > > > > > > 2. sorry, this is a mistake, should omit /api here. > > > > > > 3. yes, agree with total_count. > > > > > > > > > > > > > > > > > > > > > > > > On 2021/08/25 10:40:42, Zhiyuan Ju <juzhiy...@apache.org> wrote: > > > > > > > Hi, > > > > > > > > > > > > > > I have some thoughts here: > > > > > > > > > > > > > > 1. We could use POST /apisix/admin/routes instead of /route, > due to the > > > > > > > previous one is more RESTful > > > > > > > > > > > > > > 2. It’s ok to omit the /api/ in the first case > > > > > > > > > > > > > > 3. Use list and total_count instead of items and total_size, > more > > > > > > > meaningful for me :) > > > > > > > > > > > > > > Xiran Liu <liuxi...@apache.org>于2021年8月25日 周三下午6:16写道: > > > > > > > > > > > > > > > Hi Community, > > > > > > > > > > > > > > > > It's been a while since the restful api discussion was > updated. > > > > > > > > > > > > > > > > It seems that we have reached an agreement that we will use > HTTP > > > > > Status > > > > > > > > code instead of the current response body param `code`, when > the > > > > > > request > > > > > > > > got status 200, it will return the request data, and when it > got > > > > > > error, it > > > > > > > > will return the error message in the response body. > > > > > > > > > > > > > > > > I tried to list the two method of Route Module in current > > > > > Manager-api, > > > > > > > > stand for two scenarios, focused on the response parameters, > let's > > > > > see > > > > > > > > whether it meets agreement, > > > > > > > > > > > > > > > > 1. get list of all routes, all list request response refer > to this. > > > > > > > > > > > > > > > > ```text > > > > > > > > GET /apisix/admin/api/routes > > > > > > > > ``` > > > > > > > > Response: > > > > > > > > > > > > > > > > Status: 200 OK - application/json > > > > > > > > > > > > > > > > ```json > > > > > > > > { > > > > > > > > "items": [{"schema of the route"}], > > > > > > > > "total_size": 1, > > > > > > > > } > > > > > > > > ``` > > > > > > > > > > > > > > > > Status: 500 Internal Server Error > > > > > > > > > > > > > > > > ```json > > > > > > > > { > > > > > > > > "message": "Internal Server Error" > > > > > > > > } > > > > > > > > ``` > > > > > > > > > > > > > > > > 2. create a route, POST PATCH PUT. and GET resource item info > > > > > response > > > > > > > > refer to this. > > > > > > > > > > > > > > > > ```text > > > > > > > > POST /apisix/admin/route > > > > > > > > ``` > > > > > > > > Response: > > > > > > > > > > > > > > > > Status: 200 OK - application/json > > > > > > > > > > > > > > > > ```json > > > > > > > > { > > > > > > > > "name": "route1", > > > > > > > > ...other route schema > > > > > > > > } > > > > > > > > ``` > > > > > > > > Note: for the POST PUT PATCH method, will return the updated > resource > > > > > > > > schema, for the GET info method, will return the request > item schema. > > > > > > > > > > > > > > > > Status: 500 Internal Server Error > > > > > > > > > > > > > > > > ```json > > > > > > > > { > > > > > > > > "message": "Internal Server Error" > > > > > > > > } > > > > > > > > ``` > > > > > > > > > > > > > > > > If we have no doubt about this style. I will go on to refine > all the > > > > > > > > interfaces of the route module and at the same time > consistent > > > > > > experience > > > > > > > > with both Manager API and Admin API. > > > > > > > > > > > > > > > > Looking forward to your reply, thanks a lot > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 2021/07/27 08:56:58, Shyamal Madura Chinthaka < > > > > > > shyamal.mad...@gmail.com> > > > > > > > > wrote: > > > > > > > > > Hi Zhiyuna, > > > > > > > > > > > > > > > > > > Yes. step by step. cheers! > > > > > > > > > > > > > > > > > > On Tue, Jul 27, 2021 at 1:51 PM Zhiyuan Ju < > juzhiy...@apache.org> > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Got it, I would prefer to adjust the first revision and > make it > > > > > > > > RESTful. > > > > > > > > > > HATEOAS may be the final version haha :) > > > > > > > > > > > > > > > > > > > > Best Regards! > > > > > > > > > > @ Zhiyuan Ju <https://github.com/juzhiyuan> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Shyamal Madura Chinthaka <shyamal.mad...@gmail.com> > > > > > 于2021年7月27日周二 > > > > > > > > > > 下午4:03写道: > > > > > > > > > > > > > > > > > > > > > Hi Zhiyuan, > > > > > > > > > > > > > > > > > > > > > > Good day to you and all! > > > > > > > > > > > > > > > > > > > > > > Yes, you are spot on. This eventually increases the > robustness > > > > > of > > > > > > > > the API > > > > > > > > > > > to decouple service client static awareness uses the > > > > > > server-provided > > > > > > > > > > links > > > > > > > > > > > to dynamically discover available actions and access > the > > > > > > resources it > > > > > > > > > > > needs. > > > > > > > > > > > > > > > > > > > > > > Regards, > > > > > > > > > > > Shyamal > > > > > > > > > > > > > > > > > > > > > > On Tue, Jul 27, 2021 at 10:31 AM Zhiyuan Ju < > > > > > > juzhiy...@apache.org> > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > Hi, Shyamal, > > > > > > > > > > > > > > > > > > > > > > > > Just to make sure, do you mean you want the response > body > > > > > > including > > > > > > > > > > > > something like `_herf` or `links` to other resources? > > > > > > > > > > > > > > > > > > > > > > > > ```json > > > > > > > > > > > > { > > > > > > > > > > > > "id" : 1, > > > > > > > > > > > > "body" : "My first blog post", > > > > > > > > > > > > "postdate" : "2015-05-30T21:41:12.650Z", > > > > > > > > > > > > "_links" : { > > > > > > > > > > > > "self": { "href": " > http://blog.example.com/posts/1" > > > > > }, > > > > > > > > > > > > "comments": { "href": " > > > > > > > > > > http://blog.example.com/posts/1/comments > > > > > > > > > > > ", > > > > > > > > > > > > "totalcount" : 20 }, > > > > > > > > > > > > "tags": { "href": " > > > > > > http://blog.example.com/posts/1/tags" } > > > > > > > > > > > > } > > > > > > > > > > > > } > > > > > > > > > > > > ``` > > > > > > > > > > > > > > > > > > > > > > > > Best Regards! > > > > > > > > > > > > @ Zhiyuan Ju <https://github.com/juzhiyuan> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Shyamal Madura Chinthaka <shyamal.mad...@gmail.com> > > > > > > 于2021年7月27日周二 > > > > > > > > > > > > 上午2:36写道: > > > > > > > > > > > > > > > > > > > > > > > > > Hi Team, > > > > > > > > > > > > > > > > > > > > > > > > > > +1 to rely on HTTP status code instead of the code > in the > > > > > > > > response > > > > > > > > > > > body. > > > > > > > > > > > > > > > > > > > > > > > > > > This will take our burden of enforcing governance > to > > > > > > > > define/maintain > > > > > > > > > > > > > additional code in the response body which will > unlikely to > > > > > > > > > > effectively > > > > > > > > > > > > > override the HTTP status code. > > > > > > > > > > > > > > > > > > > > > > > > > > However - if possible - enriching the response of > these > > > > > APIs > > > > > > to > > > > > > > > adopt > > > > > > > > > > > > > HATEOAS would be progressive immensely. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Regards, > > > > > > > > > > > > > Shyamal > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Jul 26, 2021, 07:20 Zhiyuan Ju < > > > > > juzhiy...@apache.org > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > > > > > > > > > Users have 2 ways to use our product: Using > Dashboard or > > > > > > Call > > > > > > > > API > > > > > > > > > > > > > directly. > > > > > > > > > > > > > > > > > > > > > > > > > > > > We have JSONSchema checker on the backend, if > users call > > > > > > API > > > > > > > > > > directly > > > > > > > > > > > > and > > > > > > > > > > > > > > check failed, it will return the JSONSchema > error; if > > > > > > users use > > > > > > > > > > > > > Dashboard, > > > > > > > > > > > > > > why not validate data on Web? So I think there > has no > > > > > need > > > > > > to > > > > > > > > add a > > > > > > > > > > > > > > specific login code in the Response Body :) > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best Regards! > > > > > > > > > > > > > > @ Zhiyuan Ju <https://github.com/juzhiyuan> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Chao Zhang <zchao1...@gmail.com> 于2021年7月26日周一 > 上午9:41写道: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > HTTP status code will be fine if we don’t care > the very > > > > > > > > specific > > > > > > > > > > > > error > > > > > > > > > > > > > > > type. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Chao Zhang > > > > > > > > > > > > > > > https://github.com/tokers > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On July 25, 2021 at 17:34:40, Jintao Zhang ( > > > > > > > > > > > > zhangjintao9...@gmail.com) > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I agree! > > > > > > > > > > > > > > > At the same time, I also think that HTTP > Status code > > > > > > should > > > > > > > > be > > > > > > > > > > used > > > > > > > > > > > > > > instead > > > > > > > > > > > > > > > of the logical code field. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Zhiyuan Ju <juzhiy...@apache.org> > 于2021年7月25日周日 > > > > > > 下午3:29写道: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Any further discussion on this mail? I'm > going to > > > > > list > > > > > > all > > > > > > > > APIs > > > > > > > > > > > and > > > > > > > > > > > > > > check > > > > > > > > > > > > > > > > which part we should modify. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best Regards! > > > > > > > > > > > > > > > > @ Zhiyuan Ju <https://github.com/juzhiyuan> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Zhiyuan Ju <juzhiy...@apache.org> > 于2021年7月22日周四 > > > > > > 下午2:47写道: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I would prefer relying on Status Code > instead of > > > > > > `code` > > > > > > > > > > > (actually > > > > > > > > > > > > > > it's > > > > > > > > > > > > > > > a > > > > > > > > > > > > > > > > > manual logical and extendable code). > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Why not list all API cases then have a > choice? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best Regards! > > > > > > > > > > > > > > > > > @ Zhiyuan Ju <https://github.com/juzhiyuan > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Ming Wen <wenm...@apache.org> > 于2021年7月22日周四 > > > > > > 下午12:36写道: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> please give an example about i18n for a > better > > > > > > > > understanding > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> Thanks, > > > > > > > > > > > > > > > > >> Ming Wen, Apache APISIX PMC Chair > > > > > > > > > > > > > > > > >> Twitter: _WenMing > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> JunXu Chen <chenju...@apache.org> > 于2021年7月22日周四 > > > > > > > > 上午11:36写道: > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > Agree +1 > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > I think we still need to keep the > `code` field. > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > The FE needs to implement i18n > according to it. > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > Unless `message` is semantic and can be > used as > > > > > a > > > > > > key > > > > > > > > of > > > > > > > > > > > i18n. > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > On Thu, 22 Jul 2021 at 00:02, Ming Wen < > > > > > > > > > > wenm...@apache.org> > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > I don't think the `code` filed is > useful, HTTP > > > > > > > > response > > > > > > > > > > > code > > > > > > > > > > > > > is > > > > > > > > > > > > > > > > >> enough. > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > Thanks, > > > > > > > > > > > > > > > > >> > > Ming Wen, Apache APISIX PMC Chair > > > > > > > > > > > > > > > > >> > > Twitter: _WenMing > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > Peter Zhu <sta...@apache.org> > 于2021年7月21日周三 > > > > > > > > 下午11:18写道: > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > Agree +1. > > > > > > > > > > > > > > > > >> > > > And I think we should maintain the > `code` > > > > > > filed > > > > > > > > and > > > > > > > > > > > > maintain > > > > > > > > > > > > > > the > > > > > > > > > > > > > > > > >> doc of > > > > > > > > > > > > > > > > >> > > > API. > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > 来自 琚致远 > > > > > > > > > > > > > > > > > > -- > > > > > 来自 琚致远 > > > > > > > > > > > > > > >