RESTové API je elegantním způsobem, jak se Salesforce komunikovat z naší vlastní aplikace. Pokud máme vlastní IS nebo jen chceme se Salesforce programově komunikovat, RESTové rozhraní je pro svou širokou použitelnost výborným adeptem.
Pro komunikaci se Salesforce si nejprve zajistíme potřebné přihlašovací údaje. Budeme potřebovat celkem 5 údajů. (Vzhledem k techničnosti celé věci budeme používat anglické názvy a screenshoty.)
Username |
Přihlašovací jméno uživatele, pod kterým budeme se Salesforce pracovat |
Password | Přihlašovací heslo uživatele, pod kterým budeme se Salesforce pracovat |
Security Token |
Security token si vygenerujeme v Salesforce v prostředí uživatelského nastavení. V „My Settings“ najdeme položku „Reset My Security Token“ a kliknutím na tlačítko „Reset Security Token“ si jej necháme vygenerovat. Salesforce nám jej zašle do emailu. |
Client ID a |
Pro získání autentizačních „Client ID“ a „Client Secret“ musíme v Salesforce vytvořit tzv. „Connected App“. Nastavení nalezneme v „Setup“ -> „Create“ -> „Apps“ -> „Connected Apps“, kde vytvoříme nový záznam. V sekci API povolíme „Enable OAuth Settings“ čímž se nám odkryjí další nastavení. Vyplníme vše povinné, do „Callback URL“ zadáme volitelnou lokální URL, pro naši implementaci tento callback nebude použit, takže nemusí jít o existující URL. Po uložení vytvořené „Connected App“ budeme mít k dispozici vygenerované „Client ID“ a „Client Secret“.
|
Údaje v tabulce výše nyní použijeme v konkrétní implementaci RESTového přístupu. Zde se podíváme na 2 příklady implementace, jedno v prostředí jazyka JAVA použitím webového frameworku Spring Boot a druhé použitím jazyka Elixir.
A) JAVA (Spring Boot)
Použitá knihovna: https://github.com/jesperfj/force-rest-api
Jak na to? (Návod není zcela vyčerpávající, pokrývá nicméně všechny podstatné kroky)
- vytvoříme si nový Spring Boot projekt přes službu http://start.spring.io/ . Volíme si Gradle projekt, takže v konfiguračním souboru pak budeme potřebovat tyto závislosti:
1 2 3 4 |
compile('org.springframework.boot:spring-boot-starter-web') compile(group: 'com.frejo', name: 'force-rest-api', version: '0.0.34') runtime('org.springframework.boot:spring-boot-devtools') providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') |
- projekt si stáhneme v ZIPu, rozbalíme a otevřeme například v IntelliJ.
- v Spring Boot projektu si pro účely používání sdíleného připojení na Salesforce vytvoříme @Service třídu, jejíž instanci nám systém vytvoří jako „singleton“. (poznámka: heslo pro přístup do Salesforce musíme uvádět ve tvaru, kdy spojíme samotné heslo a security token. )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
@Service public class SalesforceService { ForceApi api=null; @Value("${salesforce.api.username}") String sfUsername; @Value("${salesforce.api.password}") String sfPassword; @Value("${salesforce.api.security_token}") String sfSecurityToken; @Value("${salesforce.api.client_id}") String sfClientId; @Value("${salesforce.api.client_secret}") String sfClientSecret; public ForceApi getApi() { if (this.api == null) { this.api = new ForceApi( new ApiConfig().setUsername(sfUsername) .setPassword(sfPassword+sfSecurityToken) .setClientId(sfClientId) .setClientSecret(sfClientSecret) ); } return this.api; } } |
- Nyní již jen potřebujeme vyzkoušet celé řešení pomocí jednoduchého controlleru, který s námi bude přes webové rozhraní komunikovat. Pro zjednodušení jsme zde použili RESTový controller, bude nám tak do prohlížeče posílat do JSONu konvertovaná původní data ze Salesforce. Příkladový controller, pomocí které vypíšeme seznam Accounts, může vypadat například takto.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@RestController @RequestMapping(path = "/sf") public class ApiController { @Autowired private SalesforceService salesforceService; @RequestMapping("/accounts") public List<Account> accounts() { QueryResult<Account> res = salesforceService.getApi().query("SELECT id, Name FROM Account", Account.class); return res.getRecords(); } } |
- Po nastartování SpringBoot projektu se na seznam položek vytažených ze Salesforce dostaneme pomocí URL http://localhost:8080/sf/accounts
B) Elixir (BEAM/OTP platform)
Použitá knihovna: https://github.com/jeffweiss/forcex
Jak na to? (Návod není zcela vyčerpávající, pokrývá nicméně všechny podstatné kroky)
- s Elixirem nebudeme vytvářet webový projekt, ale využijeme klasický Elixir projekt vytvořený mix příkazem pomocí:
1mix new salesforce_api
- do souboru mix.exs přidáme potřebné závislosti, tedy odkaz na knihovnu
-
12345defp deps do[{:forcex, "~> 0.5"}]end
… a přes „mix deps.get“ si závislosti dotáhneme.
- nyní přidáme do config\config.exs konfiguraci s údaji, které pro přístup do Salesforce potřebujeme
123456config :forcex, Forcex.Client,username: "user@example.com",password: "my_super_secret_password",security_token: "EMAILED_FROM_SALESFORCE",client_id: "CONNECTED_APP_OAUTH_CLIENT_ID",client_secret: "CONNECTED_APP_OAUTH_CLIENT_SECRET"Patřičné položky nahradíme našimi údaji.
- Dle návodu spustíme sérii akcí:
123$ mix deps.clean forcex$ mix deps.compile forcex$ mix compile forcex
- nyní bychom měli mít vše připraveno k tomu, abychom si spustili projekt na konzoli přes „iex -S mix“
- na konzoli pak můžeme RESTové API do Salesforce vyzkoušet například takto (další detaily použití nalezneme v dokumentaci knihovny)
-
12client = Forcex.Client.login |> Forcex.Client.locate_servicesaccounts = Forcex.query("select Id, Name from Account order by CreatedDate desc", client)