Témakörök Milyen alkalmazásoknál lehet erre szükség? Rossz megoldások (közvetlen adatbázis kapcsolat, statikus tartalmak) XML Web services SOAP, WSDL RSS REST JSON Push notification
Mikor? Milyen alkalmazásnál? Ha távoli adatokat kell elérjünk: 1. Példa: egy hírportálhoz készült mobil alkalmazás: El kell érjük a hírek listáját a webes formázások nélkül Keresni, rendezni, szűrni kell tudjunk 2. Példa: egy ingatlan közvetítő alkalmazás: Komplex keresési feladatok, találatok betöltése, lapozás a találatok között Kapcsolatfelvétel, üzenet küldés Titkos információk védelme (az ingatlan pontos címe, tulajdonos adatai) Ha adatokat szeretnénk eltárolni úgy, hogy azt más készüléken is elérhessük: Felhő megoldások, biztonsági másolatok Üzenetküldés: Ha két felhasználó akar egymással üzenetet váltani, egymásnak üzenetet küldeni.
Rossz megoldások Közvetlen kapcsolat az adatbázis szerverhez: A kapcsolódási adatokat az alkalmazásba kellene beégetni, ami könnyen kinyerhető mások számára A hozzáférési adatok birtokában más adatokhoz is hozzáférhetünk HTML tartalmak parse-olása: Nem kell külön adatforrás, majd a weblap adatait feldolgozzuk, átstruktúráljuk egy apróbb design módosítás is működésképtelenné teheti az alkalmazást
Stateful vs. Stateless Stateful: egy munkamenet azonosítóval azonosítja a klienst a szerver Előnye: nem kell minden kérésben minden adatot elküldeni (pl. bejelentkezési adatok, keresési, szűrési feltételek) Hátránya: a munkamenet inaktivitás után lejár, a munkamenet azonosító megszerzésével megszemélyesíthetjük a felhasználót. Mobil alkalmazásoknál ritkán használjuk
Stateful vs. Stateless Stateless: a szerver nem tárol el a korábbi tranzakcióinkból semmilyen adatot, minden tranzakcióban minden adatot meg kell adni. Előnye: nem kell külön erőforrást fordítani a munkamenet kezelésére, életben tartására Hátránya: Minden üzenetben meg kell adnunk minden adatot (pl. bejelentkezési adatok), ez növeli az üzenetek méretét
EXtensible Markup Language A legtöbb adatcsere formátum közös jellemzője, hogy XML struktúrát használ Miért szeretjük az XML-t? Szöveges állomány, ember számára is olvasható, értelmezhető Gyakorlatilag minden platformon van támogatás a feldolgozásukra, generálásukra Fejlett validálási megoldások (DTD, XSD) XML
Web services Alkalmazások közötti adatcsere szabványok és protokollok gyüjteménye A célja, hogy két különböző szoftver (pl. java és egy c++ program) egymással kommunikálni tudjon. Példa 1: egy autó alkatrész értékesítő országos hálózat Rendelkezik egy webáruházzal és telepíthető Windows alatti futó alkalmazással. A desktop alkalmazás SOAP protokollon keresztül éri el a központi adatbázist.
SOAP, WSDL SOAP - Simple Object Access Protocol Széles körben elterjedt adatcsere protokoll Példa: MNB valuta árfolyam lekérdezése SOAP segítségével: Részletes leírás: www.mnb.hu/arfolyamok.asmx
SOAP, WSDL Kérés <?xml version="1.0" encoding="utf-8"?> <soap:envelope xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/ XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:body> <GetCurrentExchangeRates xmlns="http://www.mnb.hu/webservices/" /> </soap:body> </soap:envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:envelope xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/ XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:body> <GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/"> <GetCurrentExchangeRatesResult>string</GetCurrentExchangeRatesResult> </GetCurrentExchangeRatesResponse> </soap:body> </soap:envelope>
SOAP, WSDL MNB árfolyam lekérdezése PHP-ból: $client = new SoapClient('http://www.mnb.hu/arfolyamok.asmx?WSDL'); $response_stdclass = $client->getcurrentexchangerates(); $xml = $response_stdclass->getcurrentexchangeratesresult; $parser=xml_parser_create(); xml_parse_into_struct($parser, $xml, $ertekek); WSDL: Webszolgáltatás leíró nyelv, ebben leírhatjuk, hogy milyen metódusokat tudunk SOAP-on keresztül meghívni, azoknak milyen paraméterei és visszatérési értékei vannak. Használata nem kötelező.
SOAP mobil környezetben A protokoll tökéletesen alkalmas lenne mobil alkalmazásokhoz, de sajnos a natív SDK szinte egyik platform esetén sem támogatja. 3rd party library-k léteznek android és ios platformra is, de ezek működése sajnos nem mondható tökéletesnek. Ezen okok sajnos azt eredményezik, hogy egy új projekt esetén nem javasolt SOAP-ra építeni a rendszert. Meglévő SOAP-os infrastruktúra esetén érdemes csak ebben gondolkodni
RSS Rich Site Summary Arra feljesztették ki, hogy a gyakram frissülő site-ok az új tartalmak rövid összefoglalójának terjesztésére. Ez alkalmas lehet egy mobil hírolvasó alkalmazás vagy widget működéséhez. Példa:<item> <title> <![CDATA[ Amikor még aranyból voltak a Földközi-tenger szigetei ]]> </title> <link> http://index.hu/mindekozben/poszt/2014/08/25/amikor_meg_aranybol_voltak_a_foldkozi-tenger_szigetei/ </link> </item>
REST Representational State Transfer Megszorítások: kliens-szerver architektúra: a kliensek nem foglalkoznak adattárolással, a szerverek nem foglalkoznak felhasználói felülettel állapotmentes: a szerver nem tárolja a kliens állapotát, minden kérés minden információt tartalmaz gyorsítótárazhatóság: minden kérésnek tartalmaznia kell, hogy gyorsítótárazható-e réteges felépítés: lehetőséget ad arra, hogy közvetítőn keresztül kapcsolódjunk a szolgálatatáshoz egységes interfész igényelt kód (opcionális): a szerverek képesek lehetnek a kliens funkcióinak kiterjesztésére program részletek átadásával, amit a kliens futtatni tud
JSON JavaScript Object Notation Kis méretű, szöveges, ember által olvasható adatcsere formátum Az XML-nél tömörebb, kevesebb adatforgalmat igényel Támogatott adattípusok: szám (double) karakterlánc bool tömb objektum null
JSON Példa: "vezeteknev": "Kovács", "cim" : "utcahazszam": "2. utca 21.", "varos" : "New York",, "telefonszam": [ ] "tipus" : "otthoni", "szam": "212 555-1234", "tipus" : "fax", "szam": "646 555-4567"
JSON Használata: Javascript AJAX Mobil alkalmazások és webszerverek közötti adatcsere Mobil alkalmazások: ios, Android, Windows Phone SDK-ban egyszerűen feldolgozható és generálható JSON tartalom. HTTP POST kérésben elküldjük a kérést a szerver felé A válaszban visszakapjuk a kért eredményt
JSON mobil alkalmazás Kérés: "message": példa "action": "gettask", "request": "params": "taskid": "1234"
JSON mobil alkalmazás Válasz: "message": példa... "action": "gettask", "response": "resultcode": 0, "data": [ "filingnumber": "Iktatószám", "filingdate": "Iktatás dátuma", "documentlink": "Iratpéldány hivatkozások", "externalpartner": "Külső partnerek", "ownerorganization": "Birtokló szervezet", "manager": "Ügyintéző",
Push Notification Windows Phone Push notification Google Clound Messaging Apple Push Notification Service
Push Notification A mobil készülék életben tart egy TCP kapcsolatot, amire a szerver értesítéseket tud küldeni. Android esetén Google Clound Messaging (GCM) néven érhető el ios esetén Apple Push Notification Service (APNs) Ha értesítést szeretnénk küldeni, akkor a Notification server felé kell elküldenünk az alkalmazás azonosítóját, a felhasználó azonosítóját és az üzenetet. A mobil készülék az alkalmazás azonosító alapján dönti el, hogy melyik alkalmazásnak szól és engedélyezett-e az értesítés.
Biztonság HTTPS feletti kommunikáció Forráskódba beégetett jelszavak használatának mellőzése Szerver oldalon a jogosultságok ellenőrzése minden műveletnél A szerver megszemélyesítésével járó támadásra való felkészítés: a támadó eléri, hogy az ő szervere válaszoljon az alkalmazás kérésére. Megoldás: a bizalmas üzenetek nyilvános kulccsal történő aláírása és az aláírt üzenethez egy véletlen sorozatot is fűzzünk a visszajátszás megakadályozása érdekében
A mobil alkalmazásból a felhasználó tud fiókot regisztrálni és bejelentkezni. A fiókot a saját szerverünkön tároljuk és a bejelentkezést is mi végezzük. 1. lépés: adatbázis tábla létrehozása: CREATE TABLE `users` ( `username` varchar(20) NOT NULL, `password` varchar(16) NOT NULL, `email` varchar(25) NOT NULL, PRIMARY KEY (`username`) ) Példa alkalmazás
Példa alkalmazás 2. JSON üzenetek definiálása: Regisztráció: "message": "action": "registeruser", "request": "params": "username": "Felhasználó azonosítója", "password": "Felhasználó jelszava", "email": "Felhasználó email címe" Regisztráció válasz: "message": "action": "registeruser", "response": "resultcode": 0 1
Példa alkalmazás Bejelentkezés: "message": Bejelentkezés válasz: "message": "action": "login", "request": "params": "username": "Felhasználó azonosítója", "password": "Felhasználó jelszava", "action": "login", "response": "resultcode": 0 1
Példa alkalmazás 3. Szerver oldali kód (PHP): $data = json_decode(file_get_contents('php://input')); switch ($data[ message ]) case registeruser : $resp = registeruser($data[ params ]); break; case login : $resp = login($data[ params ]); break; echo $resp;