Teenusele orienteeritud arhitektuur (SOA) on arvutitarkvara kujunduse arhitektuurimudel, kus rakenduskomponendid pakuvad teistele protokollikomponentidele sideprotokolli kaudu teenuseid, tavaliselt võrgu kaudu. Teenusele orienteerituse põhimõtted ei sõltu ühestki tootest, müüjast ega tehnoloogiast.
SOA lihtsalt hõlbustab tarkvarakomponentide koostööd erinevates võrkudes.
SOA arhitektuuri järgi ehitatud veebiteenused muudavad veebiteenuse sõltumatumaks. Veebiteenused saavad ise omavahel andmeid vahetada ja nende loomise aluseks olevate põhimõtete tõttu ei vaja nad mingit tüüpi inimestevahelist suhtlemist ega vaja ka koodimuudatusi. See tagab, et võrgus olevad veebiteenused saavad üksteisega sujuvalt suhelda.
SOA põhineb mõnel allpool mainitud põhiprintsiibil
- Standarditud teenusleping - teenused järgivad teenuse kirjeldust. Teenusel peab olema mingisugune kirjeldus, mis kirjeldab teenuse sisu. See hõlbustab kliendirakenduste mõistmist, mida teenus teeb.
- Lahtine sidumine - vähem sõltuvust üksteisest. See on üks veebiteenuste põhiomadusi, mis ütleb lihtsalt, et veebiteenuste ja veebiteenust kasutava kliendi vahel peaks olema võimalikult väike sõltuvus. Nii et kui teenuse funktsionaalsus mingil ajahetkel muutub, ei tohiks see kliendirakendust rikkuda ega selle töötamist takistada.
- Teenuse abstraktsioon - teenused varjavad loogikat, mida nad ümbritsevad, välismaailma eest. Teenus ei tohiks paljastada, kuidas ta oma funktsionaalsust täidab; see peaks lihtsalt ütlema kliendirakendusele, mida ta teeb, mitte selle kohta, kuidas ta seda teeb.
- Teenuse korduvkasutus - loogika on jagatud teenusteks, et maksimeerida taaskasutust. Igas arendusettevõttes on korduvkasutatavus suur teema, sest ilmselgelt ei tahaks kulutada aega ja vaeva sama koodi uuesti ja uuesti ülesehitamiseks mitme rakenduse jaoks, mis neid vajavad. Seega, kui veebiteenuse kood on kirjutatud, peaks see suutma töötada erinevate rakendustüüpidega.
- Teenuse autonoomia - teenustel peaks olema kontroll nende poolt loogika üle. Teenus teab kõike selle funktsionaalsuse osas, mida see pakub, ja seetõttu peaks tal olema ka täielik kontroll selles sisalduva koodi üle.
- Teenuse kodakondsusetus - ideaalis peaksid teenused olema kodakondsuseta. See tähendab, et teenused ei tohiks teavet ühest osariigist teise varjata. Seda oleks vaja teha kas kliendirakendusest. Näitena võib tuua ostusaidil tehtud tellimuse. Nüüd on teil veebiteenus, mis annab teile konkreetse toote hinna. Aga kui tooted lisatakse ostukorvi ja veebileht navigeerib lehele, kus te makse sooritate, ei peaks makseteenusele ülekantava kauba hinna vastutust veebiteenus tegema. Selle asemel peab seda tegema veebirakendus.
- Teenuse avastatavus - teenuseid saab leida (tavaliselt teenuseregistrist). Oleme seda juba näinud UDDI kontseptsioonis, mis teostab registrit, kuhu mahub teave veebiteenuse kohta.
- Teenuste ühilduvus - teenused jagavad suured probleemid väikesteks probleemideks. Kunagi ei tohiks kinnitada rakenduse kõiki funktsioone ühte teenusesse, vaid jaotada teenus eraldi ärifunktsioonidega mooduliteks.
- Teenuste koostalitlusvõime - teenused peaksid kasutama standardeid, mis võimaldavad teenust kasutada erinevatel abonentidel. Veebiteenustes kasutatakse XML-i ja HTTP-ühenduse kaudu toimuvaid standardeid selle põhimõtte järgimise tagamiseks.