Easysoa proxy use cases
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).
blocks incoming calls when there are too much within a timeframe
- consumes : Java Object Service
- Provides : proxied java Object Service (or errors when fused)
- 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
global protection layer that has to be used by EasySOA Light (i.e. "mashupped") services before calling existing services
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
easysoa/easysoa-intents/easysoa-intents-fuseIntent
https://github.com/easysoa/easysoa-model-demo/wiki/EasySOA-Light https://github.com/easysoa/easysoa-model-demo/wiki/Demo-v0.1-Doc
Generate an HTML form from data's contained in a WSDl file.
- consumes : WSDL
- provides : generic HTML service UI, exposed by binding.velocity (Servlet interface)
- 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
XSLT transformation to eventually replace the provided one
works with the "call it" button embeded in Nuxeo for each registered web service.
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
generate an HTML form from web service definition using a service-specific template
- consumes : WSDL and an HTML template
- provides : service-specific HTML service UI
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.
Generation of HTML forms from WSDL or rest web services definitions for complex services
Not yet implemented
Not yet implemented
Not yet implemented
Transforms a REST exchange in SOAP exchange, by calling the web service and sending back the response
- 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).
- 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
nothing
works with the "call it" button embeded in Nuxeo for each registered web service, along with the WSDL-based form generator.
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
generate an HTML form from web service definition using a service-specific template
- consumes : REST (resp SOAP) service, request and response templates
- provides : simpler REST (resp SOAP) service
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.
Making a service less complex.
Not yet implemented
Not yet implemented
Not yet implemented
Provide one (or more) business service on top of existing services
- consumes : existing REST services, configuration (templates, code, configuration files...)
- provides : REST business service
- 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
Configure or code business logic and application
Not yet implemented
Not yet implemented
Not yet implemented
listen HTTP message and record them to offer to possiblity to "rerun" the recorded messages
- 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
- 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.
get a message collection for discovering SOA API's and services, for building a test set, for monitoring purposes, for api change detection ....
make an heuristic based analisys of messages to discover api's and services. The discovered api's and services are registered in Nuxeo
- 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.
- 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.
feed and update the service registery in Nuxeo.
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
Cache exchanged data so that existing low-level services are not hit too much by top-level business services configured in EasySOA.
- consumes : existing REST services
- provides : cached REST business service
- 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...
Cache, also an alternative to Fuse (SLA)
Not yet implemented
Not yet implemented
Not yet implemented
Add a security layer to a service or application (HTML service), or connect to a secured service, or both (translate / SSO).
- consumes : existing REST (resp. SOAP) service, not secured (resp. secured)
- provides : REST (resp. SOAP) service, secured (resp. not secured)
- auth kinds : BASIC, OAuth(2), HTTPS/SSL...
- 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
Not yet implemented
Not yet implemented
Not yet implemented
(Un)compresses HTTP (resp SOAP ??) exchanges
- consumes : existing compressed (resp. uncompressed) service
- provides : uncompressed (resp. compressed ) service
- HTTP Accept header, ex. gzip
- 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.
Not yet implemented
Not yet implemented
Not yet implemented