Describing Web Services An Overview of WSDL Web Services and Security 1/17/2006

advertisement
Describing Web Services
An Overview of WSDL
CS595G: Web Services and Security
1/17/2006
Marco Cova
marco@cs.ucsb.edu
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 1/33
Outline
●
Motivations
●
WSDL specification and an example
●
Tools
●
WSDL alternatives
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 2/33
Web Services Interaction
Typical steps in WS interaction:
●
●
●
●
Discovery: the requester entity becomes aware of the
provider entity either by directly knowing the provider
agent's address or through some discovery service
Agreement on service description: provider and
requester agent “agree” on the service description
Agents setup: web service description and semantics are
input to requester and provider agents
Messages are exchanged between the requester and
provider agents
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 3/33
Web Services Stack
Here, we will focus on the service description layer and WSDL
specifically
Image taken from
http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/images/smith_wsc_f1.gif
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 4/33
Web Services description:
goals and requirements
●
To provide a structured, formal description of a
web service:
What operations are available and how to
invoke them
To describe how to concretely access a web
service:
–
●
Web service address
– Transport protocol
What type of description: syntactical or semantic?
–
●
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 5/33
WSDL
●
●
Web Service Definition Language: a language to
describe web services
XML-based
Status:
●
●
WSDL 1.1 is a W3C note published on 15 March
2001
WSDL 2.0 is a W3C Candidate Recommendation
(last update on 6 January 2006)
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 6/33
WSDL goals
●
Service description: documentation for distributed
systems
–
●
Language- and platform-independent
Service automation: recipe for automating the
details involved in the service invocation
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 7/33
WSDL: web service model
A WSDL document defines a web services as
●
Collection of communicating endpoints capable
of exchanging messages
For each web service, WSDL may provide two
types of definitions:
●
●
Abstract: the web service is seen as a languageand platform-independent interface
Concrete: the web service is seen as a component
accessible through specific transport and network
standards
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 8/33
WSDL elements
Main WSDL elements:
●
●
●
●
●
●
●
Types: container for data type definitions using some type system,
typically XML Schema
Message: an abstract, typed definition of the data being communicated
Operation: an abstract description of an action supported by the
service
Port Type: an abstract set of operations supported by one or more
endpoints
Binding: a concrete protocol and data format specification for a
particular port type
Port: a single endpoint defined as a combination of a binding and a
network address
Service: a collection of related endpoints
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 9/33
WSDL elements – cnt'd
For each part of the specification, an example taken from the Amazon
E-Commerce Service is presented. The full WSDL document is
located at
http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 10/33
wsdl:types
<definitions .... >
<types>
<-- type-system extensibility element --> *
</types>
</definitions>
●
●
Data type definitions needed to define the
exchanged messages
By default, the types are defined in terms of
XML Schema
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 11/33
wsdl:types - example
<types>
...
<xs:element name="ItemSearch">
<xs:complexType><xs:sequence>
<xs:element name="SubscriptionId" type="xs:string"
minOccurs="0"/>
<xs:element name="AWSAccessKeyId" type="xs:string"
minOccurs="0"/>
<xs:element name="AssociateTag" type="xs:string"
minOccurs="0"/>
<xs:element name="XMLEscaping" type="xs:string"
minOccurs="0"/>
<xs:element name="Validate" type="xs:string"
minOccurs="0"/>
<xs:element name="Shared" type="tns:ItemSearchRequest"
minOccurs="0"/>
<xs:element name="Request" type="tns:ItemSearchRequest"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType></xs:element>
...
</types>
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 12/33
wsdl:message
<definitions .... >
<message name="nmtoken"> *
<part name="nmtoken" element="qname"? type="qname"?/> *
</message>
</definitions>
●
●
Messages exchanged to provide a service
Messages are simply containers of parts which
are defined in terms of the types described in the
types section
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 13/33
wsdl:message - example
<message name="ItemSearchRequestMsg">
<part name="body" element="tns:ItemSearch"/>
</message>
<message name="ItemSearchResponseMsg">
<part name="body" element="tns:ItemSearchResponse"/>
</message>
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 14/33
wsdl:portType
<wsdl:definitions .... >
<wsdl:portType name="nmtoken">
<wsdl:operation name="nmtoken" .... /> *
</wsdl:portType>
</wsdl:definitions>
●
A portType is a named set of abstract operations
and the abstract messages involved
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 15/33
Message exchange patterns
4 messaging types:
●
●
●
●
One-way: endpoint receives a message
Request-response: endpoint receives a message,
and sends a correlated message
Solicit-response: endpoint sends a message, and
receives a correlated message.
Notification: endpoint sends a message
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 16/33
wsdl:portType - example
<portType name="AWSECommerceServicePortType">
...
<operation name="ItemSearch">
<input message="tns:ItemSearchRequestMsg"/>
<output message="tns:ItemSearchResponseMsg"/>
</operation>
...
</portType>
In addition, a message can be used to communicate a fault:
<fault message=”...”/>
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 17/33
wsdl:binding
<wsdl:definitions .... >
<wsdl:binding name="nmtoken" type="qname"> *
<-- extensibility element (1) --> *
<wsdl:operation name="nmtoken"> *
<-- extensibility element (2) --> *
<wsdl:input name="nmtoken"? > ?
<-- extensibility element (3) -->
</wsdl:input>
<wsdl:output name="nmtoken"? > ?
<-- extensibility element (4) --> *
</wsdl:output>
<wsdl:fault name="nmtoken"> *
<-- extensibility element (5) --> *
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
●
Message format and protocol details for
operations and messages defined by a portType
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 18/33
wsdl:binding – cnt'd
●
●
Extensibility elements allow to specify
–
Concrete grammar for input, output and fault messages
–
Concrete per-binding information
–
Concrete per-operation information
The WSDL specification introduces binding
extensions for:
–
SOAP
–
HTTP GET/POST
–
MIME
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 19/33
wsdl:binding - example
<binding name="AWSECommerceServiceBinding"
type="tns:AWSECommerceServicePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
...
<operation name="ItemSearch">
<soap:operation soapAction="http://soap.amazon.com"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
...
</binding>
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 20/33
wsdl:port
<wsdl:definitions .... >
<wsdl:service .... > *
<wsdl:port name="nmtoken" binding="qname"> *
<-- extensibility element (1) -->
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
●
Defines an individual endpoint by specifying an
address for a binding
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 21/33
wsdl:port - example
<service name="AWSECommerceService">
<port name="AWSECommerceServicePort"
binding="tns:AWSECommerceServiceBinding">
<soap:address
location="http://soap.amazon.com/onca/soap?Service=AWSECommerce
Service"/>
</port>
</service>
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 22/33
wsdl:service
<wsdl:definitions .... >
<wsdl:service name="nmtoken"> *
<wsdl:port .... />*
</wsdl:service>
</wsdl:definitions>
●
A service simply groups related ports together
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 23/33
Tools: editor
How do you write WSDL files?
●
●
By hand: some editors have special support for
WSDL
Don't write them: automatic generation (in a few
slides)
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 24/33
Tools: validation
●
●
WSDL documents can be quite large (the
Amazon E-Commerce Service WSDL document
is 2432 lines of code and over 100KB)
Tools to validate/analyze WSDL documents:
–
http://xmethods.net/ve2/Tools.po
–
http://www.softwaresecretweapons.com/jspwiki/
services/oy-lm-1.3/generator.jsp
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 25/33
Tools: WSDL generation and
client generation
●
●
●
Manually creating a WSDL file for a web service
is a difficult and error-prone task
Given a WSDL file, generating a client to interact
with the service is a repetitive task
There exist toolkits for all major languages that
allow to automate both tasks
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 26/33
WSDL toolkit: Java
●
Axis: http://ws.apache.org/axis/
–
Builds stubs, skeleton and data types from WSDL
●
–
java org.apache.axis.wsdl.WSDL2Java
AWSECommerceService.wsdl
Builds WSDL from Java code
●
java org.apache.axis.wsdl.Java2WSDL -o wp.wsdl
-l
"http://localhost:8080/axis/services/WidgetPrice n"urn:Example6" p"samples.userguide.example6"
"urn:Example6"
samples.userguide.example6.WidgetPrice
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 27/33
WSDL toolkit: Python
●
SOAPpy: http://pywebsvcs.sourceforge.net/
●
Parsing a WSDL file:
>>> from SOAPpy import WSDL
>>> wsdlFile =
'http://webservices.amazon.com/AWSECommerceService/AWSECommerce
Service.wsdl'
>>> server = WSDL.Proxy(wsdlFile)
>>> server.methods.keys()
[u'SellerListingSearch', u'CartCreate', u'SellerLookup',
u'Help', u'TransactionLookup', u'CartAdd', u'ItemLookup',
u'MultiOperation', u'SimilarityLookup', u'CartClear',
u'ListLookup', u'CartModify', u'CustomerContentLookup',
u'ListSearch', u'BrowseNodeLookup', u'CartGet',
u'SellerListingLookup', u'CustomerContentSearch',
u'ItemSearch']
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 28/33
WSDL toolkit: Python – cnt'd
>>> itemSearchM = server.methods['ItemSearch']
>>> for inparams in itemSearchM.inparams:
...
print inparams.name, inparams.type
...
body (u'http://webservices.amazon.com/AWSECommerceService/200510-05', u'ItemSearch')
>>>
>>> for outparams in itemSearchM.outparams:
...
print outparams.name, outparams.type
...
body (u'http://webservices.amazon.com/AWSECommerceService/200510-05', u'ItemSearchResponse')
>>> result = server.ItemSearch({'body': {'SubscriptionId':
'xxxxxxxxxxxxxxxxxxxx', 'SearchIndex': 'Books', 'Request' :
{'SearchIndex': 'Books', 'Title': 'restaurant end universe'}}})
>>> result.Items.TotalPages
2
>>> result['Items'].TotalResults
'18'
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 29/33
WSDL toolkit: Python – cnt'd
>>> result.Items.Item[0]
<SOAPpy.Types.structType Item at -1214384084>:
{'ItemAttributes': <SOAPpy.Types.structType ItemAttributes at 1214386100>: {'Title': 'The Restaurant at the End of the
Universe', 'ProductGroup': 'Book', 'Author': 'Douglas Adams'},
'ASIN': '0345391810', 'DetailPageURL':
'http://www.amazon.com/exec/obidos/redirect?tag=ws%26link_code=
sp1%26camp=2025%26creative=165953%26path=http://www.amazon.com/
gp/redirect.html%253fASIN=0345391810%2526tag=ws%2526lcode=sp1%2
526cID=2025%2526ccmID=165953%2526location=/o/ASIN/0345391810%25
253FSubscriptionId=xxxxxxxxxxxxxxxxxxxx'}
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 30/33
Lessons learned
●
●
●
Working with complex types is... complex and
not very interoperable
Editing WSDL files by hand is masochistic.
Avoid it as much as you can
If everything seems fine but nothing works,
double check your namespaces
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 31/33
Alternatives
●
●
●
●
At the moment, WSDL 1.1 is “the” web service description
language
WSDL 2.0 redefines and cleans up the grammar specified by
WSDL
Simplify the XSD, SOAP/REST, WSDL stack: SSDL (SOAP
Service Description Language), RESEDEL (REstful
SErvices DEscription Language), WRDL (Web Resource
Description Language), WADL (Web Application Description
Language), SMEX-D (Simple Message EXchange
Descriptor), WDL (Web Description Language)
Add semantics description of a service: WSDL-S, WSML
(Web Service Modeling Language)
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 32/33
End
●
Questions?
Marco Cova – Describing Web Services: An Overview of WSDL – CS595G - 33/33
Download