Som så många andra använder jag Facebook dagligen för att hålla koll på vad alla mina vänner gör (eftersom jag är för lat för att höra av mig på annat sätt =). Facebook vilar på en väldigt snygg arkitektur där man t.ex. har möjligheten att skapa egna applikationer som lätt integreras med hela Facebook-siten. Varför inte då prova att skapa en egen applikation i Java?

Jag började med att leta efter information om hur man får sina egna applikationer att fungera mot Facebook. På http://developer.facebook.com finns allt man behöver veta om hur man sätter igång. I stora drag fungerar integrationen mot Facebook så att när en användare går till din applikation på http://apps.facebook.com/<dinapp> anropar Facebook’s servrar i sin tur din server för att hämta innehållet som skall visas på sidan. Din applikation kan sedan hämta data från Facebook-systemet genom att använda ett REST API (en typ av WebService). Detta innebär egentligen att man kan skapa en Facebook-applikation i vilket språk som helst som kan generera websidor. Det borde alltså inte vara några problem att skapa en snygg applikation i Java tillsammans med en webcontainer (t.ex. Tomcat). Men det var här jag stötte på patrull..

Hela Facebook-plattformen är byggd i PHP och därför är stödet stort för att utveckla egna applikationer i just PHP. Det finns stora bibliotek och massor med exempel hur du sätter upp din egen applikation mot Facebook i PHP. Däremot finns det väldigt lite dokumentation om hur man sätter upp en egen applikation i Java. Det lilla som finns hittar man på Developer-Wikin, där också några länkar till externa sidor finns. De externa sidorna innehåller väldigt värdefull information, men hjälper inte hela vägen ut. Som tur är har Facebook-teamet i alla fall skapat ett Java-paket som man kan ladda ner och börja använda på en gång. Dock ser klasserna som följer med ut att vara en copy-paste från PHP-koden; klassnamnen följer inte Java-standard och objektorienteringstänket är som bortblåst.

För att överhuvudtaget kunna göra något med sin applikation, måste man först få igång autentiseringen mot Facebooks servrar. När man registrerar sin applikation på Facebook-siten får man först en API-nyckel som identifierar applikationen, en privat nyckel som fungerar som lösenord för API-nyckeln. Dessutom får varje användare en egen sessionsnyckel varje gång de loggar in. Alla tre behövs för att kunna göra ett anrop mot Facebook’s API. Dokumentationen för hela denna process är rätt så god, men för att implementera detta i Java krävs det att man håller tungan rätt i mun. Autentiseringsmekanismen är dessutom väldigt bunden till HTTP-anropen och webblagret, så frågan är hur man på ett snyggt sätt kan dela upp applikationen i lager á la MVC.

Finns det någon annan där ute som har skrivit en applikation i Java och integrerat den med Facebook? Någon som lyckats få till en ”snygg” lösning? Det måste ju gå att separera autentiseringen från webb-lagret så att man kan göra anrop mot Facebook-API:et utan att skicka runt användarens sessionsnyckel hela tiden..!

Räkna med fler blogg-inlägg om detta..