OData en Strange Converter – deel 1

Nu ik volop in de apps zit, merk ik dat ik steeds vaker even een database wil maken en een webservice om die data in mijn app te krijgen. Gelijk denk ik dan aan een webservice met allemaal aanroepen zoals GetUsers() en dan weer GetUserById(int Id) etc. Dat moet toch veel makkelijker kunnen? Ja, dat kan makkelijker met OData!

Het Open Data Protocol (OData) is een web protocol om data makkelijk op te vragen en te wijzigen door bestaande technieken zoals HTTP, Atom Publishing Protocol en JSON te gebruiken. (bron: http://www.odata.org)

Het gebruiken van OData in een Windows Phone 7 app kan erg eenvouwdig opgezet worden. Doordat OData ook JSON kan versturen, kan het ook makkelijk in een Android of iPhone app worden gebruikt. Het wordt ook wel eens End Point genoemd, omdat het de entiteiten weergeeft die ook in de datastructuur bestaan.

Goed, genoeg bla bla, hoe benader ik mijn online database via OData in een Windows Phone 7 app? Om hier op in te gaan, maak ik een aantal aannames, namelijk:

  1. Je hebt toegang tot een online database, SQL Server bijvoorbeeld;
  2. Je hebt toegang tot een hosting of cloud dienst die een .NET applicatie kan draaien, bijvoorbeeld op AppHarbor.com.

Als voorbeeld ga ik een van mijn laatste apps gebruiken; Strange Converter. Op een dag, zittend in de zon, kwam ik (samen met Amber) op het idee om een app te maken die rare conversies uitvoert. Bijvoorbeeld het aantal rood in een meter of het aantal vierkanten in een liter. Ik had hiervoor nodig:

  • Een database met de conversies;
  • Een webservice die de conversies de wereld in helpt;
  • Een app natuurlijk die de conversies binnen haalt en toont op het scherm.

Database

Mijn database hou ik lekker simpel.

Twee tabellen, Units – met de units zoals ‘meter’, ‘rood’, ‘vierkant’ etc – en Conversions – met de verschillende conversies. Dit zorgt ervoor dat ik later altijd nieuwe units en conversies kan toevoegen, zonder een nieuwe app te moeten uitrollen.

OData Webservice & Entity Framework

Mijn volgende taak is het maken van de webservice die de database publiseerd naar iedereen die om de data vraagt. Het is netuurlijk ook mogelijk om de webserivce te beveiligen, maar dat hoeft in mijn geval nu niet. Hier zal ik later een blog post over schrijven hoe je dat kan doen.

In Visual Studio 2010 start ik een nieuwe ASP.NET Empty Web Application op.

Om deze online te krijgen in mijn AppHarbor cloud dienst, voeg ik hem toe aan de BitBucket gelinkte repository. In een eerdere blog post heb ik beschreven hoe je je AppHarbor account aan je BitBucket repository kan koppelen en deze weer kan integreren in Visual Studio 2010.

Volgende stap is te zorgen dat ik in mijn webservice mijn database kan uitlezen. Dit ga ik doen met behulp van het Entity Framework. Dit is een framwork dat mij de mogelijkheid geeft snel mijn database structuur om te zetten in classes binnen mijn project. Dit doe ik door een nieuw Entity Framework model toe te voegen aan mijn project: Add > New item > ADO.NET Entity Data Model.

Ik krijg dan gelijk een wizard waarin ik het Entity Data Model kan koppelen aan mijn database. Ik kies dan ook Generate from database (Next). Dan maak ik een nieuwe connectie naar mijn database. Nadat ik alle gegevens heb ingevoerd, kan ik een nieuw model laten genereren aan de hand van de structuur van mijn database. Ik kan dan precies de tabellen selecteren die ik wil opnemen in mijn Entity Data Model en klik op Finish.

Het Entity Data Model wordt voor mij gegenereerd. Alleen de relaties wil ik nog aanpassen, bijvoorbeeld Units wordt SourceUnit en Units1 wordt TargetUnit. Dit vind ik een logischere benaming. Deze nieuwe namen worden opgenomen in de klasses en duiden dadelijk mijn relaties naar de andere klasse aan binnen die klasses. Het zelfde doe ik ook bij Conversions en Conversions1.

Om het duidelijker te maken voor mij, verander ik ook de naam van de Namespace en de Entity Container Name. Dit wordt namelijk dadelijk de naam die ik ga gebruiken om de entiteiten aan te roepen. Vanuit de AppHarbor database bevat deze een lange, niet menselijke reeks letters en cijfers.

Goed, we hebben nu de entiteiten van de database en de connectie naar de database. Nu wil ik deze entiteiten via de OData webservice naar buiten brengen. Hiervoor maak ik een nieuwe WCF Data Service aan: Add > New item > WCF Data Service en ik noem deze StrangeConverterDataService.svc.

Het nieuwe bestand wordt toegevoegd en gelijk geopend. Hier zien we een template van de OData service. Ik hoef maar een paar dingen te doen om de service werkende te krijgen en dat is zorgen dat de Entiteiten worden gebruikt en dat de rechten goed staan.

De class die is aangemaakt inherrit van generiek DataService van een bepaald type. Dit type moet mij entiteit collectie zijn. Dit kan ik aanpassen door de /* To Do */ weg te halen en daar StrangeConverterEntities van te maken.

De StrangeConverterEntities is de naam van de entiteiten die ik verder boven heb aangemaakt.

Nu hoef ik eigenlijk alleen nog de toegang goed te zetten zodat iedereen de conversies kan ophalen en een eigen implementatie kan maken van de Strange Converter. Dit doe ik door config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead); uit het commentaar te halen en van “MyEntitySet” maak ik “*” wat inhoudt dat ik toegang verleen tot alle entiteiten.

Ik kan eventueel ook nog aangeven hoeveel resultaten je per keer kan terug krijgen door bijvoorbeeld config.MaxResultsPerCollection = 10; toe te voegen wat ervoor zorgt dat je altijd maar maximaal 10 resultaten terug krijgt.

Tot zo ver behandel ik de code. ServiceOperators ga ik volgende keer behandelen samen met ook de authenticatie van de OData webservice.

Zodra dit project online zet kan je je database benaderen door de OData webservice door [URL]/StrangeConverterDataService.svc. In mijn geval is dat http://strangeconverterwebservice.apphb.com/StrangeConverterDataService.svc/. Ik krijg dan in XML formaat terug wat de entiteiten zijn. Dit is ook gelijk mijn basis URL. Als ik de conversie wil zien dan gebruik ik http://strangeconverterwebservice.apphb.com/StrangeConverterDataService.svc/Conversions en krijg ik all conversies in en Atom feed terug. Dit kan ik dadelijk gebruiken in mijn app om de data te laden.

In deel twee (OData en Strange Converter – deel 2) ga ik verder in op het laden van de data in een Windows Phone 7 app.

2 reacties op OData en Strange Converter – deel 1

  1.  

    Zo goed als oData met M$ .Net werk, zo omslachtig werkt het met PHP herinner ik me nog haha ^^

  2.  

    Very informative post.Really thank you! Awesome. bcdgeekdbfef

leave your comment

Zoals de meeste websites gebruiken we cookies om een meer persoonlijke en snelle service te bieden.

Wij gebruiken cookies zodat onze website meer efficiënt kan functioneren, om de prestaties te verbeteren en, eventueel, om op maat reclame van onze partners aan te bieden. Als u doorgaat gaan we ervan uit dat u akkoord gaat alle cookies te krijgen van onze website.

To accept cookies please Click To Continue