PM1: andmete päringu teenus

Mustri tüüp: primitiiv
Peamine kasusaaja: inimene, automatiseeritud süsteem
Eesmärk: andmete pärimine
Allikas: teadaolev praktika
Teenuste arv: 1

Abstract

PM1: Data pull service is one of the two main primitives used for developing X-road services. Its main purpose is to allow the service consumer to get data from the service producer. A single service will be developed where the service input contains the query parameters and output contains the query result.

In the context of this pattern:

  • The service producer is the information system that has the needed data;
  • The service consumer is the information system that needs the data.

Sissejuhatus

Muster kirjeldab üle X-tee andmete pärimist. Tegemist on mustriga, mis sobib mitmete erinevate eesmärkide saavutamiseks (andmete kontroll, vormide eeltäitmine, esindusõiguste pärimine jne).

Andmete pärimise eesmärgil luuakse üks X-tee teenus, mille korral eristame kahte poolt:

  • andmeid omav infosüsteem:
    • teenuse osutaja;
    • infosüsteem, kus toimub andmete kogumine ja muutmine;
  • andmeid vajav infosüsteem:
    • teenuse tarbija;
    • infosüsteem, mis kasutab andmeid omava infosüsteemi andmeid oma äriprotsessis.

Loodava teenuse sisendiks on päringu parameetrid ja väljundiks päringu tulemused.

Probleem

Käesolev muster sobib kasutamiseks olukorras, kus on vajalik lahendada andmete vahetus sissejuhatuses nimetatud poolte vahel ning:

  • andmeid vajava infosüsteemi käideldavus on tagatud ainult andmete pärimise hetkel;
  • andmeid omava infosüsteemi käideldavus on tagatud alati, kui keegi soovib andmeid pärida;
  • andmeid vajaval infosüsteemil peab olema kontroll selle üle, millal andmevahetus toimub;
  • päritud andmete ajakohasena hoidmise eest vastutab andmeid vajav infosüsteem.

Lahendus

Andmeid omavas infosüsteemis:

  • kirjeldatakse X-tee teenus, mis võimaldab andmeid vajaval infosüsteemil andmete pärimist;
    • teenuse sisendiks on päringu parameetrid;
    • teenuse väljundiks on päringu tulemused;
  • arendatakse teenuse sisendi valideerimine;
  • arendatakse teenuse sisendi põhjal vajalike andmete leidmine;
  • arendatakse teenuse väljundi koostamine;
  • määratakse infosüsteemid, mis võivad teenust kasutada.

Andmeid vajavas infosüsteemis:

  • arendatakse teenuse sisendiks olevate parameetrite määramine;
  • arendatakse teenuse sisendi koostamine;
  • arendatakse andmeid omava infosüsteemi poolt osutatava X-tee teenuse tarbimine;
  • arendatakse teenuse väljundi töötlemine ja salvestamine.

Teenuste kirjeldus

Sisend on andmete pärimise korral tavaliselt objekti mingi unikaalne tunnus (näiteks isikukood, auto numbrimärk, dokumendi number jne) ja seega on sisendi struktuur üldjuhul lihtne.

Väljundi struktuur on sisendi struktuurist oluliselt keerukam, kuna võib sisaldada mitmeid objekte, nende alamobjekte, metaandmeid jms.

Täpne sisendi ja väljundi struktuur oleneb konkreetse äriprotsessi vajadustest. X-tee protokoll ei sea selles osas omalt poolt piiranguid.

Järgnevalt on toodud andmete pärimise teenuse WSDL näide.

<wsdl:definitions .... >
<wsdl:types>
<schema ....>
<complexType name="RequestType">
<!-- Few request elements, simple structure -->
<sequence>
<element name=”objectId” type=”String”/>
</sequence>
</complexType>

<complexType name="ResponseType">
<!-- Many response elements, complex structure -->
<sequence>
<element name=”objectId” type=”String”/>
<element name=”element1” type=”int”/>
<element name=”element2” type=”int”/>
<element name=”element3” type=”someComplexType”/>
<element name=”element4” type=”String”/>
....
</sequence>
</complexType>
....
</schema>
</wsdl:types>

<wsdl:message name="RequestMessage">
<wsdl:part name="keha" type="RequestType"/>
</wsdl:message>

<wsdl:message name="ResponseMessage">
<wsdl:part name="keha" type="ResponseType"/>
</wsdl:message>
....

<wsdl:portType .... >
<wsdl:operation name="Pull service">
<wsdl:input message="RequestMessage"/>
<wsdl:output message="ResponseMessage"/>
</wsdl:operation>
....
</wsdl:portType >
</wsdl:definitions>

Mustri käitumine

Järgneval joonisel esitatakse andmeid vajava infosüsteemi (teenuse tarbija) ja andmeid omava infosüsteemi (teenuse osutaja) vaheline suhtlus.


Joonis 3.1 Mustri PM1 järgnevusdiagramm.

Infosüsteemi spetsiifilise äriloogika esitamiseks on viidatud järgnevusdiagrammile "Infosüsteemi äriprotsess", mille sisu ei ole toodud kuna see sõltub konkreetse infosüsteemi äriprotsessist.

Andmeid vajava infosüsteemi poolel on eristatud äriloogika ja teenusloogika kihid.

  • Äriloogika kiht:
    • täidab infosüsteemi spetsiifilist äriprotsessi;
    • määrab, milliseid andmeid soovitakse pärida;
    • edastab päritavatele andmetele vastavad parameetrid teenusloogika kihile.
  • Teenusloogika kiht:
    • koostab teenuse sisendi vastavalt äriloogika kihist saadud paameetritele;
    • tarbib andmeid omava infosüsteemi poolt osutatavat teenust;
    • võtab vastu tarbitud teenuse vastuse;
    • tõlgendab vastuses sisalduvad andmed äriloogika kihile sobivaks;
    • teavitab äriloogika kihti teenuse kasutuse tulemustest.

Andmeid omava infosüsteemi juures toimuvad tegevused on lahendatud teenusloogika kihis. Teenusloogika kihis toimuvad järgmised tegevused:

  • võetakse vastu teenuse sisend;
  • valideeritakse teenuse sisendis olevad päringuparameetrid;
  • leitakse päritavad andmed vastavalt päringu parameetritele;
  • koostatakse päritavaid andmeid sisaldav teenuse vastus.

Lisakaalutlused

Andmete pärimise teenuse loomisel, osutamisel ja tarbimisel tuleks silmas pidada järgnevat:

  • teenuse sisendi ja väljundi struktuur peaks keskenduma andmetele, mitte andmete kogumise või edasise kasutamise äriloogikale;
  • teenuse väljundis sisalduvad andmeväljad peaksid moodustama omavahel loogiliselt seotud terviku;
  • andmeid vajav süsteem peab teadma, millal andmed tekivad.

Näide

Näitena on toodud Rahvastikuregistri teenus rr.RR405IsikNimi.v1. Teenuse sisendiks on isikukood. Teenuse väljundiks on isikukoodile vastava isiku ees- ja perekonnanimi. Vea korral (näiteks vigane isikukood) tagastab teenus Rahvastikuregistri spetsiifilise veakoodi ja -teksti.

Teenuse sisend:

keha
|-> isikukood (type: String, description: “Isikukood”)

Teenuse väljund:

keha
|-> Isikupnimi (type: String, description: “Isiku perenimi”)
|-> Isikuenimi (type: String, description: “Isiku eesnimi”)
|-> Veakood (type: String, description: “Veakood”)
|-> Veatekst (type: String, description: “Veatekst”)



Last modified: Monday, 24 October 2016, 1:21 PM