Što je web servis. Organizacija rada web servisa

Izdali smo novu knjigu, Marketing sadržaja društvenih medija: Kako ući u glave svojih sljedbenika i navesti ih da se zaljube u vaš brend.

Pretplatite se

Web usluga (usluga) je program koji organizira interakciju između stranica. Informacije s jednog portala prenose se na drugi.

Na primjer, postoji zrakoplovna tvrtka. Ima mnogo letova, što znači da ima mnogo karata. Prenosi informacije putem web usluge na mjesto skupljača putovanja. Korisnik koji pristupi agregatoru moći će izravno ondje kupiti karte za ovu zrakoplovnu tvrtku.

Drugi primjer web usluga je stranica za praćenje vremena koja sadrži informacije o vremenskim uvjetima u određenom gradu ili zemlji u cjelini. Ova informacija također često koriste treće strane.

Informacije na internetu su raznolike. Stranicama upravljaju različiti sustavi. Koriste se različiti protokoli za prijenos i šifriranje. Web usluge pojednostavljuju razmjenu informacija između različitih stranica.

Arhitektura i protokoli web servisa

Možete definirati 3 autoriteta koji međusobno djeluju: katalog, izvođač i kupac. Nakon izrade usluge, izvođač je upisuje u katalog, a kupac tu uslugu pronalazi.

Mehanizam razmjene podataka formiran je u Opisu web usluga. Ovo je specifikacija koja pokriva formate prosljeđivanja, vrste sadržaja, transportne protokole koji se koriste u procesu razmjene informacija između korisnika i prijenosnika usluge.

Danas se za implementaciju različitih web servisa najčešće koristi nekoliko tehnologija:

  1. TCP/IP je protokol koji gotovo svatko razumije mrežna oprema, od velikih računala do prijenosnih uređaja i PDA uređaja.
  2. HTML je univerzalni označni jezik koji se koristi za prikaz sadržaja na potrošačkim uređajima.
  3. XML je univerzalni alat za obradu svih vrsta podataka. Na njegovoj osnovi mogu raditi i drugi protokoli za razmjenu informacija: SOAP i WSDL.
  4. UDDI je univerzalni izvor prepoznavanja, integracije i opisa. Radi, u pravilu, u privatnim mrežama i još nije pronašao dovoljnu distribuciju.

Svestranost predstavljenih tehnologija temelj je razumijevanja web usluga. Oni rade za standardne tehnologije, neovisno o pružateljima aplikacija i drugim mrežnim resursima. Može se koristiti u bilo kojem operativni sustavi, aplikacijski poslužitelji, programski jezici itd.

Prednosti

  • Stvaranje potrebnih uvjeta za interakciju softverske komponente bez obzira na platformu.
  • Web usluge temelje se na otvorenim standardnim protokolima. Uvođenjem XML-a pojednostavljena je izrada i konfiguracija web servisa.
  • Korištenje HTTP-a jamči interakciju sustava putem mrežnog pristupa.

Mane

  • Niske performanse i veliki obujam prometa, u usporedbi sa sustavima RMI, CORBA, DCOM, zbog korištenja XML poruka u kontekstu teksta.
  • Razina sigurnosti. Sve moderne web usluge moraju implementirati kodiranje i zahtijevaju autorizaciju korisnika. Je li ovdje dovoljan HTTPS ili su potrebni pouzdaniji protokoli, kao što je XML enkripcija, SAML itd., odlučuje se tijekom razvoja.

Zadaci web usluga

Web usluge mogu se koristiti u mnogim područjima.

B2B transakcije

Integracija procesa događa se odmah, bez sudjelovanja ljudi. Na primjer, ažuriranje kataloga online trgovine novim proizvodima. Dovoze se u skladište, a skladištar evidentira prispjeće u bazi podataka. Podaci se automatski prenose u online trgovinu. A kupac, umjesto oznake “Out of stock” na kartici proizvoda, vidi njegovu količinu.

Integracija usluga poduzeća

Ako tvrtka koristi korporativne programe, tada će web usluga pomoći u postavljanju njihovog zajedničkog rada.

Izrada sustava klijent-poslužitelj

Usluge se koriste za konfiguriranje rada klijenta i poslužitelja. Ovo pruža prednosti:

  • ne možeš ga sam prodati softver, ali neka se pristup web-usluzi plati;
  • Lakše je riješiti probleme pomoću softvera treće strane;
  • lakše je organizirati pristup sadržaju i materijalima poslužitelja.

Web usluga je aplikacija koja pojednostavljuje tehničko postavljanje interakcije resursa.

Gdje ćemo početi? I to izravno iz kontakta naručitelj-izvođač: zvoni telefon u internetskom studiju. Voditelj računa podiže slušalicu i pozdravlja vas. S te strane zvuči otprilike ovako:

- Dobar dan. Trebam web stranicu, jednostavnu. Koliko košta? (ista priča s web aplikacijama).


Ovo je uistinu glavobolja za svaki račun. Ali nije nervozan i objašnjava da se stranice razlikuju po složenosti, funkcionalnosti itd. Pojašnjava što klijent treba i što znači "jednostavno" u njegovom razumijevanju. Na primjer, dobiva sljedeći odgovor:

- Pa vidite, ja imam posao prodaje prozora. Bilo bi lijepo napraviti web stranicu tako da možete sami sebi napraviti “virtualni” prozor. Odaberite boju, materijal, veličinu. Navedite količinu. Pogledajte kako će to izgledati. Pa, onda bi naši stručnjaci otišli na mjesto. Dogovoren?


Ovo je već zanimljivo. Ali to nije sve:

- I da, imam još jednu želju. Imamo odjel u Moskvi, St. Petersburgu i Novosibirsku. Osoblje je veliko, postoji papirologija, dobro, razumijete. Možete napraviti nešto poput... male društvene mreže unutar stranice, ili što? Bit će nam zgodnije komunicirati na ovaj način, bez ikakvih “asa”. I pohraniti dokumente u jedan "oblak" - čuo sam da to rade.


Voditelj računa sve zapisuje, daje grubu procjenu i imenuje trošak. Potencijalni klijent koluta očima (ovo se čuje čak i na telefonu), kaže "cijene su vam jednostavno lude" i pristojno poklopi.

Naravno, ovo je megapretjerana situacija, ali to se stalno događa i kod programiranja internetskih aplikacija i kod izrade web stranica. Naš cilj je otkriti zašto se to događa.

Što je web usluga?

Razvoj web servisa je, uglavnom, isti razvoj web stranice. Ali postoji jedno veliko "ALI": za razliku od promotivnih stranica i korporativnih događaja koji su već svima poznati, online usluga ima jedinstvenu funkcionalnost. To može biti dizajner proizvoda (kao u gornjem primjeru), hosting fotografija, zatvorena društvena mreža za korporativnu upotrebu, otvorena društvena mreža (danedaiboh), oglasna ploča...

Za izradu web usluge uglavnom se odlučuju oni koji se oslanjaju na inovativnost, praktičnost i moderne web tehnologije. U ovom slučaju, jedinstvena funkcionalnost djeluje kao "adut" poslovanja, uz njegovu pomoć treba ugušiti konkurente i povećati bazu kupaca.

A sve ovo znači da:

  • Trebat će neko vrijeme da se sagledaju sve mogućnosti za budući projekt. Obično puno vremena.
  • Bit će potrebna detaljna studija tehnički zadatak. Ili još bolje, prototip.
  • Morat ćete razviti sam web servis (neočekivano, zar ne?). Učinite to od nule ili koristeći postojeće razvoje. Ali u svakom slučaju, neće biti moguće "sastaviti" ga na koljenima, iz kutije, prema predlošku i "na brzinu".
  • Proizvod će morati biti temeljito testiran prije puštanja u promet.

Zbog toga će cijena izrade web usluge (zajedno s programiranjem) varirati. Ali uvijek će biti viši od mjesta s "uobičajenim" skupom funkcija.

Za naš primjer: kada je klijent spomenuo unutarnje društvena mreža, pohrana u oblaku za podatke i dizajner prozora - sve zajedno postalo je moguće nazvati web uslugom. Zbog toga je trošak nazvan "neočekivan" za kupca.

“Svemirske” cijene pri razvoju internetskih usluga opravdana su mjera. To je objektivno težak i dugotrajan posao.

Treba li poduzeću takva usluga zadatak je vaših marketinških stručnjaka.


Posebna i svima omiljena tema su društvene mreže.

Ovdje se događaju prilično smiješne stvari. Štoviše, te se komedije igraju s ozbiljnim licem. Na primjer, određeni aktivni postotak školaraca, "naprednih" korisnika VKontaktea, stalno želi vlastitu igru. Do vrtoglavog uspjeha. I kako ne bi smetali.

Kao rezultat toga, primamo gomilu pisama u inboxu iu zajednici s tekstom "prodajte/razvijte poslovnu aplikaciju/igru/nešto drugo za nas." Nešto kao ovo:

Da, 5000 rubalja za nekoliko tjedana rada - ok. Sada govorimo samo o primjerenim primjercima, a ne o onima koji dobiju publiku od 200 korisnika i nestanu.

Ako vas je ipak uhvatila manija da napravite uspješan klon, onda barem razmislite koliko je autore originala koštala promocija i promoviranje web aplikacije ili usluge (obično je to razvojni proračun pomnožen s deset).

Nemojte griješiti. Izračunajte svoju snagu. Pokretanje uspješnih internetskih projekata. Amen.

Naslov teme je zapravo pitanje, jer... Ni sam ne znam što je to i po prvi put ću pokušati raditi s njim u okviru ovog članka. Jedino što mogu jamčiti je da će kod prikazan u nastavku raditi, ali moji će izrazi biti samo pretpostavke i nagađanja o tome kako ja osobno sve ovo razumijem. Pa, idemo...

Uvod

Moramo početi s time zašto je nastao koncept web usluga. U vrijeme kada se ovaj koncept pojavio u svijetu, već su postojale tehnologije koje su omogućavale interakciju aplikacija na daljinu, gdje je jedan program mogao pozvati neku metodu u drugom programu, koja se mogla pokrenuti na računalu koje se nalazi u drugom gradu ili čak državi. Sve se to skraćeno naziva RPC (Remote Procedure Calling). Primjeri uključuju CORBA tehnologije, a za Javu - RMI (Remote Method Invoking). I čini se da je u njima sve dobro, pogotovo u CORBI, jer... Možete raditi s njim u bilo kojem programskom jeziku, ali nešto je ipak nedostajalo. Smatram da je mana CORBE što radi preko nekih svojih mrežni protokoli umjesto jednostavnog HTTP-a, koji će proći kroz svaki vatrozid. Ideja web servisa bila je stvoriti RPC koji bi se umetao u HTTP pakete. Tako je započeo razvoj standarda. Koji su osnovni koncepti ovog standarda:
  1. SAPUN. Prije pozivanja udaljene procedure, morate opisati ovaj poziv XML datoteka e SOAP format. SOAP je jednostavno jedno od mnogih XML oznaka koje se koriste u web uslugama. Sve što želimo nekamo poslati putem HTTP-a prvo se pretvori u XML SOAP opis, zatim se stavlja u HTTP paket i šalje drugom računalu na mreži putem TCP/IP-a.
  2. WSDL. Postoji web servis, tj. program čije se metode mogu pozivati ​​na daljinu. Ali standard zahtijeva da ovaj program bude popraćen opisom koji kaže da "da, u pravu ste - ovo je stvarno web servis i iz njega možete pozivati ​​te i te metode." Ovaj opis predstavljen je drugom XML datotekom, koja ima drugačiji format, naime WSDL. Oni. WSDL je samo XML datoteka koja opisuje web uslugu i ništa više.
Zašto tako kratko pitate? Ne možete li biti precizniji? Vjerojatno je moguće, ali da biste to učinili, morat ćete se okrenuti knjigama kao što je T. Mashnin, "Java Web Services." Eto, na prvih 200 stranica postoji Detaljan opis svaku oznaku SOAP i WSDL standarda. Isplati li se to učiniti? Po mom mišljenju ne, jer... sve se to automatski kreira u Javi, a vi samo trebate napisati sadržaj metoda koje bi trebale biti pozvane na daljinu. Tako se u Javi pojavio API kao što je JAX-RPC. Ako netko ne zna, kada kažu da Java ima takav i takav API, to znači da postoji paket sa skupom klasa koje enkapsuliraju dotičnu tehnologiju. JAX-RPC se vremenom razvijao od verzije do verzije i na kraju je postao JAX-WS. WS je očito kratica za WebService i mogli biste pomisliti da je ovo jednostavno preimenovanje RPC-a kao popularne poštarke ovih dana. To nije istina, jer Sada su se web usluge udaljile od izvorne ideje i omogućuju vam ne samo pozivanje udaljenih metoda, već i jednostavno slanje poruka dokumenata u SOAP formatu. Još ne znam zašto je to potrebno; malo je vjerojatno da će odgovor ovdje biti "samo u slučaju da je potrebno". I sam bih želio učiti od iskusnijih drugova. I na kraju, tada se pojavio JAX-RS za takozvane RESTful web servise, ali to je tema za poseban članak. Uvod se ovdje može završiti, jer... Zatim ćemo naučiti raditi s JAX-WS.

Opći pristup

U web uslugama uvijek postoji klijent i poslužitelj. Poslužitelj je naša web usluga i ponekad se naziva krajnja točka (kao krajnja točka do koje dolaze SOAP poruke od klijenta). Moramo učiniti sljedeće:
  1. Opišite sučelje naše web usluge
  2. Implementirajte ovo sučelje
  3. Pokrenite našu web uslugu
  4. Napišite klijent i daljinski pozovite željenu metodu web usluge
Web servis se može pokrenuti različiti putevi: ili opišite klasu glavnom metodom i pokrenite web uslugu izravno kao poslužitelj ili je postavite na poslužitelj kao što je Tomcat ili bilo koji drugi. U drugom slučaju ne pokrećemo se sami novi poslužitelj i ne otvaramo drugi priključak na računalu, već jednostavno kažemo Tomcat spremniku servleta da "smo ovdje napisali klase web usluga, molimo vas da ih objavite tako da svi koji vas kontaktiraju mogu koristiti našu web uslugu." Bez obzira na način pokretanja web servisa, imat ćemo istog klijenta.

poslužitelj

Pokrenimo IDEJU i stvarajmo novi projekt Stvori novi projekt. Naznačimo ime HelloWebService i pritisnite tipku Sljedeći, zatim gumb Završi. U mapi src napravimo paket ru.javarush.ws. U ovom paketu ćemo kreirati sučelje HelloWebService: package ru. javarush. ws; // ovo su anotacije, tj. način označavanja naših klasa i metoda, // u vezi s tehnologijom web usluge uvesti javax. jws. WebMethod; uvesti javax. jws. WebService; uvesti javax. jws. sapun. SOAPBinding; // kažemo da će naše sučelje raditi kao web servis@WebService // kažemo da će se web usluga koristiti za pozivanje metoda@SOAPBinding (style = SOAPBinding. Style. RPC) javno sučelje HelloWebService ( // kažemo da se ova metoda može pozvati na daljinu@WebMethod public String getHelloString(String name) ; ) U ovom kodu, klase WebService i WebMethod su takozvane zabilješke i ne rade ništa osim označavanja našeg sučelja i njegove metode kao web usluge. Isto se odnosi i na klasu SOAPBinding. Jedina razlika je u tome što je SOAPBinding komentar s parametrima. U ovom slučaju, parametar style se koristi s vrijednošću koja pokazuje da web usluga neće raditi kroz poruke dokumenta, već kao klasični RPC, tj. za poziv metode. Implementirajmo našu logiku sučelja i stvorimo klasu HelloWebServiceImpl u našem paketu. Usput, napominjem da je završavanje klase s Impl konvencija u Javi, prema kojoj je implementacija sučelja tako označena (Impl - od riječi implementacija, tj. implementacija). Ovo nije uvjet i slobodni ste nazvati klasu kako god želite, ali to zahtijevaju dobri maniri: package ru. javarush. ws; // ista napomena kao kod opisa sučelja, uvesti javax. jws. WebService; // ali ovdje se koristi s parametrom endpointInterface, // koji ukazuje puno ime klasa sučelja naše web usluge@WebService(endpointInterface= "ru.javarush.ws.HelloWebService") javna klasa HelloWebServiceImpl implementira HelloWebService ( @Override public String getHelloString (Naziv niza) ( // samo uzvrati pozdrav return "Zdravo, " + ime + "!" ; ) ) Pokrenimo našu web uslugu kao neovisni poslužitelj, tj. bez sudjelovanja Tomcata i aplikacijskih poslužitelja (ovo je tema za posebnu raspravu). Da biste to učinili, u strukturi projekta u mapi src Kreirajmo paket ru.javarush.endpoint, au njemu ćemo kreirati klasu HelloWebServicePublisher s glavnom metodom: package ru. javarush. krajnja točka; // klasa za pokretanje web poslužitelja s web uslugama uvesti javax. xml. ws. Krajnja točka; // klasa naše web usluge uvoz ru. javarush. ws. HelloWebServiceImpl; javna klasa HelloWebServicePublisher ( public static void main (String... args) ( // pokrenite web poslužitelj na portu 1986 // i na adresu navedenu u prvom argumentu, // pokretanje web usluge proslijeđene u drugom argumentu Krajnja točka. objaviti( "http://localhost:1986/wss/zdravo", novi HelloWebServiceImpl () ); ) ) Sada pokrenimo ovaj razred klikom Shift+F10. Ništa se neće pojaviti na konzoli, ali poslužitelj radi. To možete provjeriti upisivanjem reda http://localhost:1986/wss/hello?wsdl u svoj preglednik. Stranica koja se otvara, s jedne strane dokazuje da imamo web server (http://) koji radi na portu 1986 na našem računalu (localhost), as druge strane prikazuje WSDL opis naše web usluge. Ako zaustavite aplikaciju, opis će postati nedostupan, kao i sam web servis, stoga to nećemo učiniti, već ćemo prijeći na pisanje klijenta.

Klijent

U mapi projekta src Kreirajmo paket ru.javarush.client , au njemu klasu HelloWebServiceClient s glavnom metodom: package ru. javarush. klijent; // potreban za dobivanje wsdl opisa i kroz njega // doći do same web usluge uvoz jave. neto. URL; // ova će se iznimka dogoditi kada radite s URL objektom uvoz jave. neto. MalformedURLException; // klase za raščlanjivanje xml s wsdl opisom // i doći do servisne oznake u njemu uvesti javax. xml. imenski prostor. QName; uvesti javax. xml. ws. Servis; // sučelje naše web usluge (trebamo više) uvoz ru. javarush. ws. HelloWebService; javna klasa HelloWebServiceClient ( public static void main (String args) baca MalformedURLException ( // kreirajte vezu na wsdl opis URL url= novi URL ( "http://localhost:1986/wss/hello?wsdl") ; // Gledamo parametre sljedećeg konstruktora u prvoj oznaci WSDL opisa - definicije // pogledajte 1. argument u atributu targetNamespace // pogledajte 2. argument u atributu imena QName qname = new QName ("http://ws.site/" , "HelloWebServiceImplService" ) ; // Sada možemo doći do servisne oznake u wsdl opisu, Usluga usluge= Usluga. stvoriti (url, qname) ; // a zatim do oznake porta ugniježđene u njemu, tako da // dobiti vezu do objekta web usluge udaljenog od nas HelloWebService hello = usluga. getPort(HelloWebService.class); // Hura! Sada možete pozvati udaljenu metodu Sustav. van. println (bok. getHelloString ( "JavaRush" ) ); ) ) Dao sam najviše komentara na kod u listingu. Nemam što dodati, pa trčimo (Shift+F10). Trebali bismo vidjeti tekst na konzoli: Pozdrav, JavaRush! Ako ga niste vidjeli, vjerojatno ste zaboravili pokrenuti web uslugu.

Zaključak

Ova je tema pružila kratki izlet u web usluge. Još jednom ću reći da je velik dio onoga što sam napisao moja pretpostavka o tome kako to funkcionira i stoga mi ne biste trebali previše vjerovati. Bio bih zahvalan ako me upućeni ljudi isprave jer ću onda nešto naučiti. UPD.

Aleksandar Kačanov

Ideju web usluga razvili su divovi računalne industrije kao što su Sun, Oracle, HP, Microsoft i IBM. Ova ideja nije ništa novo, ali je veliki korak naprijed prema lakšem pristupu programima putem weba. Na temelju standardnih komunikacijskih formata, web servisi bi mogli potpuno promijeniti način na koji razmišljamo o tome kako bismo trebali izraditi web stranice.

Što je web usluga?

Zahvaljujući web uslugama, funkcije bilo kojeg programa mogu biti dostupne putem interneta. Dakle, programi kao što su PHP, ASP, JSP skripte, JavaBeans, COM objekti i svi ostali naši omiljeni alati za programiranje sada mogu pristupiti nekom programu koji se izvodi na drugom poslužitelju (tj. web servisu) i koristiti odgovor primljen od nje na njezinoj web stranici, ili primjena.

Recimo, ako trebam obaviti neki programski zadatak, a prezauzet sam (ili sam izvan sebe da ponovno izmišljam kotač), mogu koristiti usluge web servisa kojem će moja stranica pristupati putem interneta. Prosljeđivanjem zahtjeva s parametrima web servisu, očekujem da ću dobiti odgovor koji sadrži rezultat izvršenja mog zahtjeva.

Svatko tko je ikada radio u U zadnje vrijeme S Hotmail, već se djelomično susreo s web servisima: Passport sustav autentifikacije korisnika jedan je od servisa uključenih u Microsoft .NET inicijativu. Trenutno je dostupan besplatno, tako da kreatori web stranica mogu jednostavno implementirati provjeru autentičnosti korisnika na svojim stranicama.

Osnove

Načela iza web usluga su iznenađujuće jednostavna. I ne dodaju ništa novo u svijet distribuiranog računarstva i Interneta:

  • osoba odgovorna za web servis određuje format zahtjeva za svoj web servis i njegove odgovore
  • bilo koje računalo na mreži postavlja zahtjev web servisu
  • web servis obrađuje zahtjev, izvodi neku radnju i zatim šalje odgovor

Ta radnja može biti, na primjer, prikaz kotacije dionica, prikaz cijene određenog proizvoda, spremanje unosa u kalendar sastanaka, prijevod teksta s jednog jezika na drugi ili provjera broja kreditne kartice.

Standardi u srži

Razlog zašto smo svi odjednom zainteresirani za web usluge je taj što se temelje na standardima, otvorenim protokolima za razmjenu i prijenos podataka.

Prije toga mnoge su tvrtke razvile svoje vlastite standarde i formate. A sada sve što trebamo znati da bismo radili je jednostavan XML(eXtensible Markup Language), koji se prenosi preko starog poznatog HTTP protokola. To znači da su informacije o tome kako funkcioniraju web servisi dostupni svima, a web programeri koji su po struci upoznati s ovim tehnologijama već danas se mogu početi igrati s web servisima.

Razlika između web usluga i drugih tehnologija s kojima su se programeri susreli (na primjer, DCOM, imenovani kanali, RMI) je u tome što se web usluge temelje na otvorenim standardima, lako ih je naučiti i ti su standardi široko podržani diljem svijeta. Unix i Windows platforme.

Simple Object Access Protocol (SOAP) standardni je protokol koji je razvio W3C. Definira format zahtjeva web uslugama.

Poruke između web usluge i njezinog korisnika upakirane su u SOAP omotnice. Poruke sadrže ili zahtjev za izvođenje neke radnje ili odgovor - rezultat izvođenja te radnje. Omotnica i njezin sadržaj kodirani su u XML i prilično ih je lako razumjeti. Ovako izgleda jednostavan SOAP zahtjev kada se putem HTPP-a pošalje web servisu:

xmlns:env="http://www.w3.org/2001/06/soap-envelope">


xmlns:m="http://www.somesite.com/Postcode">
WC1A8GH
UK


Ključne elemente SOAP omotnice prilično je lako otkriti: to su dva parametra ( ("poštanski broj") i ("država")), koji se nalaze unutar elementa tzv . Ovaj element je naziv web servisa kojem šaljemo zahtjev. Ostali podaci u omotnici, kao što je kodiranje teksta i verzija SOAP-a, pomažu web-usluzi da pravilno obradi zahtjev.

A odgovor će izgledati ovako:

xmlns:env="http://www.w3.org/2001/06/soap-envelope" >

env:encodingStyle="http://www.w3.org/2001/06/soap-encoding"
xmlns:m="http://www.somesite.com/Postcode">
Da


Ovu poruku je još lakše dešifrirati. Element u našem zahtjevu promijenjen u element kao odgovor na zahtjev. Ovaj element sadrži samo jedan element , čija vrijednost označava je li naš poštanski broj točan ili ne. Tako smo magijom SOAP-a stvorili zahtjev koji nam služi koristan rad. Kao odgovor preko mreže dobivamo određenu vrstu odgovora u XML-u.

Sada o UDDI

Iako je SOAP protokol jednostavan, web usluge ne bi bile od velike koristi da nemamo načina da ih pronađemo. Srećom, IBM, Microsoft i Ariba su se pokrenuli i kreirali projekt Universal Description, Discovery and Integration (UDDI), za koji se nadaju da će postati zajednički katalog svih web usluga na webu.

UDDI sustav omogućuje tvrtkama da svoje web usluge izlože javnosti. Ovaj imenik radi kao telefonski imenik sve web usluge. Upis u UDDI imenik je besplatan, a osnivači projekta se nadaju da će ovaj imenik sadržavati opise svih, svih, svih servisa na cijelom Webu, tako da će za pronalazak željenog web servisa biti dovoljno okrenuti se samo jednom UDDI imenik.

Kako to sve funkcionira

Dakle, kako mogu pronaći pravu web uslugu?

Zamislimo da sam razvojni programer web stranice i moj me klijent zamolio da dodam na web mjesto nova značajka: Morate dodati provjeru poštanskog broja u obrazac za registraciju.

Da bih izvršio ovu provjeru, trebao bih napraviti bazu podataka svih poštanskih brojeva u svih 30 zemalja u kojima naša tvrtka posluje, a zatim provjeriti odgovara li poštanski broj gradu navedenom u registraciji prilikom registracije. Ali ja nemam te podatke i mislim da će prikupljanje takvih podataka morati potrošiti značajan iznos novca.

Umjesto da izdvojim novac za kupnju baze podataka, sam napišem kod, osiguram cjelovitost i ispravnost svih podataka i ispravim pogreške u skriptama, samo odem u UDDI direktorij i vidim postoji li web usluga koja može obaviti posao za mene . Dolaskom na stranicu http://www.uddi.org/ pokrećem pretragu i pronalazim izvrsnu uslugu XYZ Corp.

Pažljivo pregledavam definiciju formata web usluge (definicija je napisana u WSDL (Web Services Description Language), pazeći da usluga radi točno ono što mi je potrebno. Zatim provjerim sa svojim kolegama reputaciju XYZ Corp. i saznam da je solidan , a zatim kontaktirajte XYZ Corp. o cijenama. Ako je cijena za pristup usluzi unutar mog proračuna, pišem jednostavnu JSP stranicu za svoju web-lokaciju koja poziva web-uslugu XYZ Corp., i gle čuda, trenutna potvrda pojavljuje se na poštanskom broju stranice.

Vrijedno je vašeg vremena

Čak i ako nemate nikakve veze s programiranjem ili tehnologijama za razvoj web stranica, o web uslugama vrijedi naučiti više. Zamislite sliku kako s klijentom razgovarate o novoj web stranici, raspravljajući o svim funkcijama novog projekta. Sve ide odlično: proračun ispunjava očekivanja kupca, svidjela mu se skica plana lokacije i svidjeli su mu se primjeri sučelja. Čini se da sve radi.

I odjednom se sjete neke vrlo složene funkcije. Na sam spomen toga, lice vašeg web programera pozeleni i počne se gušiti i kašljati. Ovo je programer koji vam daje signal da će razvoj ove značajke zahtijevati puno novca i vremena ili jednostavno nije izvediv s takvim budžetom.

Odbaci svoj strah! Spreman sam jamčiti da na Internetu već postoji web-usluga koja vam je spremna pružiti potrebnu funkciju, a trošak korištenja ove web-usluge bit će puno niži od troška samostalnog razvoja njegovog analoga. Na ovaj način spasit ćete svog programera od nepotrebnih glavobolja, svog klijenta od uzaludnog trošenja novca tako što će samo nekoliko minuta provesti pregledavajući UDDI katalog.

Razvoj usluga

Naravno, programeri se ne moraju zadovoljiti samo web uslugama koje su izradili drugi. Koristeći jedan od sljedećih alata, možete stvoriti vlastitu web uslugu i pružati njezine usluge drugim korisnicima interneta.

Izbor alata za razvoj web usluga je velik. Uključuje alate tvrtki kao što su Sun (Open Net), Microsoft (.NET), (e-usluge) i IBM (Web usluge). Postoje i okviri otvorenog koda. Na primjer, Mono projekt ima za cilj zamijeniti Microsoftov .NET toolkit pružajući kompajlere, runtime i biblioteke za pokretanje istih web usluga na svim platformama, uključujući Unix.

Unatoč raznolikosti poslužitelja i alata za razvoj web usluga, svi podržavaju isti SOAP protokol, XML jezik i UDDI sustav.

minusi

Prije nego što u potpunosti napustim karijeru programera i posvetim se korištenju web servisa, moram si postaviti pitanje: "Previše je ružičasta slika. Što nije u redu s njom?" Nažalost, veliki potencijal web usluga ima svoju cijenu:

  • Korištenje XML-a kao formata za prijenos podataka rezultira time da su vaše poruke vrlo velike veličine: XML oznake zauzimaju puno prostora, a to nam stvara određeni teret za stvaranje, prenošenje i tumačenje poruka.
  • Budući da koristimo udaljena računala Za obavljanje određenih funkcija u potpunosti se oslanjamo na Internet, što stvara previše nepouzdanih veza u lancu između našeg web poslužitelja i web usluge.
  • Danas malo tvrtki stvara web usluge i malo ih tvrtki koristi. Otklanjanje pogrešaka i poboljšanje sustava web usluga još uvijek zahtijeva dosta vremena.
  • Programeri tek trebaju prihvatiti sustav licenciranja i naplate korištenja web servisa. Zbog činjenice da web servisa još uvijek ima premalo, većina tvrtki nastoji ostaviti dobar dojam na svoje potencijalne klijente namjernim smanjenjem troškova usluga i ponudom povoljnih uvjeta licenciranja. Još će proći neko vrijeme dok stvarna cijena web usluga ne postane jasna.

Kada web usluge zauzmu svoje mjesto i postanu dostupne svima, postat će neprocjenjiva pomoć web programerima. Oni će nam dati fleksibilan pristup punoj snazi ​​svih računala na mreži. Vrijeme je da se graditelji web stranica zainteresiraju za web usluge i saznaju više o tome što od njih mogu dobiti.

Naslov teme je zapravo pitanje, jer... Ni sam ne znam što je to i po prvi put ću pokušati raditi s njim u okviru ovog članka. Jedino što mogu jamčiti je da će kod prikazan u nastavku raditi, ali moji će izrazi biti samo pretpostavke i nagađanja o tome kako ja osobno sve ovo razumijem. Pa, idemo...

Uvod

Moramo početi s time zašto je nastao koncept web usluga. U vrijeme kada se ovaj koncept pojavio u svijetu, već su postojale tehnologije koje su omogućavale interakciju aplikacija na daljinu, gdje je jedan program mogao pozvati neku metodu u drugom programu, koja se mogla pokrenuti na računalu koje se nalazi u drugom gradu ili čak državi. Sve se to skraćeno naziva RPC (Remote Procedure Calling). Primjeri uključuju CORBA tehnologije, a za Javu - RMI (Remote Method Invoking). I čini se da je u njima sve dobro, pogotovo u CORBI, jer... Možete raditi s njim u bilo kojem programskom jeziku, ali nešto je ipak nedostajalo. Vjerujem da je nedostatak CORBA-e to što radi preko nekih vlastitih mrežnih protokola umjesto jednostavnog HTTP-a, koji će proći kroz svaki firewall. Ideja web servisa bila je stvoriti RPC koji bi se umetao u HTTP pakete. Tako je započeo razvoj standarda. Koji su osnovni koncepti ovog standarda:
  1. SAPUN. Prije pozivanja udaljene procedure, trebate opisati ovaj poziv u XML datoteci u SOAP formatu. SOAP je jednostavno jedno od mnogih XML oznaka koje se koriste u web uslugama. Sve što želimo nekamo poslati putem HTTP-a prvo se pretvara u XML SOAP opis, zatim se strpa u HTTP paket i šalje na drugo računalo na mreži putem TCP/IP-a.
  2. WSDL. Postoji web servis, tj. program čije se metode mogu pozivati ​​na daljinu. Ali standard zahtijeva da ovaj program bude popraćen opisom koji kaže da "da, u pravu ste - ovo je stvarno web servis i iz njega možete pozivati ​​te i te metode." Ovaj opis predstavljen je drugom XML datotekom, koja ima drugačiji format, naime WSDL. Oni. WSDL je samo XML datoteka koja opisuje web uslugu i ništa više.
Zašto tako kratko pitate? Ne možete li biti precizniji? Vjerojatno je moguće, ali da biste to učinili, morat ćete se okrenuti knjigama kao što je T. Mashnin, "Java Web Services." Tamo na prvih 200 stranica dolazi više detalja opis svake oznake standarda SOAP i WSDL. Isplati li se to učiniti? Po mom mišljenju ne, jer... sve se to automatski kreira u Javi, a vi samo trebate napisati sadržaj metoda koje bi trebale biti pozvane na daljinu. Tako se u Javi pojavio API kao što je JAX-RPC. Ako netko ne zna, kada kažu da Java ima takav i takav API, to znači da postoji paket sa skupom klasa koje enkapsuliraju dotičnu tehnologiju. JAX-RPC se vremenom razvijao od verzije do verzije i na kraju je postao JAX-WS. WS je očito kratica za WebService i mogli biste pomisliti da je ovo jednostavno preimenovanje RPC-a kao popularne poštarke ovih dana. To nije istina, jer Sada su se web usluge udaljile od izvorne ideje i omogućuju vam ne samo pozivanje udaljenih metoda, već i jednostavno slanje poruka dokumenata u SOAP formatu. Još ne znam zašto je to potrebno; malo je vjerojatno da će odgovor ovdje biti "samo u slučaju da je potrebno". I sam bih želio učiti od iskusnijih drugova. I na kraju, tada se pojavio JAX-RS za takozvane RESTful web servise, ali to je tema za poseban članak. Uvod se ovdje može završiti, jer... Zatim ćemo naučiti raditi s JAX-WS.

Opći pristup

U web uslugama uvijek postoji klijent i poslužitelj. Poslužitelj je naša web usluga i ponekad se naziva krajnja točka (kao krajnja točka do koje dolaze SOAP poruke od klijenta). Moramo učiniti sljedeće:
  1. Opišite sučelje naše web usluge
  2. Implementirajte ovo sučelje
  3. Pokrenite našu web uslugu
  4. Napišite klijent i daljinski pozovite željenu metodu web usluge
Možete pokrenuti web uslugu na različite načine: ili opišite klasu glavnom metodom i pokrenite web uslugu izravno kao poslužitelj ili je postavite na poslužitelj kao što je Tomcat ili bilo koji drugi. U drugom slučaju, mi sami ne pokrećemo novi poslužitelj i ne otvaramo drugi port na računalu, već jednostavno kažemo Tomcat spremniku servleta da “smo ovdje napisali klase web usluga, molimo vas da ih objavite kako bi svi koji vas kontaktiraju mogli koristite našu web uslugu." Bez obzira na način pokretanja web servisa, imat ćemo istog klijenta.

poslužitelj

Pokrenimo IDEA i napravimo novi projekt Stvori novi projekt. Naznačimo ime HelloWebService i pritisnite tipku Sljedeći, zatim gumb Završi. U mapi src napravimo paket ru.javarush.ws. U ovom paketu ćemo kreirati sučelje HelloWebService: package ru. javarush. ws; // ovo su anotacije, tj. način označavanja naših klasa i metoda, // u vezi s tehnologijom web usluge uvesti javax. jws. WebMethod; uvesti javax. jws. WebService; uvesti javax. jws. sapun. SOAPBinding; // kažemo da će naše sučelje raditi kao web servis@WebService // kažemo da će se web usluga koristiti za pozivanje metoda@SOAPBinding (style = SOAPBinding. Style. RPC) javno sučelje HelloWebService ( // kažemo da se ova metoda može pozvati na daljinu@WebMethod public String getHelloString(String name) ; ) U ovom kodu, klase WebService i WebMethod su takozvane zabilješke i ne rade ništa osim označavanja našeg sučelja i njegove metode kao web usluge. Isto se odnosi i na klasu SOAPBinding. Jedina razlika je u tome što je SOAPBinding komentar s parametrima. U ovom slučaju, parametar style se koristi s vrijednošću koja pokazuje da web usluga neće raditi kroz poruke dokumenta, već kao klasični RPC, tj. za poziv metode. Implementirajmo našu logiku sučelja i stvorimo klasu HelloWebServiceImpl u našem paketu. Usput, napominjem da je završavanje klase s Impl konvencija u Javi, prema kojoj je implementacija sučelja tako označena (Impl - od riječi implementacija, tj. implementacija). Ovo nije uvjet i slobodni ste nazvati klasu kako god želite, ali to zahtijevaju dobri maniri: package ru. javarush. ws; // ista napomena kao kod opisa sučelja, uvesti javax. jws. WebService; // ali ovdje se koristi s parametrom endpointInterface, // koji označava puni naziv klase sučelja naše web usluge@WebService(endpointInterface= "ru.javarush.ws.HelloWebService") javna klasa HelloWebServiceImpl implementira HelloWebService ( @Override public String getHelloString (Naziv niza) ( // samo uzvrati pozdrav return "Zdravo, " + ime + "!" ; ) ) Pokrenimo našu web uslugu kao neovisni poslužitelj, tj. bez sudjelovanja Tomcata i aplikacijskih poslužitelja (ovo je tema za posebnu raspravu). Da biste to učinili, u strukturi projekta u mapi src Kreirajmo paket ru.javarush.endpoint, au njemu ćemo kreirati klasu HelloWebServicePublisher s glavnom metodom: package ru. javarush. krajnja točka; // klasa za pokretanje web poslužitelja s web uslugama uvesti javax. xml. ws. Krajnja točka; // klasa naše web usluge uvoz ru. javarush. ws. HelloWebServiceImpl; javna klasa HelloWebServicePublisher ( public static void main (String... args) ( // pokrenite web poslužitelj na portu 1986 // i na adresu navedenu u prvom argumentu, // pokretanje web usluge proslijeđene u drugom argumentu Krajnja točka. objaviti( "http://localhost:1986/wss/zdravo", novi HelloWebServiceImpl () ); ) ) Sada pokrenimo ovaj razred klikom Shift+F10. Ništa se neće pojaviti na konzoli, ali poslužitelj radi. To možete provjeriti upisivanjem reda http://localhost:1986/wss/hello?wsdl u svoj preglednik. Stranica koja se otvara, s jedne strane dokazuje da imamo web server (http://) koji radi na portu 1986 na našem računalu (localhost), as druge strane prikazuje WSDL opis naše web usluge. Ako zaustavite aplikaciju, opis će postati nedostupan, kao i sam web servis, stoga to nećemo učiniti, već ćemo prijeći na pisanje klijenta.

Klijent

U mapi projekta src Kreirajmo paket ru.javarush.client , au njemu klasu HelloWebServiceClient s glavnom metodom: package ru. javarush. klijent; // potreban za dobivanje wsdl opisa i kroz njega // doći do same web usluge uvoz jave. neto. URL; // ova će se iznimka dogoditi kada radite s URL objektom uvoz jave. neto. MalformedURLException; // klase za raščlanjivanje xml s wsdl opisom // i doći do servisne oznake u njemu uvesti javax. xml. imenski prostor. QName; uvesti javax. xml. ws. Servis; // sučelje naše web usluge (trebamo više) uvoz ru. javarush. ws. HelloWebService; javna klasa HelloWebServiceClient ( public static void main (String args) baca MalformedURLException ( // kreirajte vezu na wsdl opis URL url = novi URL ( "http://localhost:1986/wss/hello?wsdl") ; // Gledamo parametre sljedećeg konstruktora u prvoj oznaci WSDL opisa - definicije // pogledajte 1. argument u atributu targetNamespace // pogledajte 2. argument u atributu imena QName qname = new QName ("http://ws.javarush.ru/" , "HelloWebServiceImplService" ) ; // Sada možemo doći do servisne oznake u wsdl opisu, Usluga usluga = Usluga. stvoriti (url, qname) ; // a zatim do oznake porta ugniježđene u njemu, tako da // dobiti vezu do objekta web usluge udaljenog od nas HelloWebService hello = usluga. getPort(HelloWebService.class); // Hura! Sada možete pozvati udaljenu metodu Sustav. van. println (bok. getHelloString ( "JavaRush" ) ); ) ) Dao sam najviše komentara na kod u listingu. Nemam što dodati, pa trčimo (Shift+F10). Trebali bismo vidjeti tekst na konzoli: Pozdrav, JavaRush! Ako ga niste vidjeli, vjerojatno ste zaboravili pokrenuti web uslugu.

Zaključak

Ova je tema pružila kratki izlet u web usluge. Još jednom ću reći da je velik dio onoga što sam napisao moja pretpostavka o tome kako to funkcionira i stoga mi ne biste trebali previše vjerovati. Bio bih zahvalan ako me upućeni ljudi isprave jer ću onda nešto naučiti. UPD.