ApacheCon EU 2006 REST

Document Sample
ApacheCon EU 2006 REST Powered By Docstoc
					REST in Peace with Web services



    Eran Chinthaka (chinthaka@apache.org)
    Samisa Abeysinghe (samisa@apache.org)
                  WSO2 Inc.
              Who 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.
                Agenda
• 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'
                 What 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
                         - Roy T. Fielding
      rendered for their use.”
    • Architectural Style of network systems

4
          Why 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)



5
              REST, 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



6
                          SOAP
    • SOAP is a messaging protocol
      • has three parts
         <envelope>
           <Header/>
           <Body/>
         </envelope>
    • Body is for payload
    • Header is for QoS
      • Addressing, Security, RM


7
                      REST vs. SOAP
               ●   REST                     ●   SOAP
    –   Fixed interface          –   Flexible interface
         ●   URI for GET case         ●   POST with SOAP
         ●   XML for POST case            envelope

    –   Mostly HTTP Transport    –   Transport agnostic

    –   Lighter bandwidth        –   Comparatively higher
                                     bandwidth
    –   QoS support – based on
        transport                –   Wide array of message level
                                     QoS options – WS-*
    –   Suited for lightweight
        scenarios                –   Suited for heavyweight
                                     scenarios


8
                       “REST”?
    • Our objectives
      • Support “plain old XML” interaction with
        services over POST
      • Support HTTP GET bindings for services

    • Non-objectives:
      • Support all of REST




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



10
     WSDL 2.0 Rules for HTTP Binding
• binding type should be
  “http://www.w3.org/2006/01/wsdl/http”




• Formulating a HTTP message, contents of payload
  defined in MessageReference or InterfaceFault
• Schema should adhere to IRI style


11
                             IRI 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 xs:choice.
       • 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}.



12
                             IRI 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 xs:simpleType, and
         MUST NOT be of the type or derive from xs:QName,
         xs:NOTATION, xs:hexBinary or xs:base64Binary.




13
       Input and Output Serialization
                  Formats
     • Default :

     HTTPMethod Default Input Serialization         Default Output
     GET       application/x-www-form-urlencoded   application/xml
     POST      application/xml                     application/xml
     PUT       application/xml                     application/xml




14
     Input and Output Serialization
                Formats




15
      Input and Output Serialization
                 Formats
     • Allowed Formats :




source :

16
           Operation Styles Required




source :

17
      Implementing in Apache Axis2
     • Apache Axis2/Java

     • Apache Axis2/C

     • Understand REST implementation -->
       Understand Axis2 Architecture ....




18
          Axis2 – Messaging Engine
     • Piped view




19
              Axis2 - Dispatching
     • Finding the correct service and operation
       a message is destined to.
     • Dispatchers
       • RequestURIBasedDispatcher
       • AddressingBasedDispatcher
       • SOAPActionBasedDispatcher
       • SOAPMessageBodyBasedDispatcher




22
      Axis2 – Content Type Handling
     • Builders for different content types
       • StAXOMBuilder
       • StAXSOAPModelBuilder
       • MTOMSOAPBuilder




23
         Marrying REST with Axis2 –
          Receiving REST Requests
     • Axis2 engine needs SOAPEnvelope to
       process a message.
     • On receiving the message --> dispatch
     • Get schema and check the message,
       construct SOAPBody in accordance with
       the schema
     • Create SOAPEnvelope and pass it to the
       engine


24
         Marrying REST with Axis2 –
          Receiving REST Requests
     • Engine doesn't know about REST, except a
       flag
     • Works with GET and POST with any
       content type




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



26
            Getting Your Feet Wet ...
     • Sending a SOAP Request ...
     Options options = new Options();
     options.setTo(new EndpointReference(toEpr));

     ServiceClient sender = new ServiceClient();
     sender.setOptions(options);
     OMElement result = sender.sendReceive(getPayload());

     • Sending REST Request (minimal config)
     Options options = new Options();
     options.setTo(new EndpointReference(toEpr));
     options.setProperty(Constants.Configuration.ENABLE_REST
     , Constants.VALUE_TRUE);
     ServiceClient sender = new ServiceClient();
     sender.setOptions(options);
     OMElement result = sender.sendReceive(getPayload());


27
                        More Control
     • Sending REST Request (optional
       configuration)
       • Setting content type
         options.setProperty(Constants.Configuration.CONTENT_TYPE,
contentType);

       • Available content types
          • MEDIA_TYPE_X_WWW_FORM - application/x-www-
            form-urlencoded
          • MEDIA_TYPE_TEXT_XML - text/xml
          • MEDIA_TYPE_MULTIPART_RELATED -
            multipart/related
          • MEDIA_TYPE_APPLICATION_XML - application/xml


28
                    More Control ....
     • Sending REST Request (optional
       configuration)
       • Setting HTTP Method
         options.setProperty(Constants.Configuration.HTTP_METHOD,
webMethod);



       • Available Web Methods
          • HTTP_METHOD_GET
          • HTTP_METHOD_POST (Default)




29
       REST Configuration in Axis2 –
               Server Side
     • Any service that abides with WSDL 2.0
       HTTP Binding is REST enabled.




30
     I'm a C fan, Can I also “REST” ?



                   YES !!!



31
      Getting 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_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));




32
         Getting Your Feet Wet (again)
                   with C ...
     ●   Enabling REST at the client side
     AXIS2_OPTIONS_SET_PROPERTY(options, env, AXIS2_ENABLE_REST,
                                                         AXIS2_VALUE_TRUE);




33
          Getting Your Feet Wet ...
     • Sending REST Request ...
      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_client = 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));




34
                        More Control

     AXIS2_OPTIONS_SET_PROPERTY(options, env, AXIS2_CONTENT_TYPE,
     content_type);
     AXIS2_OPTIONS_SET_PROPERTY(options, env, AXIS2_HTTP_METHOD,
     web_method);




35
                   Summary
     • 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




36
                    Questions ... ?

     Download presentation from
     http://people.apache.org/~chinthaka/presentations/
     ApacheConEU2006/RESTInPeaceWithWS.ppt




37
     Thank You .




38

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:4
posted:10/3/2012
language:English
pages:38