Thanks, Would be useful if this can be documented as this can be a common use case.
On Thu, Mar 12, 2020 at 1:39 PM YuanSheng Wang <[email protected]> wrote: > hi: > > You can make a try with this route: > > curl "http://127.0.0.1:9080/apisix/admin/routes/1" -X PUT -d ' > { > "uri": "/platform1/getProducts*", > "plugins": { > "proxy-rewrite": { > "regex_uri": [" ^/platform1/getProducts(.*)", "/getProducts$1"] > } > }, > "service_id": "200" > } > > user request: > curl http://****:9080/platform1/getProducts/some_add > itonal_path?additionalParams > upstream got: > curl http://****:9080/getProducts/some_additonal_path?additionalParams > > > > On Thu, Mar 12, 2020 at 5:19 PM Nirojan Selvanathan <[email protected]> > wrote: > > > Hello APISIX team, > > > > I have 2 APIS. > > > > - > > > > API 1: platfrom1.com/getProducts > > - > > > > API 2: platform2.com/getProducts > > > > Both APIs have the same path (getProducts) but return different results. > I > > want to expose them via APISIX. I can do this via two methods with > APISIX. > > > > *Scenario 1* > > > > curl "http://127.0.0.1:9080/apisix/admin/routes/1" -X PUT -d ' > > > > { > > > > "uri": "/getProducts", > > > > "host": "platform1.com", > > > > "service_id": "id_of_platform1.com" > > > > }' > > > > curl "http://127.0.0.1:9080/apisix/admin/routes/2" -X PUT -d ' > > > > { > > > > "uri": "/getProducts", > > > > "host": "platform2.com", > > > > "service_id": "id_of_platform2.com" > > > > }' > > > > > > Then I can invoke the APIs in the following manner. > > > > curl -i -X GET http://127.0.0.1:9080/get -H "Host: platform1.com" > > > > curl -i -X GET http://127.0.0.1:9080/get -H "Host: platform2.com" > > > > My requirement is I do not want the user to call the API via providing > the > > host attribute. The workaround is to rewrite the request. > > > > > > *Scenario 2* > > > > curl "http://127.0.0.1:9080/apisix/admin/routes/1" -X PUT -d ' > > > > { > > > > "uri": "/getPlatform1Products", > > > > "plugins": { > > > > "proxy-rewrite": { > > > > "url": "getProdcuts", > > > > }, > > > > }, > > > > "service_id": "id_of_platform1.com" > > > > }' > > > > > > Instead of doing this I want to invoke the platform 1 functionalities > like > > this (having a prefix): > > > > > > http://127.0.0.1:9080/*platform1* > > /getProducts/some_additonal_path?additionalParams > > > > > > Step 1: Configure route with the following configurations > > > > > > curl "http://127.0.0.1:9080/apisix/admin/routes/1" -X PUT -d ' > > { > > "uri": "/getProducts", > > "plugins": { > > "proxy-rewrite": { > > "remove_path": "platform1" > > } > > }, > > "service_id": "200" > > } > > > > > > Step 2: Call the route. > > > > > > When the platform1/getProducts is invoked proxy rewrite plugin intercepts > > the call and removes the platform1 path and append the rest. Thus the > final > > path will look like this: > > > > platform1/getProducts/some_additonal_path?additionalParams > > > > > > Is this something the regex_uri parameter in proxy rewrite plugin can do, > > or should I create a new attribute to do this modification? > > > > > > -- > > Best Regards, > > S.Nirojan > > > > > -- > *MembPhis* > My github: https://github.com/membphis > Apache APISIX: https://github.com/apache/incubator-apisix > -- Best Regards, S.Nirojan
