Jak se propojit se Salesforce API?

Poslední dobou se s těmito otázkami roztrhl pytel:

  • Jak se integrovat se Salesforce?
  • Chceme data ze Salesforce načíst do našeho webu a ideálně je tam i upravovat, jde to?
  • Má Salesforce nějaké API?
  • Je Salesforce schopen zavolat naši webovou službu?

a já na všechny z nich odpovídám, že přeci jasně a že je to velmi jednoduché (když to zvládnu i já, amatérský programátor). Pěkný článek o tom napsal také Quinton Wall, který v článku uvedl i spoustu ukázkových kódů.

Kudy do toho?

O Trailheadu jsem už psal několikrát, takže nejrychlejší cesta je zvolit příslušný trail a během hodiny mít jasno, jak se spojit se Salesforce přes SOAP či REST rozhraní a že to má také Bulk a Streaming API. Které z nich chci použít si vybírám podle toho, co chci řešit a v jakém objemu a při celém svém programátorském snažení nesmím zapomenout na governor limity nebo na fakt, že počet API volání během dne je omezený podle toho, kolik jste si jich koupili.

Salesforce APIs

Skvělé také je, že libovolnou Apex třídu můžete publikovat jako webovou službu (konkrétní příklad třeba od Scotta Hemmetera).

Pokud stručný úvod nestačí, koukněte na vývojářskou komunitu. Zde můžete zdarma získat naprosto neomezenou (tedy pouze se dvěmi licencemi a menším místem, ale funkčně neomezenou) vývojářskou edici Salesforce a studovat a studovat a studovat. Nejvíc vás asi budou zajímat stránky o RESTSOAP API.

Naučíte se, že při přihlašování přes SOAP potřebujete security token, který se mění při každé změně hesla; že WSDL byste si měli vygenerovat z vaší instance Salesforce a existuje Partner a Enterprise WSDL (jedno je specifické pro vaši instanci, druhé univerzální); že API se v podstatě 3x ročně rozvíjí a je zpětně kompatibilní (aktuálně verze 38) a také o anotacích @RemoteAction pro zpřístupnění vaší třídy jako webové služby a @Future pro asynchronní volání, u něj navíc s kombinací callout=true.

Častá je také otázka, zda Salesforce poskytuje knihovny pro jednotlivé programovací jazyky. Ano, poskytuje, konkrétně v tuto chvíli pro PHP, Java, .NET a Ruby, seznam najdete na stránce se seznamem všech vývojových nástrojů a dalších věcí, které vám usnadní život.

Za zmínku stojí i Heroku. Pro mnohé prostě jeden z mnoha dalších poskytovatelů webových serverů, který ale může být úzce prointegrován se Salesforce. Heroku Connect zajišťuje automatický přenos záznamů mezi Salesforce a Heroku (respektive jeho Postgres databází), takže si čtete a zapisujete přímo do databáze a přenos dat běží, aniž byste se o něj starali. Navíc vás tato cesta nestojí žádné API volání a zpoždění přenosu dat je minimální (ale je).

Další možný způsob integrace, a také pořádně drahý, je Salesforce Connect. Ten vám umožní v Salesforce nadefinovat externí objekty, které jsou uloženy v nějaké externí databázi a přistupujete k nim třeba přes OData protokol. Uživatelé v Salesforce v podstatě nepoznají rozdíl, mohou tyto záznamy používat v reportech, vytvářet či měnit, jediné co v tuto chvíli nejde je používat je ve formula polích.

To jsem úplně vynechal Web-to-LeadWeb-to-Case, což jsou nejjednodušší integrace, pokud potřebujete do Salesforce jenom zapsat (do objektů Lead a Case, případně z nich pak pomocí workflow aktualizovat něco dalšího).

Volání webservice ze Salesforce

Co opačná cesta, tedy volat webservices ze Salesforce? Také to jde, nejjednodušší je Outbound Messaging, který ale v podstatě nepodporuje získání zpětné vazby.

Druhá cesta je běžné HTTP volání, které zapouzdříte do Apex třídy a voláte odkud potřebujete. A zase musíte myslet na governor limity a na omezení počtu volání v jednom běhu.

HttpRequest reqData = new HttpRequest();
Http http = new Http();
reqData.setHeader(‚Content-Type‘,’application/json‘);
reqData.setEndpoint(endpointURL);
reqData.setBody( jsonRequest);
reqData.setMethod(‚POST‘);
try {
   HTTPResponse res = http.send(reqData);
   responseFromNet = res.getBody();
}

Co licence?

Standardně je přístup přes API dostupný pouze od edice Enterprise, k těm nižším se dá dokoupit.

Druhá otázka zní, jakou licenci musí mít uživatel, pod kterým se do systému přistupuje. Buď můžete použít existujícího uživatele (jednoduché řešení, z hlediska bezpečnosti ovšem není ideální) nebo vytvořit nového, který může přistupovat pouze přes API. A pro tohoto uživatele nepotřebujete plnou licenci, ale stačí Salesforce Platform případně Force.com App, takže trochu ušetříte.

Zkrátka a prostě není to nic hrozného, průměrný programátor to zvládne nastudovat za odpoledne. Salesforce není typický moloch, se kterým se nedá komunikovat, právě naopak, je velmi otevřený veškerým integracím, dbá při tom ale na dodržení bezpečnosti a chrání data jak jen to jde.

Zajímá mě tvůj názor