Ohjelmallinen sisällönhallinta, kevät 2017

Luento 3.6. Verkkopalvelun arkkitehtuuri ja keskeinen toiminnallisuus

Jukka Huhtamäki, @jnkka

Luento 3.6. Verkkopalvelun arkkitehtuuri ja keskeinen toiminnallisuus

Luentokerran tavoitteena on perehtyä verkkopalveluarkkitehtuurin yleisiin periaatteisiin ja kaikille verkkopalveluille yhteisiin toimintoihin ja ominaisuuksiin:

Luentokerran aikana käsiteltävien ominaisuuksien toteuttaminen yleiseen, uudelleenkäytettävään sovelluskehykseen on välttämätöntä kun pyritään sovellusten toteutustyön tehostamiseen.

Asiakas-palvelin –malli vs. kolmikerrosmalli

Kolmikerrosmalli ja PHP

Opintojaksolla käytössä olevilla teknologioilla kolmikerrosmallin välikerros toteutetaan Web-palvelimen ja PHP-ympäristön yhdistelmänä:

  1. Välikerroksen toiminnallisuus ohjelmoidaan PHP-kielellä.
  2. Selaimen ja WWW-palvelimen välinen vuorovaikutus hoidetaan tuttuun tapaan HTTP-protokollalla.
  3. PHP-tulkki käyttää tietokantapalvelinta asiakasohjelman roolissa toimivan funktiokirjaston välityksellä.
  4. Tietokantapalvelimen ja -asiakkaan välinen vuorovaikutus toteutetaan käytössä olevan tietokannan omalla protokollalla tai yleisellä Open Database Connectivity (ODBC) -protokollalla.

PHP tukee sekä ODBC-protokollaa että yleisimpien tietokantapalvelimien omia protokollia: MySQL, PostgreSQL, MS Access, IBM DB2, Oracle, ...

ODBC-protokollan käyttäminen parantaa (ainakin teoriassa) sovelluksen siirrettävyyttä eri palvelinympäristöjen välillä. Tietokanta voidaan abstrahoida myös sopivalla ohjelmistokirjastolla. PHP-kielen tapauksessa eräs vaihtoehto on ADOdb.

Verkkopalvelun keskeiset toiminnot

Web-teknologialla toteutettujen palvelujen käyttöliittymät toteutetaan HTML-lomakkeisiin. Käy läpi Web-lomakkeita käsittevä luentomateriaali vuodelta 2012 ja varmista että hallitset lomakkeiden perusteet.

Pääsynhallinta

Yksinkertaisin keino pääsynhallinnan toteuttamiseen on HTTP-protokollan HTTP Basic Authentication -mekanismin käyttäminen:

Käyttöoikeuksien hallinta

Käyttöoikeuksien hallinta voidaan toteuttaa esimerkiksi seuraavilla tavoilla:

  1. Erittäin yksinkertaisessa sovelluksessa käyttöoikeuksiin ei välttämättä tarvitse ottaa kantaa ollenkaan: kaikilla käyttäjillä on samat oikeudet.
  2. Käyttöoikeudet määritellään jokaiselle käyttäjälle erikseen.
  3. Käyttöoikeudet jaetaan käyttäjille roolien avulla: jokaisella käyttäjällä on (yksi) rooli.
  4. Käyttöoikeudet jaetaan käyttäjille profiilien avulla: jokaisella käyttäjällä on yksi tai useampi profiili.

Käyttöoikeuksien jakaminen roolien avulla on toimiva ratkaisu silloin, kun palvelun käyttäjäryhmän jäsenet voidaan helposti ryhmitellä eri rooleihin. Profiilien käyttäminen mahdollistaa käyttöoikeuksien määrittelemisestä rooleja joustavammin.

Käyttäjän tunnistaminen: toteuta myös nämä

Lomakkeet ja HTTP

Lomaketoteutukset kommunikoivat Web-palvelmien kanssa HTTP-protokollalla.

Verkkopalvelu ja toimintojen luonne

Nykyaikainen Web-arkkitehtuuri (http://www.w3.org/TR/webarch/) jakaa verkkopalveluiden toiminnot kahteen luokkaan, turvallisiin ja ei-turvallisiin:

Toiminnon luonne & välitystavan valinta

Selain välittää käyttäjän syötteen palvelimelle HTTP-pyyntönä. Lomakesoveltajan valittavana ovat seuraavat HTTP-metodit:

Myös Web-selaimessa näkyviä eroja! Mitä?

Pysyvät URI-tunnisteet

Huomioi myös URI-tunnisteiden pysyvyys (stability) ja ennustettavuus (predictability):

Muista myös nämä!

Verkkopalvelun käyttäjä on liian usein pulassa Web-lomakkeiden kanssa.

Käyttäjän tukeminen on käytännössä otettava huomioon jo sovellusarkkitehtuurin suunnittelussa.

Istunnon hallinta

Istunnot käytännössä

Verkkopalvelun tietoturva

Verkkopalvelun tietoturvaan liittyviä riskitekijöitä (vrt. Welling ja Thompson 2004):

Tietoturvan toteuttamisessa on tehtävä kompromissi verkkopalvelun käytettävyyden, suorituskyvyn, kustannustehokkuuden ja turvallisuuden välillä. Esimerkkejä:

Paikkansa pitävä teesi: tietoturva on ennen kaikkea asennekysymys!

Verkkopalvelu: yleisiä ominaisuuksia

Verkkopalvelut sisältävät näennäisestä erilaisuudestaan huolimatta lukuisia yleisiä ominaisuuksia:

Verkkopalvelun toimintojen suunnittelumantra: Lisää/Poista/Muokkaa/Kopioi (CRUD)

Lisää yleisiä ominaisuuksia (vrt. Django)

Django listaa ansiokkaasti joukon laadukkaan Web-sovelluskehyksen ominaisuuksia:

Lisää kehysvaihtoehtoja

Djangon rinnalla on toki muitakin vaihtehtoja

Kolmikerrosmalli > AJAX ja REST

Kolmikerrosmalli > AJAX ja REST

Kohti AJAXia

Kolmikerrosmalli esittelee Web-hypermediajärjestelmän teknisen perustan.

AJAX (Asynchronous JavaScript And XML) mahdollistaa entistä vuorovaikutteisempien sovellusten kehittämisen ja esittelee lisää kerroksia arkkitehtuuriin.

Ks. havainnollinen [kaaviokuva AJAX-periaatteesta](http://www.webstepbook.com/supplements-2ed/slides/chapter12-ajax-xml-json.shtml#slide7).

Kohti RESTiä

Kolmikerrosmalli esittelee Web-hypermediajärjestelmän teknisen perustan.

REST (Representational State Transfer) -malli (Fielding 2000) laajentaa ja yleistää mallia kohti hajautettua Web-hypermediaa, vrt.

Fielding (2000): REST-mallin prosessinäkymä

Kuva: (Fielding, 2000)

Lopuksi