160 likes | 311 Views
RESTful Service Discussions. Shawn Hu. Design Artifact Considerations. XML schemas for message payload definition WSDL 2.0 for service definition in REST style Operation style & pattern style="http://www.w3.org/ns/wsdl/style/iri" pattern="http://www.w3.org/ns/wsdl/in-out" Binding type:
E N D
RESTful Service Discussions Shawn Hu
Design Artifact Considerations • XML schemas for message payload definition • WSDL 2.0 for service definition in REST style • Operation style & pattern • style="http://www.w3.org/ns/wsdl/style/iri" pattern="http://www.w3.org/ns/wsdl/in-out" • Binding type: • type="http://www.w3.org/ns/wsdl/http" • Operation method (http verbs) • whttp:method="GET" (or others)
Consumption XML Schema • Consumption.xsd
RESTful Service Definition • Input • Using HTTP GET or POST following URL naming convention • Output • Using XSD for return
Xpath for URI Design http://www.openade.org/datastore/Consumption/MeterReading/IntervalBlocks/IntervalReadings/value
URI Naming Convention • URI = <Base Resource Address>+<Resource Path>+<Request> • <Base Resource Address> - A base address where a web service is located such as http://www.openade.org/datastore/ (not real address but for example only) • <Resource Path> - A path to access resource component. This path follows XSD Xpath convention such as /Consumption/MeterReading/IntervalBlocks/IntervalReadings/ to access interval readings as consumption • <Request> - An optional field for arguments such as ?timeStamp=2010-02-02T00:00:00Z • Example URI for a resource: http://www.openade.org/datastore/Consumption/MeterReading/IntervalBlocks/IntervalReadings?timeStamp=2010-02-02T00:00:00Z
GET URI & Return XML • Entry URI: http://www.OpenSG.org/datastore/Consumption/MeterReading/IntervalBlocks/IntervalReadings/value?timeStamp=2009-12-17T09:30:47Z Note: <Resource Path> may need to truncated to only list <Immediate Parent><Child> such as http://www.OpenSG.org/datastore/IntervalReadings/value?timeStamp=2009-12-17T09:30:47Z • Return XML: <?xml version="1.0" encoding="UTF-8"?> <m:Consumption> <m:MeterReading> <m:IntervalBlocks> <m:IntervalReadings> <m:timeStamp>2009-12-17T09:30:47Z</m:timeStamp> <m:value>12.35</m:value> </m:IntervalReadings> </m:IntervalBlocks> </m:MeterReading> </m:Consumption>
POST Entry URI & XML • Entry URI: http://www.OpenSG.org/datastore/Consumption/MeterReading/IntervalBlocks/IntervalReadings/value • Resulting XML to post: <?xml version="1.0" encoding="UTF-8"?> <m:Consumption> <m:MeterReading> <m:CustomerAgreement> <m:mRID>12345</m:mRID> </m:CustomerAgreement> <m:IntervalBlocks> <m:IntervalReadings> <m:timeStamp>2009-12-17T09:30:47Z</m:timeStamp> <m:value>12.35</m:value> </m:IntervalReadings> </m:IntervalBlocks> </m:MeterReading> </m:Consumption>
Compressed/Truncated XML • XML can be compressed or truncated as below if space is limited using the POST XML as an example: <C><MR><CA><ID>12345</ID></CA><IB><IR><tS>2009-12-17T09:30:47Z</tS><v>12.35</v></IR></IB></MR></C>
WSDL Design • Operation Style & Pattern • style=http://www.w3.org/ns/wsdl/style/iri (W3C WSDL2.0) • 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. There are no occurrence constraints on the sequence. • The sequence MUST contain only local element children.† Note these child elements can contain the nillable attribute. • The localPart of the element's QName MUST be the same as the Interface Operation component's {name}.† • The complex type that defines the body of the element or its children elements MUST NOT contain any attributes.† • The children elements of the sequence MUST derive from xs:simpleType, and MUST NOT be of the type or derive from xs:QName, xs:NOTATION, xs:hexBinary or xs:base64Binary.† Note: IRIs – Internationalized Resource Identifiers (IETF)
WSDL Design • Operation Style & Pattern • pattern=http://www.w3.org/ns/wsdl/in-out (W3C WSDL2.0) • The in-out message exchange pattern consists of exactly two messages, in order, as follows:† • A message: • indicated by a Interface Message Reference component whose {message label} is "In" and {direction} is "in" • received from some node N • A message: • indicated by a Interface Message Reference component whose {message label} is "Out" and {direction} is "out" • sent to node N • The in-out message exchange pattern uses the rule 2.2.1 Fault Replaces Message propagation rule.† • An operation using this message exchange pattern has a {message exchange pattern} property with the value "http://www.w3.org/ns/wsdl/in-out".
Service Output • In-Out Pattern for a GET return (message)
Service Output • In-Out Pattern for a POST return (ack)
Summary • Definition using WSDL 2.0 (IRI style & In-Out pattern) • URL naming pattern (to follow XSD XPath) • SLA on services such as limited return data size • Return data in XSD format (CIM based) • GET for non state change and POST for state change