REST rajapintana mobiilikehityksessä

Samankaltaiset tiedostot
Trimble Feedback Mobile app ja rajapinnat Kuvaus

Web Services tietokantaohjelmoinnin perusteet

REST an idealistic model or a realistic solution?

Mikä yhteyssuhde on?

Järjestelmäarkkitehtuuri (TK081702)

Web Service torilla tavataan!

Koodistoeditorin toteutuksen lähtökohtia: KaPA-koodistopalvelu ja REST-rajapinnat

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Tiedonsiirto- ja rajapintastandardit

Periytyminen (inheritance)

Konesali ilman rajoja Kongressi A

Luokan sisällä on lista

...ii...iii...x. 1 Silverlight NET Framework for Silverlight Silverlight Silverlight. 2-1 Visual Studio Silverlight...

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

Django Jani Roine

Metodien tekeminen Javalla

C# ja.net. Juha Järvensivu 2007

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Listarakenne (ArrayList-luokka)

Olio-ohjelmointi Javalla

812336A C++ -kielen perusteet,

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

public static void main (String [] args)

Suuli api dokumentaatio

WEB-PALVELUITA HYÖDYNTÄVÄN WINDOWS PHONE 7 -SOVELLUKSEN RAKENTAMINEN

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

YHTEYSSUHDE (assosiation)

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

T Henkilökohtainen harjoitus: FASTAXON

Java UI-komponentit (JTable) Juha Järvensivu 2007

Group 2 - Dentego PTH Korvake. Peer Testing Report

More than logistics software

Javan perusteita. Janne Käki

Ohjelmointi 2 / 2010 Välikoe / 26.3

Rajapinta (interface)

Smart access control.

Viimeinen rajoite (hypermedia as the engine of application state) tarkoittaa käytännössä sitä, että palvelimelta saadut vastaukset sisältävät URIt

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

C++11 seminaari, kevät Johannes Koskinen

REST-arkkitehtuurityylin käyttö web-rajapinnoissa

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

UML ja luokkien väliset suhteet

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Toimintaympäristön kuvaus. LTC-Otso Myyjän työkalu (POC)

Delegaatit ja tapahtumakäsittelijät

TIEKE Verkottaja Service Tools for electronic data interchange utilizers. Heikki Laaksamo

LYTH-CONS CONSISTENCY TRANSMITTER

Microsoft Lync 2010 Attendee

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Telkkari tulee kännykkään. PacketVideo Finland Jarno Kallio

Ohjelmoinnin peruskurssien laaja oppimäärä

TIETORAKENTEET JA ALGORITMIT

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

9. Periytyminen Javassa 9.1

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

ASP.NET Data Binding. Harjoitukset C# ja VB

Ohjelmointiharjoituksia Arduino-ympäristössä

Sosiaalihuollon asiakastiedon arkiston validointipalvelu

////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ #include <EEPROM.h> #include <SoftwareSerial.h> SoftwareSerial gps(10, 0); // RX, TX -pinnit

QT tyylit. Juha Järvensivu 2008

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

TURVALLISEN TEKNIIKAN SEMINAARI Laitteiden etähallinta tietoverkkojen välityksellä Jani Järvinen, tuotepäällikkö

KOHDELUOKAN MÄÄRITTELY

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Suomi.fi-palvelutietovaranto

Täysautomatisoitu raportointiympäristö. Joni-Petteri Paavilainen Jani Alatalo

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Luokan muodostimet (Constructors)

Microsoft Visual Studio 2005

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Leikepöydän käyttö.net ja QT. Juha Järvensivu 2008

Kanta PHR:n Sandboxympäristöt. Eeva Turkka

Ohjelmointi 1 C#, kevät 2013,

Security server v6 installation requirements

Salasanan vaihto uuteen / How to change password

18. Abstraktit tietotyypit 18.1

SENAATTILA uudistuu keväällä 2015

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Koordinaattimuunnospalvelu

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Koodistopalvelun REST-rajapinnat

Kansallinen koodistojen siirtoformaatti

Pilottipalvelun esittely johtopäätökset

OSI ja Protokollapino

9. Periytyminen Javassa 9.1

OnniSMS Rajapintakuvaus v1.1

The CCR Model and Production Correspondence

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Oskarin avulla kaupungin karttapalvelut kuntoon

Lista luokan sisällä

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

HITSAUKSEN TUOTTAVUUSRATKAISUT

Kanta PHR:n CapabilityStatement ja REST-API. Eeva Turkka

2. Olio-ohjelmoinista lyhyesti 2.1

2010-luvun kansalaistaito: Windows-puhelimen ohjelmointi. Kai Lindgren, Teollinen tuotanto/metropolia

Transkriptio:

REST rajapintana mobiilikehityksessä Django & WP7 Jonne Räsänen 2011 jonne.rasanen@jyu.fi

Case iscope Hälytyspalvelu Web-palvelu Mobiilisovellus

REST (REpresentational State Transfer) Aikojakin vanhempi (1994-95) HTTP-pohjainen arkkitehtuurityyli GET, POST, PUT, DELETE

REST Hyvät puolet Yksinkertaisuus Laajasti käytössä Selkeä rakenne URI-osoitteilla

REST Rajoitteet Client-server -eriytys Tilattomuus Välimuisti Hierarkinen järjestelmä Yhtenäinen rajapinta Code on demand (valinnainen)

Django Python-pohjainen www-framework MVT-arkkitehtuuri Skaalautuva Hyvä yhteisötuki Poneja

Django-piston http://djangopackages.com/grids/g/api/ Yhä suosituimpia REST-plugineja Tuki usealle formaatille (JSON, XML..) Muokattavissa omiin tarpeisiin Kaamea ylläpito https://bitbucket.org/jespern/django-piston/wiki/home

Windows Phone 7 SilverLight-pohjainen mobiilialusta MMVM-arkkitehtuuri Avoimen yhteisön tuki http://codeplex.com

RestSharp Käytetyin REST-API.Net-ympäristössä WP7-tuki Helppokäyttöisehkö Dokumentaatio <= 0

Django models.py class Location(models.Model): user = models.foreignkey(user, null=true) lat = models.floatfield(default=0) lon = models.floatfield(default=0) time = models.datetimefield(default=datetime.datetime.now()) speed = models.floatfield(default=0) alt = models.floatfield(default=0) bearing = models.floatfield(default=0) provider = models.charfield(max_length=255, blank=true) accuracy = models.floatfield(default=0)

Django-piston handlers.py class LocationHandler(BaseHandler): # Handles user location methods_allowed = ('GET', 'PUT',) model = Location fields = ('lat', 'lon', 'time', 'bearing', 'provider', 'time', 'alt', 'speed', 'accuracy') def read(self, request): # Gets user location user = request.user return user.location def update(self, request): # Updates user location user = request.user profile = user.profile if not user.profile.allow_location_usage: # User does not allow profile updating resp = rc.bad_request resp.write(": Please enable location usage" +"to use this service.") return resp data = request.data if user.profile.allow_location_history: # Save location as a new instance # if history allowed loc = Location() loc.user = user else: loc = user.location # Add data to object loc.lat = float(data['lat']) loc.lon = float(data['lon']) loc.speed = float(data['speed']) loc.alt = float(data['alt']) loc.bearing = float(data['bearing']) loc.provider = data['provider'] loc.accuracy = float(data['accuracy']) loc.time = datetime.datetime.now() loc.save() profile.last_location = loc profile.save() UpdateLocationTask.delay(user) resp = rc.all_ok resp.write(": Location updated") return resp

Django-piston urls.py auth = HttpBasicAuthentication() # For testing purposes location_handler = Resource(handler=LocationHandler, authentication=auth) urlpatterns = patterns('', url(r'^location$', location_handler), # Get/update location )

WP7 Location.cs public class GeoLocation { public double lat { get; set; } public double lon { get; set; } public double accuracy { get; set; } public double alt { get; set; } public double speed { get; set; } public double bearing { get; set; } public string provider { get; set; } }

WP7 MainPage.xaml.cs location = new GeoLocation(); watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); // Use high accuracy. watcher.movementthreshold = 20; // Use MovementThreshold to ignore noise in the signal. watcher.statuschanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged); watcher.start(); void watcher_statuschanged(object sender, GeoPositionStatusChangedEventArgs e) { if (e.status == GeoPositionStatus.Ready) { // Use the Position property of the GeoCoordinateWatcher object to get the current location. GeoCoordinate co = watcher.position.location; location.lat = co.latitude; location.lon = co.longitude; location.accuracy = co.horizontalaccuracy; location.provider = "provider"; location.alt = co.altitude; // Stop the Location Service to conserve battery power. watcher.stop(); } } update_location();

WP7 MainPage.xaml.cs private void update_location() { settings.trygetvalue<networkcredential>("credentials", out credentials); // Get credentials from storage RestRequest request = new RestRequest("location", Method.PUT); request.credentials = credentials; request.requestformat = DataFormat.Json; request.addbody(location); client.executeasync<geolocation>(request, (response) => { if (response.statuscode == HttpStatusCode.OK) { // Everything went fine locationupdated = true; } else { // Something went wrong MessageBox.Show(response.Content); } }); }

Kysyttävää? Django: https://www.djangoproject.com Django-piston: https://bitbucket.org/jespern/django-piston/wiki/home RestSharp: http://restsharp.org iscope: http://iscope.it.jyu.fi RESTin faktojen tarkistelua: www.niksula.hut.fi/~hpelkone/main.pdf bit.ly/restisgood