Easysoa proxy use cases - easysoa/EasySOA GitHub Wiki
This page is the output of #33 "List the different kinds of proxy & their use cases".
Done on the basis of what's been done or prototyped up to now. To be used as requirements for the upcoming FraSCAti Studio / Proxy Factory, which will have to support generation of these kind of proxies (at least their use in SCA, and also their SCA configuration and possibly java code save if the proxy is generic enough).
AutoRearmFuseIntent
what it does
blocks incoming calls when there are too much within a timeframe
consumes, provides
- consumes : Java Object Service
- Provides : proxied java Object Service (or errors when fused)
how (technology, limitations)
- stacks call times in a Queue (concurrency / scope ??) and compare their count with configuration provided as fixed properties
- configuration : as an Intent, declared on each service to protect
what has to be generated (beyond use : configuration, code)
features it is useful for
global protection layer that has to be used by EasySOA Light (i.e. "mashupped") services before calling existing services
test / demo
PureAirFlowers : http://127.0.0.1:8083/easysoa/light/paf.html samples/easysoa-samples-pureairflowers/easysoa-samples-paf-restsoapproxy/src/main/resources/RestSoapProxy_withIntents.composite
source
easysoa/easysoa-intents/easysoa-intents-fuseIntent
wiki / readme
https://github.com/easysoa/easysoa-model-demo/wiki/EasySOA-Light https://github.com/easysoa/easysoa-model-demo/wiki/Demo-v0.1-Doc
WSDL-based form generator
what it does
Generate an HTML form from data's contained in a WSDl file.
consumes, provides
- consumes : WSDL
- provides : generic HTML service UI, exposed by binding.velocity (Servlet interface)
how (technology, limitations)
- there are several implementations (of the same TransformationFormGeneratorInterface) :
- XSL transformation : call a velocity page with the WSDL to transform as parameter (NB. a simple binding.http Servlet interface would be enough). The transformation is made with an XSLT file. returns the corresponding HTML form with input, output fields and javascript code to call an operation contained in the original WSDL
- WSDL model templating : call a template (velocity) to be rendered using an object model of the WSDL (implementing TemplateFormGeneratorInterface). Two implementations of such an object model are provided, based either on EasyWSDL 2 (default) or Apache Woden (WSDL 2.0 only).
- limitations :
- At the moment, only works with simples WSDL (primitives types input/output parameters for the operations). Complex input/ouptut structures are difficult to transform and to render in HTML. A 'developper' mode is more easily realizable as we can only put text areas in the form to get/returns raw XML data format.
- EasyWSDL 2.0 is in light conflict with FraSCAti dependencies (BPEL) which uses EasyWSDL 3.0 (alas WSDL 1 only), but other alternatives are worse
- further :
- compare to other HTML binding alternatives (FraSCAti, Nuxeo)
- make it instantiable, see #59 Scaling up FraSCAti proxies
- which allows to let the user edit the velocity template of a service-specific instantiation of the proxy. This allows for UIs able to call complex services.
- configuration : As an SCA component
what has to be generated (beyond use : configuration, code)
XSLT transformation to eventually replace the provided one
features it is useful for
works with the "call it" button embeded in Nuxeo for each registered web service.
test / demo
http://localhost:8090/scaffoldingProxy?wsdlUrl=http://localhost:9010/PureAirFlowers?wsdl EasySOA/easysoa-proxy/easysoa-proxy-core/easysoa-proxy-core-scaffolderproxy/src/test/java/org/openwide/easysoa/test/FormGeneratorTester.java
source
wiki / readme
Templatized form
what it does
generate an HTML form from web service definition using a service-specific template
consumes, provides
- consumes : WSDL and an HTML template
- provides : service-specific HTML service UI
how (technology, limitations)
Using Velocity or another templating mechanism (XSL, mustache.js, code, Talend job...). Can be done in the velocity-based WSDL form generator, by making it instantiable and the velocity template editable.
features it is useful for
Generation of HTML forms from WSDL or rest web services definitions for complex services
test / demo
Not yet implemented
source
Not yet implemented
wiki / readme
Not yet implemented
REST/SOAP proxy
what it does
Transforms a REST exchange in SOAP exchange, by calling the web service and sending back the response
consumes, provides
- consumes : SOAP web service, accessed programmatically through SOAPUI libraries
- provides : REST service : a REST request, with WSDL reference, port and operation specified as parameters ; The response of the SOAP web service, returned as a JSON data structure (to be used directly by the HTML form).
how (technology, limitations)
- the HTML form send a REST request containing the target WSDL URL, the port and the operation to call, and others parameters to map in the SOAP request. The SOAP request is generated with SOAPUI (can be replaced by an other system implementing WebServiceHelper, like the provided Apache Woden based alternative which is alas WSDL 2 only, or for instance EasyWSDL), parameters are mapped in the XML request structure. The service is called and the response is transformed in JSON, then sent back to the form to be displayed.
- limitations : none. Supports complex WSDL types, however no specific type mapping (date) for now and there may be some conflicts because of (no) namespace to jason mapping.
- further :
- compare to other HTML binding alternatives (FraSCAti, Nuxeo, using JAXRS/CXF to get a universal REST to SOAP proxy)
- make it instantiable notably by putting "consumes" in FraSCAti, see #59 Scaling up FraSCAti proxies
- which allows to added user-editable velocity templates for the request and response. This makes the REST service less complex.
- and / or use other strategies to make services less complex (Talend, Light), see #58 EasySOA Light - Further scaffolding features
- configuration : As a SCA component
what has to be generated (beyond use : configuration, code)
nothing
features it is useful for
works with the "call it" button embeded in Nuxeo for each registered web service, along with the WSDL-based form generator.
test / demo
http://localhost:8090/scaffoldingProxy?wsdlUrl=http://localhost:9010/PureAirFlowers?wsdl EasySOA/easysoa-proxy/easysoa-proxy-core/easysoa-proxy-core-scaffolderproxy/src/test/java/org/openwide/easysoa/test/FormGeneratorTester.java
source
wiki / readme
Templatized REST or SOAP exchange
what it does
generate an HTML form from web service definition using a service-specific template
consumes, provides
- consumes : REST (resp SOAP) service, request and response templates
- provides : simpler REST (resp SOAP) service
how (technology, limitations)
Using Velocity or another templating mechanism (XSL, mustache.js, code, Talend job...). The SOAPUI-based REST to SOAP proxy can be enhanced by such a proxy, by adding velocity templates before (resp. after) transforming to SOAP.
features it is useful for
Making a service less complex.
test / demo
Not yet implemented
source
Not yet implemented
wiki / readme
Not yet implemented
Other Light proxies
what it does
Provide one (or more) business service on top of existing services
consumes, provides
- consumes : existing REST services, configuration (templates, code, configuration files...)
- provides : REST business service
how (technology, limitations)
- Multiple service templatized form : can use many services (instead of a single one), editor allows to include any used service's generated HTML form at any point in the template, main UI template is therefore composed of calls to generation of parts of service forms, or of an inlined and reworked version of such code.
- Javascript code proxy, allowing to code business logic before transforming / send messages to services. On FraSCAti's implementation.javascript (other script languages available), maybe also on node.js ?? Editor allows to generate script / SPoRE calling any used service at any point in the javascript
- decision table-like, spreadsheet-driven proxy, TODO MDU more
- n-tier business application proxy : Multiple service templatized form for presentation, javascript code for business logic, templatized exchanges (+ REST to SOAP, SLA, cache, security...) for data layer. Allows from making personalized template to simplify huge forms (for example by adding default values in a template and others in another one), to develop full-fledged business applications.
- workflow business application proxy : a special kind of n-tier proxy
- using in addition to business services a workflow service
- whose implementation can be done in Light, or as a wrapper on top of entreprise workflow engines such as Bonita...
- and with an enhanced, customizable form template strategy : has a templates allowing to list user tasks, then get to a task's own form, and there perform it and see the result ; however these templates can be overriden for a whole workflow, or per task...
Non-proxy features :
- user auth / permission / authorization layer
features it is useful for
Configure or code business logic and application
test / demo
Not yet implemented
source
Not yet implemented
wiki / readme
Not yet implemented
HTTP Monitoring
what it does
listen HTTP message and record them to offer to possiblity to "rerun" the recorded messages
consumes, provides
- consumes : REST message, REST messages or SOAP messages
- provides : REST message, the response form the original web service and a Java object message, the message request and response recorded in the proxy for the rerun feature
how (technology, limitations)
- Monitoring proxy extends HttpServlet interface. As we talk about a proxy, the messages are sended to ther orginal recipient and the response send back to the client. The message and the response are transformed in Java object message and then recorded in a run manager. The run manager offer the possibility to 'replay' the recorded messages.
- configuration : As a SCA component
- limitations : none. It can even monitor Java object calls, though at the cost of putting a specific WS between the Java client and the Java server.
features it is useful for
get a message collection for discovering SOA API's and services, for building a test set, for monitoring purposes, for api change detection ....
test / demo
source
wiki / readme
API/Services Discovery
what it does
make an heuristic based analisys of messages to discover api's and services. The discovered api's and services are registered in Nuxeo
consumes, provides
- consumes : Java object message, a set of message request and response
- provides : REST Message, a REST request for the registering of discovered API's and services.
how (technology, limitations)
- Works with Esper and message handlers. 2 disctincts modes : Discovery and validated. In discovery mode, each message is analysed, its URL is decomposed and stored in a tree. when enough data's are in the tree, the discovered API's and services are registered in Nuxeo. In validated mode, at the start of the proxy, registered data's are recovered from Nuxeo. Only the already registered API's and services are updated, the others are stored in a temporary structure and the user have to decide what to do with them (register or not).
- configuration : a SCA component
- limitations : At the moment, the message analysis is made with very simple, hardcoded heuristics so the system works only with simple URL's. It will be necessary to use a more sophisticated system like a data mining software (see Weka3 at http://www.cs.waikato.ac.nz/ml/weka/) to obtain good results during the discovering of API's and services.
features it is useful for
feed and update the service registery in Nuxeo.
test / demo
Configure a client to use the proxy at port EasySOA/easysoa-proxy/easysoa-proxy-core/easysoa-proxy-core-httpdiscoveryproxy/src/test/java/org/openwide/easysoa/test/MockedHttpDiscoveryProxyTest.java
source
wiki / readme
Caching proxy
what it does
Cache exchanged data so that existing low-level services are not hit too much by top-level business services configured in EasySOA.
consumes, provides
- consumes : existing REST services
- provides : cached REST business service
how (technology, limitations)
- client-side HTTP caching (header driven refresh)
- server-side caching. Data obsolescence could be provided by pluggable notifications, or scheduling for more BI-like uses...
features it is useful for
Cache, also an alternative to Fuse (SLA)
test / demo
Not yet implemented
source
Not yet implemented
wiki / readme
Not yet implemented
Security proxy
what it does
Add a security layer to a service or application (HTML service), or connect to a secured service, or both (translate / SSO).
consumes, provides
- consumes : existing REST (resp. SOAP) service, not secured (resp. secured)
- provides : REST (resp. SOAP) service, secured (resp. not secured)
how (technology, limitations)
- auth kinds : BASIC, OAuth(2), HTTPS/SSL...
features it is useful for
- Work with existing secured-only services
- security as a service : expose a secured version of existing unsecured services
- secure Light unsecured services and applications with EasySOA Light-wide authorization / permission management
test / demo
Not yet implemented
source
Not yet implemented
wiki / readme
Not yet implemented
Compression proxy
what it does
(Un)compresses HTTP (resp SOAP ??) exchanges
consumes, provides
- consumes : existing compressed (resp. uncompressed) service
- provides : uncompressed (resp. compressed ) service
how (technology, limitations)
- HTTP Accept header, ex. gzip
features it is useful for
- let non-business proxies look into compressed messages, ex. HTTP monitoring can discover services in compressed exchanges. Further work with existing compressed-only services.
- performances : expose a compressed version of existing uncompressed services. Note that at least in the case of Light applications and services, node can be used to add compression.
test / demo
Not yet implemented
source
Not yet implemented
wiki / readme
Not yet implemented