Mówiąc krótko językiem nerdów – Apex to silnie typowany, obiektowy język programowania. Jest to autorski język platformy Salesforce Lightning, który jest zapisywany i uruchamiany na wielodostępnej platformie chmurowej.
Słyszałem, że Apex to coś jak Java
Składniowo tak – Apex jest podobny do Javy. Jeśli potrafisz programować w Javie, jesteś naprawdę blisko, aby zostać programistą Apex! Ale nie, to nie jest Java. Apex jest kompilowany jak Java, ma wirtualną maszynę Javy gdzieś tam w tle, ale nie jest to pełnoprawna maszyna wirtualna Javy, tylko jej wydzielona część.
Szczegóły są dostępne wewnętrznie tylko dla Salesforce, ale jeśli naprawdę interesuje Cię ten temat, kilka fajnych detali możesz znaleźć w tym patencie: Patent US20110264861: Methods and systems for utilizing bytecode in an on-demand service environment including providing multi-tenant runtime environments and systems.
Słyszałem, że w Apeksie nie mogę zrobić X, Y czy Z – dlaczego więc miałbym w ogóle marnować czas na czytanie o jakimś dziwnym języku?!
Możesz traktować go na wysokim poziomie jako uproszczoną wersję Javy.
Ale serio: czy naprawdę potrzebujesz ArrayList, LinkedList, Stack, Vector, TreeSet, LinkedHashSet, HashSet, HashMap, TreeMap i wielu innych tylko do przechowywania niektórych rekordów? W Apeksie znajdują się List, Set i Map – łatwe do wybrania i użycia!
Apex to język do pracy. Tak, możesz zrobić Dependency Injections, jeśli chcesz.
A oto, co o Apeksie mówią ludzie z Salesforce: “Apex służy wyłącznie do budowania aplikacji biznesowych służących do zarządzania danymi i procesami w szerszym kontekście platformy Apex Lightning. Jednak w zakresie aplikacji biznesowych kod Apex zapewnia wyjątkowo wydajne i produktywne podejście do tworzenia funkcjonalności i logiki, pozwalając programistom skupić się tylko na elementach specyficznych dla ich aplikacji, pozostawiając resztę »hydrauliki« frameworkowi platformy.”
Odważna teza! Ale czy to nie tylko marketing? NIE!
Ale proszę bardzo, jeśli naprawdę chcesz spędzić 95% swojego czasu na konfigurowaniu serwerów, baz danych, mikrousług, interfejsów, bram, systemów równoważenia obciążenia, backupów i ciągłych wdrożeń… a, no i bezpieczeństwa i redundancji – wybierz inny język i inną platformę.
Apex jest:
- zintegrowany z bazą danych – możesz wykonywać wbudowane zapytania i pętle, np. pobierasz Id oraz Name z tablicy kontaktów (1) takich, które mają adres do korespondencji w Polsce, ale ich wpis do tablicy Account (czyli robimy joina) (2) zawiera tylko te, które mają w nazwie „soft”. Iteruj po liście, wprowadź zmiany (3), a następnie zaktualizuj bazę danych (4). Ile pracy musiałbyś wykonać w innym języku? Sprawdź to!
- wersjonowany – możesz mieć wiele klas wywołujących się wzajemnie, ale każda z nich może działać we własnej wersji. Tak, ten 10-letni Apex może współpracować z nowiutkimi funkcjami, które właśnie zbudowałeś! I poza tym masz trzy duże aktualizacje platformy rocznie, a z każdą z nich wprowadzane są nowe funkcjonalności.
- łatwy w użyciu – składnia jest podobna do Javy, metody Apex są dobrze udokumentowane i wokół tego języka działa bardzo silna społeczność programistów.
- rygorystyczny – Apex jest silnie typowany i skompilowany. Kompilacja szybko kończy się niepowodzeniem, jeśli jakiekolwiek odwołania są nieprawidłowe. Apex przechowuje wszystkie niestandardowe zależności pól, obiektów i klas w metadanych. Dzięki temu nie zostaną one usunięte i będą zawsze dostępne, jeśli będzie tego wymagał aktywny kod Apex. Innymi słowy – nikt nie usunie kolumny w bazie danych, jeśli jej używasz w którymkolwiek fragmencie kodu!
- transakcyjny – wszystkie operacje DML w danej transakcji kończą się pomyślnie, lub – jeśli wystąpi błąd w jednej operacji – cała transakcja zostanie wycofana i żadne dane nie zostaną przypisane do bazy danych. Dzieje się tak automatycznie!
- „pakowalny” – możesz spakować swój kod i sprzedać go w AppExchange! Lub po prostu wziąć gotowe komponenty i ponownie użyć ich w swojej instancji.
Jeśli naprawdę muszę, gdzie mogę użyć języka Apex?
Krótko mówiąc – w całym backendzie! A czym jest backend dla Salesforce?
Anonimowe bloki:
Możesz używać kompilowanych i wykonywanych na bieżąco anonimowych bloków, które nie są nigdzie przechowywane. Chcesz szybko poprawić dane? Nie ma problemu! Wysłać e-maile? Śmiało!
Wyzwalacze bazy danych (triggery):
Tak, ten sam język! Wyzwalacze w Apeksie umożliwiają wykonywanie niestandardowych działań przed lub po zmianach w rekordach Salesforce, takich jak wstawianie, aktualizacje lub usuwanie.
Kontrolery we wzorcach MVC:
Jeszcze raz tak. Ten sam język – Apex.
Usługi sieci REST i SOAP:
Dlaczego nie? Eksponuj dowolne dane według wybranych przez siebie reguł za pomocą OAuth2.0 lub w pełni niestandardowego uwierzytelnienia. To kwestia kilku linijek kodu! Tutaj mamy punkt końcowy (endpoint) „Account”, w którym przekazujesz Id przez URI i uzyskujesz dodatkowe informacje na jego temat.
Przetwarzanie e-maili:
Możesz wyeksponować adres e-mail w Salesforce i przetworzyć wiadomości w dowolny, niestandardowy sposób. Przykładowo, jeśli otrzymasz wiadomość, ale nie masz powiązanego z nią kontaktu, możesz go stworzyć.
Zdarzenia
Tak! Masz magistralę zdarzeń klasy enterprise, której możesz po prostu użyć w kodzie! Czy ktoś powiedział „Kafka”?
Środowisko bezserwerowe oparte na Kubernetes
Salesforce Evergreen wprowadza funkcje bezserwerowe oparte na w pełni zarządzanych Kubernetes oraz wsparcie dla otwartych języków programowania i powszechnie używanych wysokowydajnych magazynów danych. Evergreen obsługuje technologie i wzorce architektoniczne takie jak:
- Functions-as-a-Service (Node.js, Java i Apex)
- Mikrousługi
- Zarządzane magazyny danych (Postgres, Apache Kafka i Redis)
Tak, te wszystkie cuda na tej brzydkiej platformie Salesforce! Może w końcu nie taki zły ten Apex?
Deweloperzy go nienawidzą! Naprawdę?
Apex wymusza na deweloperach dobre praktyki programowania dzięki dwóm najważniejszym cechom, a są to:
- wdrożenie wymuszone testowo (test-enforced deployment) oraz
- limity platformy.
Tak, jeśli nie lubisz testować i pisać optymalnego kodu, Apex ci się nie spodoba. Sorry!
Testowanie!
Apex jest łatwy do przetestowania, ponieważ ma wbudowaną obsługę tworzenia i wykonywania testów jednostkowych. Dzięki temu dokładnie wiesz, które linijki są dobre, a które wymagają dodatkowej uwagi. Możesz zasymulować usługi zewnętrzne, dzięki czemu zadbasz również o integrację interfejsu API REST czy SOAP.
Nie możesz przekazać kodu na produkcję, jeśli co najmniej jego 75% nie jest przetestowane jednostkowo! Właśnie za to można nienawidzić Apeksa!!!
Limity platformy
Lubisz pisać zapytania do bazy danych w pętli „for”? Zostaniesz ukarany!
Lubisz wysyłać zapytania do całej tabeli bazy danych, jeśli potrzebujesz tylko 2 pól z 4 rekordów z tabeli z 500 kolumnami i 10 milionami rekordów? Zostaniesz ukarany!
Lubisz używać algorytmów O(n^4)? Tak, zostaniesz ukarany!
Rozwiązanie jest proste: zacznij po prostu pisać dobry kod! Ponieważ Apex działa w środowisku wielodostępnym, jego silnik wykonawczy ściśle egzekwuje ograniczenia, aby niekontrolowany kod lub procesy nie zmonopolizowały udostępnionych zasobów. Jeśli jakiś kod Apeksa przekracza limit, platforma generuje wyjątek czasu wykonywania (runtime exception), którego nie można obsłużyć i cała transakcja ulegnie cofnięciu.
A jak jest z pracą dla programistów Apex?
Cóż, znam całkiem sporo osób, które programowały w Javie i weszły w świat Salesforce. Nie pamiętam jednak, by ktoś opuścił Salesforce dla Javy. Hmm…
Pieniądze? Interesująca praca? Zróżnicowane zadania? Różne zastosowania Apeksa? Nie mam pojęcia, jaki jest powód!
Zwykle mówimy, że mamy Salesforce Developera. Pracuje on głównie z backendem – tak, z Apeksem. Ale większość programistów to tacy „ninja”, którzy w Salesforce mają dużo pracy związanej także z frontendem w postaci Lightning Web Components (nowoczesny framework Web Component), Lightning Components (nieco starszy, oparty na Aura) lub Visualforce Pages (wzorzec MVC). Pracując z Salesforce, poszerzasz swoją wiedzę nie tylko o Apeksie (obiektowym języku programowania skupionym na backendzie), ale także o JavaScript, HTML5, CSS3 i nowoczesnych technologiach webowych.
Z Salesforce korzysta ponad 150 000 firm z każdej branży. Słyszałem o Adidas, AWS, T-Mobile, Philips, Toyota, ABB, Spotify, EA, Activision, GE, KLM, Nielsen, PWC, Pandora, Shazam, Unilever – same niszowe firmy, prawda?
No dobrze, ale czy mogę się gdzieś nauczyć języka Apex, nie płacąc dużo pieniędzy?
Salesforce ma wersję dla programistów, z której możesz korzystać bezpłatnie!
Znajdziesz ją tu: https://developer.salesforce.com/signup
Jest także platforma Trailhead (https://trailhead.salesforce.com), gdzie możesz uczyć się od zera, aż do poziomu architekta – za darmo! Ta platforma edukacyjna jest mocno „zgamifikowana”, a poza tym uczysz się na przykładach z życia w ramach łatwych do przyswojenia, 15-20 minutowych sesji.
Pamiętaj, że zawsze możesz użyć wyszukiwarki – na wyciągnięcie ręki dostępnych jest wiele wysokiej jakości materiałów szkoleniowych!
To jak, jesteś gotów wytyczać nowe szlaki?
Witamy w świecie Salesforce!
Chcesz dowiedzieć się więcej o Apeksie i pracy Salesforce Developera w Cloudity? Skontaktuj się z nami.
Artykuł napisany przez Jakuba Kalke