1 / 44

Implementing Web Services for Healthcare

Implementing Web Services for Healthcare . Lessons & Pitfalls - Marc de Graauw -. NICTIZ & Dutch Healthcare. Standardization authority for data exchange in Dutch healthcare Short term goal: national exchange of medication data operational in 2006

nicolette
Download Presentation

Implementing Web Services for Healthcare

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Implementing Web Services for Healthcare Lessons & Pitfalls - Marc de Graauw -

  2. NICTIZ & Dutch Healthcare • Standardization authority for data exchange in Dutch healthcare • Short term goal: national exchange of medication data operational in 2006 • 90.000 people are hospitalized yearly due to wrong medication • "The question is not whether the electronic medical file will become obligatory, but how" – Min. Hoogervorst

  3. NICTIZ & Dutch Healthcare • Communication between: • Healthcare Provider (GP, hospital etc.) • Healthcare Information Broker (HIB) • HIB provides: • index of which parties have patient data • no patient data itself • messaging services • aggregation services • Health Level Seven version 3 (HL7v3)

  4. Healthcare Information System Healthcare Information Broker Healthcare Information System Messa- ging Services Healthcare Information System Healthcare Information System Patient Registry Healthcare Information System

  5. Just enough HL7 • HL7 version 2 : currently used • HL7v3: • XML based • Reference Information Model • HL7v3 Message contains: • medical payload • Trigger Event Wrappers (Query Control etc.) • Transmission Wrapper • Example: QURX_EX990001NL-1.xml

  6. HL7v3 Layered Model HTTP, SSL SOAP / XML HL7 Transmission Wrapper HL7 Query Control Wrapper HL7 Medical Data TCP lower protocol layers

  7. Transmission Wrapper • Addressing information (Sender, Receiver) • MessageId (unique id / message) • duplicate detection is requirement • Accept Acknowledgement Code • request accept acknowledgement (Never / Always, Error, Succes) • is syntactical – not semantic – acceptance • more... • Contains other wrappers • Transmission Wrapper intersects web services stack

  8. Which standards? • The basics were pretty clear: • HL7v3 • XML 1.0 & Namespaces • XML Schema • SOAP 1.1 (not a real standard!) • In 2003 when work started: • SOAP 1.2 not finished • WSDL 1.1 finished, 2.0 not • WS-stack not finished (Reliability, Security etc.) • ebXML Messaging (ebMS)

  9. SOAP in one slide • Envelope, Headers, Body <soap:Envelope ... namespaces ... > <soap:Header mustUnderstand = ‘1’> ... headers ... </soap:Header> <soap:Body> ... payload ... </soap:Body> </soap:Envelope> • HTTP Binding POST / HTTP/1.1 bla bla... SOAPAction: "urn:hl7-org:v3/QURX_AR990120NL“ <?xml version="1.0" encoding="utf-8"?> <soap:Envelope ... namespaces ... > • SOAP Encoding: legacy, forget it

  10. Which standards?(cont.) • Security? No. • we use HTTPS • intermediaries (HIB) are trusted • this is secure • later: WS-Security, XML Signature, XML Encryption • Addressing? No. • HL7v3 provides own addressing scheme • Description? Maybe. • HL7v3 has own interaction modelling methodology

  11. Which standards? • Reliability? Yes. • transport over HTTP is not reliable • The options? • ebMS 2.0 • no IBM, Microsoft adoption • WS-Reliability (Sun, Oracle et. al.) • not finished • WS-ReliableMessaging (IBM< Microsoft et. al.) • not finished, (was?) proprietary • HL7v3 Accept Acks • Confused?

  12. Sender Receiver Message

  13. Sender Receiver Message Copy of Message Receipt Ack

  14. Sender Receiver Message Receipt Ack Copy of Message Receipt Ack Does duplicate detection

  15. Which standards? (cont.) • Basics were clear (XML, XSD, SOAP) • WSDL added (well standardized & used) • No need for discovery / repository specs • Future of some WS standards uncertain • Adopt as few standards as possible • No lock-in to wrong (= losing) ‘standard’ • Facilitate later adoption • SOAP Headers make transition easier

  16. Lessons & Pitfalls • Lesson 1: Do not adopt standards too soon!

  17. ‘Real world’ complexity • HL7v3 XML Schema <include> stacks of 10 – 15 schemas • HL7v3 typing system (mapped onto XSD datatypes) • HL7v3 vocabulary • Layered ‘wrapper’ approach • SOAP (Transmission (Query (Medical Data)))

  18. WSDL in one slide • WSDL defines a web service • Which schemas are used? • Which messages are used & which schemas are involved? • Which operations are used & which messages go in and which go out? • How do operations assemble to make a web service (PortType, Service)? • Binding to SOAP and HTTP

  19. Medication Query Service Medication Query PortType Query Schema QueryResponse Operation Binding Query Message Response Message Response Schema Other Operation Other PortType Other PortType

  20. ‘Real world’ complexity (cont.) • WSDL is a: • description of a web service • generate WSDL from code? • generate code from WSDL? • WSDL code generation • map XML to programming object • <birthdate>19610306</birthdate> • maps to: date • <name><first>Marc</first><last>de Graauw</last></name> • maps to: struct of string, string • <gender>M</gender> • maps to: char(1) or: enum(‘M’, ‘F’) or: GenderType • map operations, HTTP Binding et cetera

  21. ‘Real world’ complexity (cont.) • WSDL code generation: • reserved word clashes • creates object for each XML construct • 15 schemas -> Gargantuan objects! • all of vocabulary.xsd • all objects in one module • Code generation: fine for • float FahrenheitToCelsius(float) • currency StockQuote(string)

  22. Lessons & Pitfalls • Lesson 1: Do not adopt standards too soon • Lesson 2: Do not count on code generation

  23. Dynamic response types • WSDL: operation with defined message types with defined Schemas • HL7v3 has attributes where content co-determines response Schema

  24. Dynamic response • HLv3 responseModalityCode = “R” Some HL7v3 Query Schema Some HL7v3 PortType Some HL7v3 Query Binding Some HL7v3 Query HL7v3 Query Response HL7v3 Query Response Schema

  25. Dynamic response (cont.) • HLv3 responseModalityCode = “B” Some HL7v3 Query Schema Some HL7v3 PortType Some HL7v3 Query Binding Some HL7v3 Query HL7v3 Response Batch HL7v3 Batch Response Schema

  26. Dynamic response (cont.) • More HL7v3 attributes (=XML elements) • acceptAckCode • responsePriority • continuationQuantity • content co-determines response Schema • Solutions: • multiple PortTypes = clutter, bad design • <choice> in Schema = undescriptive, hard to read

  27. Lessons & Pitfalls • Lesson 1: Do not adopt standards too soon • Lesson 2: Do not count on code generation • Pitfall 1: Dynamic response types

  28. Generic vs. specific WSDL • Specific WSDL: HL7v3 Medication Query Schema HL7v3 Medication PortType HL7v3 Medication QueryResponse Operation Binding HL7v3 Medication Query HL7v3 Medication Response HL7v3 Medication Response Schema

  29. Generic vs. specific WSDL • Generic WSDL: HL7v3 Message Schema HL7v3 Message PortType HL7v3 Message Operation Binding HL7v3 MessageOut HL7v3 MessageIn HL7v3 Message Schema

  30. Generic vs. specific WSDL • Generic WSDL uses generic Schemas • Possibly with Transmission Wrapper <xs:schema targetNamespace="urn:hl7-org:v3"> <xs:element name="hl7Message"> <xs:complexType> <xs:sequence> <xs:any/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

  31. HL7 Medical Application HL7v3 medical content HL7 Control Query Processing Application HL7v3 CQ Wrapper & payload HL7 Transmission Wrapper Adapter HL7v3 messages HL7 web services Messaging Adapter SOAP messages HTTP Client / Server

  32. Generic WSDL • Pro: • eases separation of layers • no problems with dynamic response • code generation is useful again • Con: • does not describe actual web service neatly

  33. Lessons & Pitfalls • Lesson 1: Do not adopt standards too soon • Lesson 2: Do not count on code generation • Pitfall 1: Dynamic response types • Lesson 3: Consider generic WSDL

  34. Reliability Issues • We chose HL7v3 Accept Acks • unclarity in standards situation • 2003/4: standards not finished • SOAP allows extension • but: commit / accept blur!

  35. Reliability Issues • Delegated to HTTP 200 OK HL7v3 Medication Query Schema HL7v3 Medication PortType HL7v3 Medication QueryResponse Operation Binding HL7v3 Medication Query HL7v3 Medication Response HL7v3 Medication Response Schema

  36. Reliability Issues • Using Accept Acknowledgements HL7v3 Medication PortType HL7v3 Medication Query Operation Binding HL7v3 Medication Query HL7v3 Accept Ack HL7v3 Medication Response Operation Binding HL7v3 Med. Response HL7v3 Accept Ack

  37. Reliability Issues • Delegate to HTTP 200 OK • only for idempotent messages • synchronous • one side only needs SOAP client • single HTTP request – response pair • Accept Acks • works for all messages • asynchronous • both sides need SOAP server • two HTTP request – response pairs

  38. Lessons & Pitfalls • Lesson 1: Do not adopt standards too soon • Lesson 2: Do not count on code generation • Pitfall 1: Dynamic response types • Lesson 3: Consider generic WSDL • Lesson 4: Carefully design Bindings

  39. Wire signatures • We chose to follow WS-I Basic Profile • sensible set of guidelines • not an additional standard • refinement of SOAP 1.1 / WSDL 1.0 • R2710: operations MUST result in wire signatures that are different • R2710: wire signature = name of the child element of the soap:Body

  40. Wire signatures • Continuation: continuationQuantity > 0 • Cancel: continuationQuantity = 0 HL7v3 Medication PortType HL7v3 Medication QueryContinuation Operation Binding HL7v3 QueryContinuation HL7v3 Med. Response HL7v3 Medication QueryCancel Operation Binding HL7v3 QueryCancel HL7v3 Accept Ack

  41. Lessons & Pitfalls • Lesson 1: Do not adopt standards too soon • Lesson 2: Do not count on code generation • Pitfall: Dynamic response types • Lesson 3: Consider generic WSDL • Lesson 4: Carefully design Bindings • Pitfall: R2710 & wire signatures

  42. The ebMS story • ebMS • used in NHS (British Healthcare) • Dutch Criminal Justice Chain • Dutch Social Security Chain (BKWI) • NICTIZ reconsidered • did not adopt ebMS now: stability of specs • Lesson 1: Do not adopt standards too soon

  43. Marc de Graauw • Independent Consultant • ... and I like it! • not available till sometime in summer • www.marcdegraauw.com • marc@marcdegraauw.com • Feedback welcome! • QUESTIONS .... ???

More Related