Web service provider i Domino, del 1/2

Web service provider i Domino, del 1/2

Att skapa en web service i Domino är enkelt, men kräver lite förberedelser och förkunskaper.
Därför har jag delat upp den här genomgången i två delar.

I det här exemplet kommer vi skapa en tjänst som kan ta emot enkla meddelanden.
I del 1 börjar vi med att bestämma hur anropen mot vår web service skall se ut, detta kommer beskrivas i två filer – .XSD och .WSDL.

Det första vi behöver är en XSD-fil, filen definierar hur XML-datat som skickas får se ut.

“The XML Schema definition language (XSD) enables you to define the structure and data types for XML documents.
An XML Schema defines the elements, attributes, and data types that conform to the World Wide Web Consortium (W3C)”

Enklast är att använda en XML-redigerare. Själv använder jag Oxygen XML Editor, men det finns andra program som är billigare.

Formatet vi förväntar oss ta emot är:

XSD-filen skrivs i XML och definierar ett “schema” över hur XML-data skall vara utformat.
Vi börjar med ett tomt schema och fyller därefter på med de definitioner vi behöver.
example

Vi har bestämt att vi vill ta emot ett element som heter “MESSAGE”, innehållandes meddelanden. Vi vill också ha en checksum som berättar hur många meddelanden som skickas.
I XSD-filen definierar vi det enklast såhär:

En “complexType” är ett element som innehåller andra element och/eller attribut.
En “sequence” bestämmer att child-elementen måste komma i sekvens och kan förekomma 0 eller fler gånger.
Vi vill kunna ta emot fler än ett meddelande på en gång.

Själva meddelandet har vi definierat såhär: xsd:element name=”Message” type=”ape:MessageType”.
Det innebär att definitionen för datatypen för elementet “Message” måste ske separat. Det här är ett bra sätt att strukturera upp xsd.
I större xsd-filer återanvänds ofta datatyperna på fler ställen i definitionen. Ett exempel skulle kunna vara strängar för globalt unika id:n (32 tecken hexadecimalt).

I datatypen “MessageType” bestämmer vi att det får anges en avsändare, men det är inte tvingande eftersom “minOcccurs” är satt till 0.
“MessageType” ska också innehålla en samling meddelanden “av datatypen Message”, noll eller fler.Här är “maxOccurs” satt till “unbounded”, vilket innebär att vi får ta emot en miljon meddelanden om vi vill.
I en verklig miljö kan det kanske vara bra att begränsa denna siffra så att datat som skickas inte tillåts blir för stort.

Datatypen “Message” har ett attribut “Message” som innehåller meddelandet i form av en sträng.
“Message” innehåller även ett meddelande-id “Guid” i form av datatypen “GUIDStringType”.

Datatypen “GUIDStringType” definierar att meddelande-idt skall vara 32 tecken långt och hexadecimalt.
Det här är ett bra exempel på en datatyp som kan återanvändas i andra delar av en större XSD-definition.

Detta är definierat i bilaga example.zip

För att skapa en web service provider i Domino behöver vi en WSDL-fil.
WSDL-filen definierar vår web service och talar om hur anropet mot vår tjänst skall ske och vilka värden som krävs samt hur anropet skall vara utformat.

“WSDL is an XML format for describing [web services] […] operating on messages containing […] information. “

Enklast är att importera en befintlig XSD-fil och sedan komplettera med eventuellt svarsmeddelande.
Se bilaga example.zip

Läs gärna mer om XSD och WSDL på tutorialpoints.
XSD: http://www.tutorialspoint.com/xsd/
WSDL: http://www.tutorialspoint.com/wsdl/

Bonus!
Om du tycker att web services är för enkelt kan du testa att kopiera en fil i Unix istället.