Największą zaletą Azure Functions jest skrócenie czasu, który jest potrzebny do wypuszczenia produktu na rynek. Można je również zastosować w celu przyspieszenia prototypowania aplikacji. Od jakiegoś czasu można zdefiniować mocka naszej funkcji, który w odpowiedzi na wysłane zapytanie pod konkretne API wyśle nam ustaloną odpowiedź.
Rozwiązanie to ma olbrzymi potencjał. W szczególności w przypadku różnego rodzaju prototypowania aplikacji. Wystarczy tylko zdefiniować nasz end point i wskazać jaka odpowiedź ma zostać zwrócona. Dzięki temu możemy budować od razu docelowe powiązania w naszej aplikacji. A w późniejszym etapie pracy po prostu zastąpić definicję mocka poprawnie zaimplementowaną funkcją.
Funkcjonalność ta umożliwia również zoptymalizowanie prac w zespole. Sądzę, że każdemu z nas zdarzyły się sytuacje, gdy jeden z zespołów odpowiedzialny był za front-end, drugi za back-end. Na początku prac zostały ustalone interfejsy, a po ich zakończeniu obie części aplikacji nie potrafiły się ze sobą porozumiewać. Wykorzystując to rozwiązanie możemy zdefiniować konkretne interfejsy i obydwa zespoły będą miały zmaterializowany wzór do którego będą dążyć.
Opisywana funkcjonalność nie jest jeszcze dobrze znana ponieważ nie do końca została udostępniona na Portalu Azure. Aby z niej skorzystać będziemy musieli modyfikować pliki konfiguracyjne manualnie.
Zacznijmy od początku:
- Funkcjonalność ta dostępna jest w ramach tzw. Proxies. Funkcjonalność ta jest domyślnie wyłączona. Musimy więc ją aktywować w ustawieniach aplikacji. Pamiętać należy jeszcze, że cały czas Proxies są jeszcze w statusie Preview:
- Następnie musimy zdefiniować proxy, w którym podajemy szablon adresu URL, pod którym będzie dostępne API oraz możemy zdefiniować metody HTTP, które będą obsługiwane:
W tym momencie kończy nam się możliwość konfiguracji środowiska z wygodnego UI. - Musimy przejść do manualnej edycji pliku, który posiada konfigurację aktualnie zdefiniowanych Proxies. W tym celu przechodzimy do tzw. Platform features naszej aplikacji i wyszukujemy App Service Editor. Tam wybieramy plik json i powinniśmy zobaczyć następującą zawartość:
{ "$schema": "http://json.schemastore.org/proxies", "proxies": { "GetUserMock": { "matchCondition": { "route": "api/users/{userId}", "methods": [ "GET" ] } } } }
Plik ten na razie zawiera to co udało nam się skonfigurować z portalu, ale wystarczy dodać fragment definiujący odpowiedź do definicji GetUserMock:
"responseOverrides": { "response.statusCode": "200", "response.headers.Content-Type" : "application/json", "response.body": { "id": "{userId}", "name": "Michał Jankowski", "site": "www.jankowskimichal.pl", "skills": [ "Serverless", "Azure", "Cloud", "Azure Function" ] } }
W tym momencie nasza funkcja zacznie zwracać definiowaną przez nas odpowiedź w formacie json.
Zwróćcie proszę uwagę, że w odpowiedzi znajduje się takie same id jak w wysłanym zapytaniu.
I na koniec zamieszczam jeszcze pełną konfigurację:
{ "$schema": "http://json.schemastore.org/proxies", "proxies": { "GetUserMock": { "matchCondition": { "route": "api/users/{userId}", "methods": [ "GET" ] }, "responseOverrides": { "response.statusCode": "200", "response.headers.Content-Type" : "application/json", "response.body": { "id": "{userId}", "name": "Michał Jankowski", "site": "www.jankowskimichal.pl", "skills": [ "Serverless", "Azure", "Cloud", "Azure Function" ] } } } } }
Tak się właśnie zastanawiałem do czego te proxy służą. Dzięki za post 🙂
To jest tylko jedna z pomniejszych funkcji. Podstawowym zastosowaniem proxy jest stworzenie fasady na nasze funkcje. I tak wywołania, które zostaną otrzymane na zdefiniowane adresy proxy trafią do konkretnych funkcji na podstawie konfiguracji routingu.