Azure Mobile Services: Cloud development made easy

Inleiding

Er zijn tegenwoordig veel verschillende manieren om mobile ontwikkeling te doen. Je kunt er natuurlijk voor kiezen om per platform een aparte app te ontwikkelen en alles native te doen, of je kiest voor een meer generieke aanpak zodat je code kunt delen over verschillende platformen. Denk aan HTML5/JavaScript, Sencha Touch, PhoneGap of Xamarin. Ongeacht de technologie die je kiest hebben ze allemaal een overlappend vraagstuk: hoe implementeer ik de backend van mijn app? Er zijn veel bedrijven die cloud backend diensten aanbieden maar in dit artikel geef ik een quick overview van een technologie die door Microsoft wordt aangeboden: Azure Mobile Services. Met Azure Mobile Services ben je in staat om snel en eenvoudig een cloud based backend voor je app te implementeren met onder andere authenticatie, push notificaties en offline-sync. In dit artikel ga ik er vanuit dat je al een Azure subscription hebt. Als dit niet het geval is kan je op http://azure.microsoft.com/en-us/pricing/free-trial/ een trial van 30 dagen aanvragen zodat je zonder extra kosten kunt ontdekken hoeveel mogelijkheden je met Azure hebt.

Waarom Azure Mobile Services?

Je zult misschien denken; leuk, de zoveelste cloud backend provider. Maar waarom zou ik voor Azure Mobile services kiezen? Aangezien ik me als developer vooral focus op de Microsoft stack is mijn antwoord vrij simpel; de integratie met andere Microsoft producten zoals Visual Studio en SQL Server. Toen ik eenmaal een Azure subscription had aangemaakt en was ingelogd, had ik binnen no-time een Mobile Service draaien in de cloud die ik vanuit Visual Studio had gepublished. Er is weinig handmatige configuratie nodig om een Mobile Service naar de cloud te publishen en vanuit je app requests te versturen naar die service. Daarnaast kan je met Mobile Services profiteren van de uitgebreide mogelijkheden die Microsoft je met Azure biedt. Zo kan je authenticatie, naast de gebruikelijke providers zoals Facebook en Google, inrichten met behulp van Azure Active Directory en biedt Azure je de mogelijkheid om je services 24/7 te monitoren. Deze monitoring informatie kan je benaderen via het dashboard dat beschikbaar is voor je Mobile Service op de management portal.

Een ander sterk punt van Azure Mobile Services is dat het volledig REST gebaseerd is en dat het gebruik maakt van JSON als gegevensuitwisselingsformaat. REST staat voor Representational State Transfer. REST maakt gebruik van het HTTP protocol en is gebaseerd op stateless client-server communicatie. Doordat REST gebruik maakt van HTTP is het zeer geschikt voor communicatie met verschillende platformen (bijvoorbeeld Windows, Mac en Linux) en programmeertalen. Je kunt met zowel C# als Java een HTTP client schrijven die via HTTP requests (GET, PUT, POST, DELETE) communiceert met een web service. Met Azure Mobile Services heb je dus genoeg aan een enkele Mobile Service om te communiceren met zowel een Windows Phone, Android als iOS app.

Als laatste punt wil ik de schaalbaarheid nog even benoemen. Als je een app hebt ontwikkeld die sterk aan populariteit wint dan is het zeer eenvoudig om op te schalen om zo het extra verkeer aan te kunnen. Dit kan via de management portal geregeld worden. Er worden op moment van schrijven drie verschillende niveaus aangeboden; free, basic en standard.

  • Free
    • Er is geen mogelijkheid tot opschalen. Je hebt altijd een enkele instantie van je Mobile Service beschikbaar.
    • Maximaal 500 actieve devices per dag die een request sturen of een push notificatie ontvangen van je Mobile Service.
    • Maximaal 500.000 API calls per maand.
    • Maximaal 60 minuten CPU tijd per dag.
    • Maximaal 165MB aan uitgaande data per dag.
  • Basic
    • Opschalen mogelijk tot maximaal 6 instanties.
    • Onbeperkt aantal actieve devices per dag.
    • Maximaal 1,5 miljoen API calls per instantie per maand.
  • Standard
    • Opschalen van een onbeperkt aantal instanties.
    • Onbeperkt aantal actieve devices per dag.
    • Maximaal 15 miljoen API calls per instantie per maand.

Voor meer informatie over de verschillen tussen de drie niveaus kun je een kijkje nemen op: http://azure.microsoft.com/en-us/pricing/details/mobile-services/

Zijn er dan ook nadelen?

Uiteraard kleven er ook nadelen aan het feit dat alles zo makkelijk integreert met Microsoft producten. Vanuit Microsoft willen ze je natuurlijk graag in de richting van andere producten sturen, waaronder Visual Studio. Als je Microsoft georiënteerd bent is dat natuurlijk geen probleem maar ik kan me voorstellen dat niet iedereen zit te wachten op een vrachtlading aan Microsoft technologieën om een backend in de cloud te kunnen realiseren. Al ben je natuurlijk vrij om te kiezen voor een JavaScript backend met Nodejs en een app geschreven in HTML/JavaScript, waardoor je ook niet afhankelijk bent van o.a. Visual Studio.

Zijn er nog meer nadelen? Ja, de prijzen! Er is een free plan voor Mobile Services maar als je van plan bent een serieuze app te bouwen waar dagelijks veel mensen gebruik van gaan maken dan lopen de kosten al gauw op. Met het basic niveau is dat nog enigszins behapbaar met een prijs van €11.17 per instantie per maand maar zodra je gebruik moet gaan maken van het standard niveau kost een enkele instantie je al een slordige €104.26 per maand, er van uitgaande dat je niet meer instanties nodig hebt en dat is al aardig aan de prijs. Zodra je gaat opschalen loopt het helemaal in de papieren. Dat is misschien ook wel direct het grootste nadeel van Azure Mobile Services. Het is erg eenvoudig om mee te starten en een Mobile Service naar de cloud publishen is zo gedaan, maar als je een app bouwt met veel netwerk verkeer en gegevensuitwisseling dan moet je eigenlijk vrij snel opschalen en bijbetalen. Hierdoor is het voor bedrijven die de hoge kosten van opschalen kunnen dekken misschien interessant, maar voor de “gewone” developer die een app bouwt en in de verschillende stores wil uitbrengen wat minder.

Time to fly!

Time to start the fun part! In dit artikel gebruik ik de standaard projecten die je iets verderop van de Azure management portal gaat downloaden, zodat het duidelijk wordt hoe eenvoudig het is om een Mobile Service in de lucht te brengen in combinatie met een app voor elk willekeurig platform.

  • Ga naar de Azure management portal en voeg een nieuwe Mobile Service toe.
    1. Kies een URL voor de service.
    2. Kies voor een nieuwe gratis SQL Server database van 20MB.
    3. Kies bij regio, wanneer mogelijk, voor West Europe. Ik heb voor North Europe moeten kiezen omdat West Europe niet beschikbaar was.
    4. Kies op het volgende tabblad een naam voor je database en voor een nieuwe SQL Server instance en maak een gebruikersnaam en wachtwoord aan.
Azure Mobile Services - Figuur 1

Create a Mobile Service

Azure Mobile Services - Figuur 2

Specify database settings

  • Als het goed is gaat de Azure portal nu even ratelen en heb je ongeveer binnen een minuut een Mobile Service en een bijbehorende SQL Server database.
  • We gaan het Mobile Service project en app voor een nader te kiezen platform nu downloaden en openen met Visual Studio 2013.
    1. Klik op de Mobile Service en kies het platform waarvoor je een app wilt ontwikkelen. In mijn geval is dat Windows Phone.
    2. Klik op download, pak de zip file uit en open de solution in Visual Studio 2013.
    3. Als het goed is zie je drie verschillende projecten; een Windows Phone project, een Windows project en een service project.
Azure Mobile Services - Figuur 3

Mobile Service created

 

  • We gaan het service project nu publishen naar Azure.
    1. Klik met de rechtermuisknop op het service project en klik op Publish.
    2. Je krijgt nu een dialog te zien waarin je het publish target moet selecteren, kies voor Microsoft Azure Mobile Services.
    3. Vervolgens moet je inloggen met je Azure account en als het goed is kun je daarna de Mobile Service selecteren die we in het begin hebben toegevoegd.
    4. Klik in het venster dat daarna getoond wordt even op ‘Validate Connection’ om er zeker van te zijn dat de connectie werkt.
    5. Klik op publish om de Mobile Service te publishen naar Azure.
    6. Als alles goed is gegaan wordt er een browser venster geopend en zie je een pagina met de melding ‘This mobile service is up and running’.
    7. We hebben nu onze eerste Mobile Service naar Azure gepublished. Dat was eenvoudig!
  • Voordat we onze Windows Phone app kunnen laten communiceren met de Mobile Service moeten we er nog voor zorgen dat hij ook verbinding gaat maken met de Mobile Service die we hebben gepublished naar Azure (standaard staat de configuratie op localhost).
    1. Open de app.xaml.cs file in het shared code project en zet het stukje code waarin verbinding wordt gemaakt met localhost in commentaar.

Haal het stukje code waarin verbinding wordt gemaakt met de Mobile Service uit commentaar. Als het goed is staan de URL en de applicatie key goed ingesteld omdat we de service al gepublished hebben naar Azure.

Azure Mobile Services - Figuur 4

Mobile Service configuration

  • We gaan de Windows Phone app nu runnen op een emulator.
    1. Zorg ervoor dat de Windows Phone app als startup project staat en druk op F5 (zorg er wel voor dat je de Windows Phone emulator geïnstalleerd hebt anders krijg je build errors).
    2. Als het goed is start nu de Windows Phone emulator op en wordt de todo app opgestart.
    3. Vul wat tekst in en klik op save.
    4. Als het goed is zie je het zojuist toegevoegde item verschijnen in de todo lijst.
    5. Ook bij het opnieuw starten van de app zal het toegevoegde item blijven staan, omdat deze nu is opgeslagen in de database van de Mobile Service.

Conclusie

Dat was het, we hebben nu een Mobile Service aangemaakt in Azure en we kunnen nu met onze Windows Phone app verbinding maken met deze service en er requests naartoe sturen. Ik hoop dat ik met dit artikel heb kunnen uitleggen hoe eenvoudig het is om met Mobile Services van Azure een cloud backend op te zetten voor je app.

Als we alle voor- en nadelen tegen elkaar afzetten ben ik aan de ene kant erg enthousiast over de eenvoud waarmee je een Mobile Service kunt optuigen en naar de cloud kunt deployen. Dat is bij Microsoft wel eens anders geweest. Aan de andere kant ben ik minder te spreken over de hoge prijzen die je voor je kiezen krijgt wanneer je instanties moet opschalen. Met een app die niet zoveel requests per maand gaat versturen en ontvangen is dat nog wel behapbaar. Maar zodra je een app hebt gebouwd die populair wordt en je bent genoodzaakt om te gaan opschalen, wordt het al gauw een duur feestje.

Voor meer informatie over Azure Mobile Services kun je terecht op http://azure.microsoft.com/en-us/documentation/services/mobile-services/