Podios tror på sitt eget API (gästinlägg)

Andreas har tidigare skrivit kort om Podio när de gjorde sitt API publikt för cirka 1 år sen. Nu har jag fått möjligheten att skriva lite om vad Podio är och naturligtvis om deras API. Jag som skriver heter Carl-Fredrik Herö och jobbar på Elvenite som nyligen blivit partner med Podio. Den 1 juni håller vi ett seminarium i Karlstad om just Podio.

Podio är en arbetsplattform där varje användare kan skapa sina egna verktyg eller “apps” (genom drag-and-drop, ingen programmering behövs) för att hålla reda på i princip vad som helst. Med lite uppfinningsrikedom kan Podio ersätta allt från sociala intranet och CRMsystem till projekt- och scrumverktyg.

Från många system till ett

På Elvenite har vi tidigare använt Yammer och Skype för prata internt och SugarCRM för kundregister, kontakter med mera. Vi upptäckte Podio i höstas och började testa det i liten skala till en början, gratis för team upp till 5 medlemmar. Ju mer vi använde det desto större potential såg vi och nu har vi helt ersatt både Yammer, SugarCRM och Zoho (för rekrytering) med Podio.

Podio tror på sitt eget API

På Elvenite arbetar vi dagligen med APIer av olika slag. Vår starka sida ligger i kombinationen affärssystem (främst Movex / M3), Business Intelligence och integrationen mellan dessa typer av system. Inom webb arbetar vi med wiki-plattformen Mindtouch som också har ett riktigt bra och framförallt snabbt API. Podios API är särskilt intressant av den anledningen att de äter sin egen hundmat. Alla deras gränssnitt (webbtjänst, iPhone- och Android-app) använder samma API som det de exponerar för oss utomstående utvecklare. Det borgar för ett stabilt och rikt API där vi tillåts göra samma sak med informationen som de själva.

Det dröjde inte länge innan vi insåg värdet av Podios API, kort efter att vi börjat med Podio byggde vi en widget till vår Zendesk-support som visar vilka konsulter som är på semester. Det förenklar enormt mycket för vår first line som alltid har koll på vem som kan tilldelas ett ärende. Vi har också börjat undersöka möjligheten att bygga en gadget till Windows som visar realtidsnoteringar från Podio direkt på skärmen, något vi saknar då Podio (än så länge) inte har någon desktop-app.

Framgångsfaktorer

Podio har verkligen förstått hur man ska arbeta med ett API för att frälsa sina externa utvecklare. Här är några av de saker som Podio gör helt rätt enligt mig:

  • Uttömmande dokumentation – På http://developers.podio.com/ förklaras hur Podio är uppbyggt och de konventioner som APIet använder. Dokumentationen innehåller naturligtvis en utförlig referenslista över alla metoder och dess parametrar. Det autentiseringssätt som rekommenderas är OAuth2 men det finns även möjlighet att skicka in användarnamn och lösenord, smidigt om man ska testa något snabbt.
  • Färdiga bibliotek för PHP, Ruby, Java och Python – Jag har bara använt PHP-biblioteket och det märks att de använder det själva. Ett mer komplett API-bibliotek får man leta efter. Hela deras frontend körs på Ruby så jag misstänker att det är lika välutvecklat. Python och Java innehåller dock inte alla metoder.
  • Inbyggd konsol – I dokumentationen har de lagt in en API konsol för varje GET metod. Har inte sett det tidigare men det gör det väldigt enkelt att direkt testa vilken data som returneras.
  • Diskussionsgrupp för utvecklare – Här hjälps man åt med allt från enklare frågor till att förmedla konsulttjänster.

Exempel med PHP-biblioteket, hämta en användares aktivitetsström

Exemplet utgår från att du har kunskap om PHP. När du testar APIet får du inte använda “localhost” som domän då Podio inte accepterar det. Börja med att ladda hem PHP-biblioteket och placera det i mapp nära filen med din egen kod. Inkludera APIet så här:

require_once ‘path/to/podio-php-lib/PodioAPI.php’;

Sen skapar vi en apinyckel på: https://podio.com/settings/api. Spara cliend ID och client secret som du får fram.

Sen måste vi autenticera användaren och vår app enligt oAuth2:

header(‘Location: https://podio.com/oauth/authorize?state=’ . $state . ‘&client_id=’ . $client_id . ‘&redirect_uri=’ . $url);

$state kan du använda för att skydda dig mot Cross Site Request Forgery (CSRF) (scrolla ner för att läsa mer). Du får tillbaka en $_GET[‘code’] som du behöver svara för att få ut access_token:

try{
$api->authenticate(‘authorization_code’, array(‘code’ => $code, ‘redirect_uri’ => $url));

$access_token = $api->oauth->access_token;
$refresh_token = $api->oauth->refresh_token;
} catch (PodioError $e){
echo ‘

’;
var_dump($e);
echo ‘

‘;
}

</blockquote>

Spara undan access_token och refresh_token i databasen (eller session) kopplat till din användare och lägg in dem i $api varje gång du ska göra ett anrop:

$api->access_token = $access_token;
$api->refresh_token = $refresh_token;

Nu ska vi hämta aktivitetsströmmen för den autenticerade användare. Ett enkelt anrop är allt som behövs:

$stream = $api->stream->get();

Du kan testa $api->stream->get(); utan en kodrad på https://developers.podio.com/doc/stream/get-global-stream-80012#api-sandbox-request-builder.

Avslutningsvis…

Podios flexibla struktur (användarna skapar själv appar och bestämmer vilka fält de ska innehålla) gör APIet ganska komplext, det faktum att de och inte har någon publik data späder också på startsträckan för att komma igång. Men jag är övertygad om att det faktum att de inte har något internt API har “tvingat” dem till att skapa bra dokumentation och ett tillförlitligt publikt API. Något som fler borde ta efter.