Hi All,
We are hoping to do $subject.
*UUF Component:*
Currently a UUF component has two configuration files, 'component.yaml' and
'config.yaml'. 'component.yaml' contains APIs entries and bindings (see
mail thread [1] for more details); 'config.yaml' contains business-logic
related configurations e.g. page size, display name (see sample [2]). What
we are hoping to do is to combine these two files into a one,
'component.yaml' file in order to improve the developer experience. So the
new 'component.yaml' file will look like following.
# Classes of Microservices that implements UI specific REST APIs.
# example entry:
# - className: "org.wso2.carbon.uuf.sample.pets-store.PetsStoreMicroservice"
# uri: "/pets/"
apis:
- className: "org.wso2.carbon.uuf.sample.api.HelloService"
uri: "/hello-service/"
# Binding fragments into zones.
# Modes:
# prepend - pushes the specified fragments into the beginning of the
existing pushed fragments of the zone
# append - pushes the specified fragments into the end of the
existing pushed fragments of the zone
# overwrite - removes the existing pushed fragments of the zone and
replace with specified fragments
# Please note that the configured order of the fragments in here, will
be honored when filling the zone
bindings:
- zoneName: "org.wso2.carbon.uuf.sample.foundation.footer"
mode: "append"
fragments:
- "org.wso2.carbon.uuf.sample.foundation.footer"
- zoneName: "org.wso2.carbon.uuf.sample.foundation.menubar"
mode: "append"
fragments:
- "org.wso2.carbon.uuf.sample.foundation.secured-menubar"
- zoneName: "org.wso2.carbon.uuf.sample.foundation.usermenu"
mode: "append"
fragments:
- "org.wso2.carbon.uuf.sample.simple-auth.usermenu"
*# Business logic related configurations.# In Handlebars templates,
these configurations can be access using {{@config}} variable.# e.g.
{{@config.appName}} will output "Pets Store"# In server-side JS
'onRequest(env)' function, these configurations cab access via
'env.config' variable.# e.g. env.config['appName'] will give "Pets
Store" valueconfig: # No of items should be displayed in a page.
pageSize: 10 # User will be redirected to following URI after
logging-out successfully. loginRedirectUri: "/pets"*
*UUF App:*
Currently an UUF app has two configuration files, 'component.yaml' and
'config.yaml'. 'component.yaml' is similar to the one we have in a
component and it contains APIs entries and bindings. In the 'config.yaml',
it has some business-logic related configurations as well as some other
configurations that affects to the whole app and consumes by the UUF Core
e.g. theme name, error page URLs (see sample [3]). What we want to do is to
separate those app related configurations from business-logic related
configurations.
Introducing 'app.yaml' helps achieve this goal. It contains app related
configurations only. Sample 'app.yaml' will look like following.
# Default theme for this app.
theme : "org.wso2.carbon.uuf.sample.theme.default"
# Menus in this app.
menus :
- name: "main"
items:
- text: "Home"
link: "#"
icon: "fw-home"
- text: "Pets"
link: ""
submenus:
- text: "See all our amazing pets"
link: "/pets"
- text: "Add a new pets"
link: "/pets/new"
icon: "fw fw-add"
- text: "Pet of the month"
link: "/pets/snowball"
- text: "Order new pets"
link: "/pets/order"
# Error pages for this app.
errorPages:
404: "/foundation/error/404"
default: "/foundation/error/default"
# URI of the login page in this app.
loginPageUri: "/simple-auth/login"
# Security related configurations for this app.
security:
csrfPatterns:
accept: []
reject: []
xssPatterns:
accept: []
reject: []
responseHeaders: null
An app can have a 'component.yaml' as well (since app is the root
component). In that 'component.yaml' webapp developer can define APIs,
bindings, and business-logic related configurations for the app. Sample
'component.yaml' of a component will look like following.
# Classes of Microservices that implements UI specific REST APIs.
# example entry:
# - className: "org.wso2.carbon.uuf.sample.pets-store.PetsStoreMicroservice"
# uri: "/pets/"
apis:
- className: "org.wso2.carbon.uuf.sample.api.HelloService"
uri: "/hello-service/"
# Binding fragments into zones.
# Modes:
# prepend - pushes the specified fragments into the beginning of the
existing pushed fragments of the zone
# append - pushes the specified fragments into the end of the
existing pushed fragments of the zone
# overwrite - removes the existing pushed fragments of the zone and
replace with specified fragments
# Please note that the configured order of the fragments in here, will
be honored when filling the zone
bindings:
- zoneName: "org.wso2.carbon.uuf.sample.foundation.footer"
mode: "append"
fragments:
- "org.wso2.carbon.uuf.sample.foundation.footer"
- zoneName: "org.wso2.carbon.uuf.sample.foundation.menubar"
mode: "append"
fragments:
- "org.wso2.carbon.uuf.sample.foundation.secured-menubar"
- zoneName: "org.wso2.carbon.uuf.sample.foundation.usermenu"
mode: "append"
fragments:
- "org.wso2.carbon.uuf.sample.simple-auth.usermenu"
*# Business logic related configurations.# In Handlebars templates,
these configurations can be access using {{@config}} variable.# e.g.
{{@config.appName}} will output "Pets Store"# In server-side JS
'onRequest(env)' function, these configurations cab access via
'env.config' variable.# e.g. env.config['appName'] will give "Pets
Store" valueconfig: appName: "Pet Store" # Overrrding 'pageSize'
configuration from a dependency component. pageSize: 10 # Overriding
'loginRedirectUri' configuration from 'simple-auth' component.
loginRedirectUri: "/pets"*
So in summery, a component has a 'component.yaml' and an app has an
'app.yaml' and a 'component.yaml'. WDYT?
[1] [UUF] Changing 'bindings.yaml' to 'component.yaml' in an UUF Component
[2]
https://github.com/wso2/carbon-uuf/blob/v1.0.0-m8/samples/components/org.wso2.carbon.uuf.sample.foundation/src/main/config.yaml
[3]
https://github.com/wso2/carbon-uuf/blob/v1.0.0-m8/samples/apps/org.wso2.carbon.uuf.sample.pets-store/src/main/config.yaml
Thanks.
--
Sajith Janaprasad Ariyarathna
Software Engineer; WSO2, Inc.; http://wso2.com/
<https://wso2.com/signature>
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture