Resending to Architecture Thanks
*Dinesh J. Weerakkody* Software Engineer WSO2 Inc. lean | enterprise | middleware M : +94 727 361788 | E : [email protected] | W : www.wso2.com On Mon, Jan 26, 2015 at 1:04 PM, Dinesh J Weerakkody <[email protected]> wrote: > Hi All, > > We had a review meeting on 23 Jan 2015 to review the progress of this > feature. Following points were discussed during the meeting. > > > > > > > - RXT file which is created in registry at API creation time will > contain new two field. (Data migration is required when upgrading existing > APIs to new version) > - version-type Ex: none, url, context > - context-template Ex: /{version}/api) > - Resolved context will be stored in the APIM database since those > data is used in key validation service in runtime > - Synapse XML will contain the context template as the context and > will be resolved in deployment time. New version strategy > (ContextVersionStratergy) will be introduced to Sysnapse > - Version strategy used in API will be set to the synapse message > context from synapse side when API is invoked. This will be used in APIM > side when retrieving the details in URL. > > Please add if I have missed anything. > > > > > Thanks > > *Dinesh J. Weerakkody* > Software Engineer > WSO2 Inc. > lean | enterprise | middleware > M : +94 727 361788 | E : [email protected] | W : www.wso2.com > > On Thu, Jan 15, 2015 at 8:08 AM, Dinesh J Weerakkody <[email protected]> > wrote: > >> >> On Thu, Jan 15, 2015 at 12:17 AM, Nuwan Dias <[email protected]> wrote: >> >>> >>> On Tue, Jan 13, 2015 at 11:11 AM, Dinesh J Weerakkody <[email protected]> >>> wrote: >>> >>>> Hi All, >>>> >>>> I have tested the above proposed method with a fresh APIM 1.8 pack. We >>>> can successfully create and invoke APIs as follows. >>>> >>>> [image: Inline image 1] >>>> >>>> Here what we do is simply add the version number to context. Also I >>>> have removed version from the resulting synapse api xml file (smiler to >>>> default version) otherwise we have to send version number after the context >>>> (Ex: http://localhost:8280/1.0.0/docman/*1.0.0*/add). >>>> >>>> Now we can invoke this API as follows since context is matching to >>>> request url and this is default version. >>>> http://localhost:8280/1.0.0/docman/add >>>> >>>> With the above solution system doesn't allow us to create a new version >>>> of the API. Currently synapse doesn't allow to use deferent contexts with >>>> same API name. >>>> Ex: >>>> Name : DOCMan >>>> Context : */1.0.0/docman* >>>> Version: 1.0.0 >>>> >>>> Name : DOCMan >>>> Context :* /2.0.0/docman* >>>> Version: 2.0.0 >>>> >>>> We used a template as a context to overcome this situation. >>>> >>>> [image: Inline image 2] >>>> >>> >>> I don't think we should be using {uri.var.version} since it confuses >>> with uri-templates. What if we just use {version} instead? >>> >> >> >> Yes, we can use {version} or any string. I just used {uri.var.version} >> for the time been. >> >> >>> >>>> With this solution context will be same among all versions. We resolve >>>> the context template when API is initializing in synapse runtime. There is >>>> another issue came up with this solution. Synapse doesn't allow to use >>>> version attribute in API xml without a version-type (version strategy) >>>> attribute. URL is the only value that we can use with the version-type >>>> attribute and when we invoke api we must send version after the context if >>>> we use URL as the version strategy. We can introduce a new version strategy >>>> to overcome this situation. For the time been I have disabled the >>>> validation. >>>> >>>> After above mentioned changes we can successfully deploy multiple >>>> versions of the same API. But when we try to invoke the APIs we faced >>>> another issue. When the request comes to APIM side there is a problem in >>>> authentication handler. >>>> >>>> We use context to check whether access is granted to the given token or >>>> not. In APIM side tables we have context template but in runtime we send >>>> resolved context. So there will be no matching access grants and request >>>> will be rejected. >>>> >>> >>> What if we store the resolved context in the database rather than >>> storing the template? >>> >> >> We need to keep context template also. We have to display it back in edit >> page and also use when we update the API from APIM side. >> >> >>> >>>> We have two solutions to overcome this issue. >>>> >>>> - Have a separate column in APIM database to store the resolved >>>> context (Use in runtime) >>>> - Add a new attribute to RXT to store context template (This is >>>> used to display the context template in UI when editing the API) >>>> >>>> I think that the second option is better than adding new columns to the >>>> tables. >>>> >>>> Please share your suggestions or thoughts on this. >>>> >>>> >>>> >>>> >>>> Thanks >>>> >>>> *Dinesh J. Weerakkody* >>>> Software Engineer >>>> WSO2 Inc. >>>> lean | enterprise | middleware >>>> M : +94 727 361788 | E : [email protected] | W : www.wso2.com >>>> >>>> On Tue, Dec 23, 2014 at 5:43 PM, Dinesh J Weerakkody <[email protected]> >>>> wrote: >>>> >>>>> *Participants* >>>>> APIM Team : Sumedha, Nuwan, Sanjeewa, Jo, Roshan, Lakshman, Dinesh >>>>> ESB Team : Kasun >>>>> >>>>> *Redmine* >>>>> https://redmine.wso2.com/issues/153 >>>>> >>>>> We have discussed the following options as solutions to implement a >>>>> pluggable version strategy for APIM manager product. >>>>> >>>>> *Option 1 : include version to context path* >>>>> We allow users to define API context as a template in API create UI. >>>>> Context = /api/{uri.var.version}/anytext >>>>> Version = 1.0.0 >>>>> >>>>> Then we generate the context path based on a the template when >>>>> creating the synapse xml and use default version-type (empty). >>>>> >>>>> *Current version* >>>>> <api xmlns="http://ws.apache.org/ns/synapse" >>>>> name="admin-API" >>>>> context="/api” >>>>> version="1.0.0" >>>>> *version-type="url"*> >>>>> >>>>> *Proposed version* >>>>> <api xmlns="http://ws.apache.org/ns/synapse" >>>>> name="admin-API" >>>>> *context="/api/1.0.0"* >>>>> version="1.0.0"> >>>>> >>>>> Please note that version appended to context while version tag keeping >>>>> as it is. If user does not include the {uri.var.version}, current process >>>>> will be used. >>>>> >>>>> Ex: >>>>> context="/1.0.0/api" >>>>> context="/gov/1.0.0/api" >>>>> context="/gov/1.0.0/api2" >>>>> >>>>> *Option 2 : Match APIs based on configured context pattern* >>>>> <api xmlns="http://ws.apache.org/ns/synapse" >>>>> name="admin-API" >>>>> context-pattern=”{uri.var.context}/{uri.var.version}” >>>>> context="/api” >>>>> version="1.0.0" >>>>> version-type="url"> >>>>> >>>>> Ex: >>>>> {uri.var.version}/{uri.var.context}= http://localhost:8280/1.0.0/api >>>>> {uri.var.context}/{uri.var.version}= http://localhost:8280/api/1.0.0/ >>>>> >>>>> In synapse level we have to uniquely identify a API with the context >>>>> and version. With second option, it will be difficult and can be lead to >>>>> conflicts If user define an API with context=”1.0.0” version=”api” while >>>>> having an API with context=”api” version=”1.0.0”. So we have decided to >>>>> drop the second option and throughly test the first option. >>>>> >>>>> Please share your suggestions or thoughts on this. >>>>> >>>>> >>>>> Thanks >>>>> >>>>> *Dinesh J. Weerakkody* >>>>> Software Engineer >>>>> WSO2 Inc. >>>>> lean | enterprise | middleware >>>>> M : +94 727 361788 | E : [email protected] | W : www.wso2.com >>>>> >>>> >>>> >>> >>> >>> -- >>> Nuwan Dias >>> >>> Associate Tech Lead - WSO2, Inc. http://wso2.com >>> email : [email protected] >>> Phone : +94 777 775 729 >>> >> >> >
_______________________________________________ Architecture mailing list [email protected] https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
