Hi,

This is to discuss on the architecture of a Developer Forum on the API
Store. The basic requirement is for an application developer to be able to
initiate discussions on various topics and other developers to be able to
reply and carry on with the discussions. The replies will be on a flat
(single level) structure. The topic creator can also categorize (tag) a
topic choosing from a pre-defined set of categories.

There will be two ways one can initiate a forum discussion

1. Create a generic forum topic by visiting the forums page and clicking on
a button.
2. Browse to an API detail page and click on a button to start a new forum
topic. In this case the forum topic will be linked to the API and hence one
can filter out discussions for a given API. This requirement brings out the
need for the same visibility rules to be applied on the API as well as to
its corresponding forum discussions.

The implementation will consist of a back-end and front-end (UI)
components. The back-end will contain the core business logic of the
forum's functionality and will be implemented on top of a defined
interface. The plan is to have the back-end as a separate carbon component.
The front-end will be a jaggery UI.

The first implementation of the back-end will be a registry based
implementation. Reasoning for opting for a registry based implementation is
as below

1. The API permissions model (for visibility) can be reused since APIs are
also registry artifacts.
2. Pagination support
3. Registry indexing support
4. Clear separation of concerns for Multi Tenancy.

One drawback of the registry is that a given tenant user not being able to
write to another tenant registry. We plan to solve this by allowing that
particular user to comment as 'anonymous' and capture his username via in
input (textbox).

There will be 3 types of registry resources (rxts) involved in the
implementation.

1. topic.rxt - Represents the forum topic. Will have attributes as Subject,
Body, etc.
2. reply.rxt - Represents a reply for a given topic. Has an association to
topic.rxt
3. category.rxt - Represents a forum topic category (similar to a tag)

The resource hierarchy for the topic.rxt and reply.rxt would be as shown
below


[image: Inline image 1]

The rxts are stored under a sub-collection of root collection 'topics'. The
sub-collection is a variable which could either be 'common' (for general
topics) and in the form of 'provider_apiname_version' for topics linked to
a particular API(s). The resource permissions are applied to the
sub-collection so that visibility of those topics are handled accordingly.

Thoughts welcome

Thanks,
NuwanD.

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

Reply via email to