On Thu, Jan 15, 2015 at 12:17 AM, Nuwan Dias <nuw...@wso2.com> wrote:

>
> On Tue, Jan 13, 2015 at 11:11 AM, Dinesh J Weerakkody <dine...@wso2.com>
> 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 : dine...@wso2.com | W : www.wso2.com
>>
>> On Tue, Dec 23, 2014 at 5:43 PM, Dinesh J Weerakkody <dine...@wso2.com>
>> 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 : dine...@wso2.com | W : www.wso2.com
>>>
>>
>>
>
>
> --
> Nuwan Dias
>
> Associate Tech Lead - WSO2, Inc. http://wso2.com
> email : nuw...@wso2.com
> Phone : +94 777 775 729
>
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to