Title: REST in Peace with Web services
1REST in Peace with Web services
- Eran Chinthaka (chinthaka_at_apache.org)
- Samisa Abeysinghe (samisa_at_apache.org)
- WSO2 Inc.
2Who We Are
- Eran Chinthaka
- Member Apache Software Foundation
- Lead Developer Apache Axiom, Axis2, Synapse,
Tungsten - W3C WS-Addressing working group member
- Senior Software Engineer- WSO2 Inc.
- Samisa Abeysinghe
- Member Apache Software Foundation
- Lead Developer Apache Axis2/C and Axis C
- Software Architect WSO2 Inc.
3Agenda
- What is REST and Web services?
- SOAP vs. REST
- How WSDL 2.0 enables REST?
- How can it be implemented? Axis2 Architecture
- Getting your feet wet with 'code'
4What is REST ...?
- REpresentational State Transfer
- Representational State Transfer is intended to
evoke an image of how a well-designed Web
application behaves a network of web pages (a
virtual state-machine), where the user progresses
through an application by selecting links (state
transitions), resulting in the next page
(representing the next state of the application)
being transferred to the user and rendered for
their use. - Roy T. Fielding - Architectural Style of network systems
5Why is it called REST ?
- Web comprised of resources
- Accessing http//www.wso2.net/products/tungsten
- Representation of the resource is accessed
- Places client application in a state
- Client application changes (transfers)
6REST, a standard?
- An architectural style
- Not a standard
- But uses standards
- http
- url
- xml/html/gif/jpeg, etc media types
- text/xml, text/html, etc MIME types
7SOAP
- SOAP is a messaging protocol
- has three parts
- ltenvelopegt
- ltHeader/gt
- ltBody/gt
- lt/envelopegt
- Body is for payload
- Header is for QoS
- Addressing, Security, RM
8REST vs. SOAP
- REST
- Fixed interface
- URI for GET case
- XML for POST case
- Mostly HTTP Transport
- Lighter bandwidth
- QoS support based on transport
- Suited for lightweight scenarios
- SOAP
- Flexible interface
- POST with SOAP envelope
- Transport agnostic
- Comparatively higher bandwidth
- Wide array of message level QoS options WS-
- Suited for heavyweight scenarios
9REST?
- Our objectives
- Support plain old XML interaction with services
over POST - Support HTTP GET bindings for services
- Non-objectives
- Support all of REST
10How WSDL 2.0 Enabled the REST WS Marriage
- WSDL 2.0 HTTP binding enables services to be used
with GET and POST - Specify how to take (certain styles of) an XML
Schema and formulate a GET/POST request out of it
11WSDL 2.0 Rules for HTTP Binding
- binding type should be
http//www.w3.org/2006/01/wsdl/htt
p - Formulating a HTTP message, contents of payload
defined in MessageReference or InterfaceFault - Schema should adhere to IRI style
12IRI Style
- An element style defined on the schema of the
payload - Rules
- The content model of this element is defined
using a complex type that contains a sequence
from XML Schema. - The sequence MUST only contain elements. It MUST
NOT contain other structures such as xschoice. - The sequence MUST contain only local element
children. These child elements MAY contain the
nillable attribute. - The localPart of the element's QName MUST be the
same as the Interface Operation component's
name.
13IRI Style
- Rules
- The complex type that defines the body of the
element or its children elements MUST NOT contain
any attributes. - If the children elements of the sequence are
defined using an XML Schema type, they MUST
derive from xssimpleType, and MUST NOT be of the
type or derive from xsQName, xsNOTATION,
xshexBinary or xsbase64Binary.
14Input and Output Serialization Formats
15Input and Output Serialization Formats
16Input and Output Serialization Formats
source
17Operation Styles Required
source
18Implementing in Apache Axis2
- Apache Axis2/Java
- Apache Axis2/C
- Understand REST implementation --gt Understand
Axis2 Architecture ....
19Axis2 Messaging Engine
20(No Transcript)
21(No Transcript)
22Axis2 - Dispatching
- Finding the correct service and operation a
message is destined to. - Dispatchers
- RequestURIBasedDispatcher
- AddressingBasedDispatcher
- SOAPActionBasedDispatcher
- SOAPMessageBodyBasedDispatcher
23Axis2 Content Type Handling
- Builders for different content types
- StAXOMBuilder
- StAXSOAPModelBuilder
- MTOMSOAPBuilder
24Marrying REST with Axis2 Receiving REST Requests
- Axis2 engine needs SOAPEnvelope to process a
message. - On receiving the message --gt dispatch
- Get schema and check the message, construct
SOAPBody in accordance with the schema - Create SOAPEnvelope and pass it to the engine
25Marrying REST with Axis2 Receiving REST Requests
- Engine doesn't know about REST, except a flag
- Works with GET and POST with any content type
26Marrying REST with Axis2 Sending REST Requests
- Client API is the same for SOAP and REST
requests, except - a flag to notify its REST
- HTTP method (optional)
- content type (optional)
- TransportSender serializes the proper way
27Getting Your Feet Wet ...
- Sending a SOAP Request ...
- Sending REST Request (minimal config)
Options options new Options() options.setTo(new
EndpointReference(toEpr))
ServiceClient sender new ServiceClient() send
er.setOptions(options) OMElement result
sender.sendReceive(getPayload())
Options options new Options() options.setTo(new
EndpointReference(toEpr)) options.setProperty(C
onstants.Configuration.ENABLE_REST
, Constants.VALUE_TRUE)
ServiceClient sender new ServiceClient() sende
r.setOptions(options) OMElement result
sender.sendReceive(getPayload())
28More Control
- Sending REST Request (optional configuration)
- Setting content type
- Available content types
- MEDIA_TYPE_X_WWW_FORM - application/x-www-form-ur
lencoded - MEDIA_TYPE_TEXT_XML - text/xml
- MEDIA_TYPE_MULTIPART_RELATED - multipart/related
- MEDIA_TYPE_APPLICATION_XML - application/xml
options.setProperty(Constants.Configuratio
n.CONTENT_TYPE,
contentType)
29More Control ....
- Sending REST Request (optional configuration)
- Setting HTTP Method
- Available Web Methods
- HTTP_METHOD_GET
- HTTP_METHOD_POST (Default)
options.setProperty(Constants.Configuratio
n.HTTP_METHOD,
webMethod)
30REST Configuration in Axis2 Server Side
- Any service that abides with WSDL 2.0 HTTP
Binding is REST enabled.
31- I'm a C fan, Can I also REST ?
YES !!!
32Getting Your Feet Wet (again) with C
- Sending a SOAP Request ...
endpoint_ref axis2_endpoint_ref_create(env,
address) options axis2_options_create(env)
AXIS2_OPTIONS_SET_TO(options, env,
endpoint_ref) svc_client axis2_svc_client_creat
e(env, client_home) AXIS2_SVC_CLIENT_SET_OPTI
ONS(svc_client, env, options) ret_node
AXIS2_SVC_CLIENT_SEND_RECEIVE(svc_client, env,
get_payload(env))
33Getting Your Feet Wet (again) with C ...
- Enabling REST at the client side
- AXIS2_OPTIONS_SET_PROPERTY(options, env,
AXIS2_ENABLE_REST,
AXIS2_VALUE_TRUE)
34Getting Your Feet Wet ...
endpoint_ref axis2_endpoint_ref_create(env,
address) options axis2_options_create(env)
AXIS2_OPTIONS_SET_TO(options, env,
endpoint_ref) AXIS2_OPTIONS_SET_PROPERTY(options,
env, AXIS2_ENABLE_REST, AXIS2_VALUE_TRUE) svc_cl
ient axis2_svc_client_create(env,
client_home) AXIS2_SVC_CLIENT_SET_OPTIONS(svc
_client, env, options) ret_node
AXIS2_SVC_CLIENT_SEND_RECEIVE(svc_client, env,
get_payload(env))
35More Control
AXIS2_OPTIONS_SET_PROPERTY(options, env,
AXIS2_CONTENT_TYPE, content_type) AXIS2_OPTIONS_
SET_PROPERTY(options, env, AXIS2_HTTP_METHOD,
web_method)
36Summary
- What is REST and Web services ?
- SOAP vs. REST
- How WSDL 2.0 enables REST
- How can it be implemented Axis2 Architecture
- Getting your feet wet with code
37Questions ... ?
Download presentation from http//people.apache.
org/chinthaka/presentations/ApacheConEU2006/RES
TInPeaceWithWS.ppt
38Thank You .