GraphQL czy REST? Oba rozwiązania służą do komunikacji z interfejsem programowania aplikacji (API), ale inaczej udostępniają dane. REST to styl projektowania API, w którym poszczególne zasoby mają własne, stałe punkty końcowe zwracające dane w określonej strukturze. GraphQL to język zapytań i sposób budowy API, który zwykle udostępnia jeden punkt końcowy. Klient może w jednym zapytaniu wskazać dokładnie te dane, których potrzebuje.
Wybór między REST a GraphQL wpływa na działanie Twojej witryny: ilość danych przesyłanych między systemami, liczbę żądań potrzebnych do wyświetlenia strony i sposób rozwijania integracji w kolejnych latach. W październiku 2024 roku Shopify wybrało interfejsy oparte na GraphQL jako domyślny sposób korzystania z API. W ciągu roku poprzedzającego tę decyzję podwoiło limity zapytań GraphQL i obniżyło o 75% koszt zapytań korzystających z połączeń między obiektami.
W tym przewodniku poznasz różnice między GraphQL a REST oraz zastosowania, w których każde z tych rozwiązań sprawdza się najlepiej. Znajdziesz też kryteria, które pomogą zespołom odpowiedzialnym za e-commerce w dużych firmach wybrać odpowiedni interfejs.
REST – tradycyjne podejście
API dla handlu internetowego umożliwia wymianę danych między systemami. Klient, czyli aplikacja korzystająca z API, wysyła żądanie do punktu końcowego na serwerze. Serwer przetwarza je i odsyła odpowiednie dane.
REST to skrót od Representational State Transfer. Interfejsy zaprojektowane zgodnie z tym stylem określa się jako REST API lub RESTful API. Upowszechniły się na początku XXI wieku i stały się standardem w usługach sieciowych. Do komunikacji i przesyłania danych wykorzystują standardowe metody HTTP, takie jak GET, POST, PUT i DELETE.
REST ma kilka istotnych zalet, które wyjaśniają jego niesłabnącą popularność:
- przewidywalne punkty końcowe: każdy zasób ma własny adres URL. Na przykład /products/123 zawsze wskazuje ten sam zasób.
- obsługa przez wiele narzędzi: REST jest obsługiwany przez popularne języki programowania, bramki API i narzędzia do monitorowania.
- standardowe kody statusu HTTP: kody takie jak 404 czy 429 informują klienta o wyniku żądania bez konieczności analizowania treści odpowiedzi.
- natywne buforowanie HTTP: żądania GET korzystają ze stałych adresów URL, dzięki czemu przeglądarki, sieci dostarczania treści (CDN) i serwery proxy mogą przechowywać odpowiedzi w pamięci podręcznej bez dodatkowych mechanizmów aplikacji.
REST nadal dobrze sprawdza się przy prostych operacjach na zasobach, obsłudze webhooków, przesyłaniu plików i udostępnianiu publicznych danych tylko do odczytu. Jest też przydatny w integracjach, w których wymagają go narzędzia partnera. Według raportu Postmana „State of the API” z 2025 roku z REST wciąż korzysta 93% zespołów.
Ograniczenia REST ujawniają się szczególnie wtedy, gdy kluczowe znaczenie ma wydajność. Punkty końcowe zwracają z góry określony zestaw danych, co może prowadzić do dwóch powiązanych problemów:
- pobieranie nadmiarowych danych: punkt końcowy może zwrócić cały rekord produktu, choć klient potrzebuje wyłącznie informacji o stanie magazynowym.
- pobieranie zbyt małej ilości danych: odpowiedź punktu końcowego może nie zawierać wszystkich potrzebnych informacji. Aby przygotować jeden widok, klient musi wtedy wysłać żądania do kilku punktów końcowych.
Na jednej stronie oba problemy mogą występować jednocześnie: część odpowiedzi zawiera zbędne dane, a innych potrzebnych informacji w nich brakuje.
Wraz z rozwojem aplikacji mobilnych i rozwiązań chmurowych w pierwszej dekadzie XXI wieku oraz na początku kolejnej te ograniczenia zaczęły być coraz bardziej odczuwalne. Jedna z firm, która musiała pilnie przyspieszyć działanie swojego serwisu, postanowiła więc opracować inne rozwiązanie.
GraphQL – bardziej wydajna alternatywa
Facebook rozpoczął prace nad GraphQL w 2012 roku, gdy przebudowywał swoje natywne aplikacje mobilne. W 2015 roku udostępnił go jako otwarte oprogramowanie. Od 2018 roku nad rozwojem specyfikacji czuwa GraphQL Foundation, działająca pod egidą Linux Foundation. Z GraphQL korzystają dziś największe platformy internetowe na świecie.
Dzięki językowi zapytań GraphQL ogranicza pobieranie zbędnych danych i konieczność wysyłania dodatkowych żądań po brakujące informacje. Klient wskazuje potrzebne pola, a serwer zwraca dane zgodne z tym wyborem, bez pozostałych pól zasobu.
Jak działa schemat GraphQL?
Podstawą API GraphQL jest schemat. Określa on wszystkie typy występujące w systemie, na przykład Product, Variant, Order i Customer, oraz dostępne dla nich pola. Opisuje również relacje między typami. Dzięki temu jedno zapytanie może pobrać zamówienie, jego pozycje i powiązane produkty, bez wysyłania osobnych żądań dla każdego z tych elementów.
GraphQL definiuje trzy typy operacji:
- zapytania (queries) odczytują dane.
- mutacje (mutations) tworzą, aktualizują lub usuwają dane.
- subskrypcje (subscriptions) wysyłają aktualizacje do klienta, gdy dane się zmieniają.
Ponieważ schemat ściśle określa typy danych, serwer GraphQL sprawdza poprawność każdego żądania przed jego wykonaniem. Odrzuca między innymi zapytania odwołujące się do nieistniejących pól.
Schemat umożliwia też introspekcję, czyli odczytanie informacji o strukturze samego API. Dzięki temu narzędzia takie jak GraphiQL mogą podpowiadać pola podczas pisania zapytań, a zintegrowane środowiska programistyczne (IDE) wykrywają błędy jeszcze przed uruchomieniem zapytania.
Oto przykład zapytania, które można wykorzystać w sklepie internetowym. Pobiera tytuł produktu, jego główne zdjęcie oraz pierwsze dwa warianty wraz z ceną, walutą i informacją o dostępności w sprzedaży:
{ product(handle: "trail-runner") { title featuredImage { url } variants(first: 2) { nodes { title price { amount currencyCode } availableForSale } } } }
Struktura odpowiedzi odpowiada strukturze zapytania. Pola, których klient nie wskazał, na przykład opisy, tagi czy metadane SEO, nie są przesyłane z serwera. W REST klient otrzymuje odpowiedź punktu końcowego produktu w ustalonej strukturze. Jeśli brakuje w niej potrzebnych danych, takich jak metapola, musi wykonać dodatkowe wywołania.
GraphQL zyskał popularność, ponieważ dziś wiele firm mierzy się z tym samym wyzwaniem, przed którym wcześniej stanął Facebook. Potrzebują złożonych aplikacji, które przetwarzają duże ilości danych, a przy tym działają szybko i stabilnie. Z tym zadaniem mierzą się zarówno małe sklepy internetowe, jak i największe marki.
6 zalet GraphQL dla dużych e-commerce’ów
Różnice między GraphQL a REST mogą wydawać się niewielkie, ale API stanowi fundament działania sklepu internetowego. Podobnie jak fundament domu, architektura API wpływa na stabilność całego systemu. Właściwy wybór może ułatwić jego rozwój i utrzymanie przez lata, a nietrafiony powodować coraz większe trudności przy rozbudowie. Konsekwencje tego wyboru szczególnie wyraźnie widać w e-commerce prowadzonym na dużą skalę.
Poniżej znajduje się podsumowanie głównych różnic:
|
REST |
GraphQL |
|
|---|---|---|
|
Model żądań |
Wiele punktów końcowych, po jednym na zasób |
Jeden punkt końcowy, jeden język zapytań |
|
Pobieranie danych |
Serwer określa strukturę odpowiedzi; klient często otrzymuje nadmiarowe dane lub musi dodatkowo pobrać brakujące informacje |
Klient wskazuje potrzebne pola; jedno zapytanie może pobrać wiele zasobów wraz z powiązanymi danymi |
|
Buforowanie |
Natywne buforowanie HTTP dla żądań GET na podstawie adresu URL |
Zwykle wymaga buforowania po stronie klienta lub aplikacji, ponieważ różne zapytania trafiają pod ten sam adres URL |
|
Obsługa błędów |
Kody statusu HTTP sygnalizują sukces lub niepowodzenie |
Przy częściowym niepowodzeniu może zwrócić HTTP 200 z tablicą błędów; klient musi sprawdzić treść odpowiedzi |
|
Ewolucja API |
Wersjonowane punkty końcowe (/v1/, /v2/); zmiany niezgodne z dotychczasowymi klientami wymagają nowej wersji |
Dodawanie pól i oznaczanie ich jako wycofywanych w istniejącym schemacie; klient otrzymuje tylko wskazane pola |
|
Najlepsze zastosowania |
Proste operacje na zasobach, webhooki, dane publiczne i integracje z partnerami wymagającymi REST |
Złożone modele danych, różne aplikacje klienckie (internetowe, mobilne, POS, agenci), indywidualnie projektowane sklepy i wieloletnie integracje |
Elastyczność GraphQL wiąże się jednak z dodatkowymi wymaganiami. To klient określa zapytanie, dlatego jedno źle skonstruowane zapytanie może obciążyć system znacznie bardziej niż pojedyncze wywołanie REST. Więcej pracy wykonuje też serwer. Potrzebuje mechanizmów ustalających wartości pól, czyli resolverów, oraz zabezpieczeń przed zagnieżdżonymi zapytaniami, które powodują liczne odczyty z bazy danych.
W dużych firmach wdrożenie GraphQL wymaga jasno określonych zasad projektowania schematu i wykonywania zapytań. Należy ustalić limity kosztu oraz głębokości zapytań, a także ustalić, które zespoły odpowiadają za poszczególne części schematu. Uwzględnij te zasady w wymaganiach technicznych projektu już na początku projektu.
Poniższe sekcje pokazują, dlaczego GraphQL dobrze sprawdza się tam, gdzie trzeba obsłużyć różne aplikacje klienckie, powiązane modele danych i wiele źródeł informacji, a sprawne działanie sklepu ma kluczowe znaczenie.
1. Obsługa złożonych danych
W dużych sklepach internetowych dane są ze sobą ściśle powiązane. Te relacje można przedstawić jako graf. Produkt ma warianty, a każdy z nich może mieć zapasy w kilku lokalizacjach. Zamówienie jest powiązane z klientem, rabatami i realizacją. Konto B2B ma własne cenniki i warunki płatności. W REST te rozbudowane struktury są udostępniane przez punkty końcowe przypisane do poszczególnych zasobów. Im bardziej złożony model danych, tym więcej wywołań API potrzeba do przygotowania jednego widoku. Im więcej powiązanych danych trzeba pobrać, tym większe mogą być opóźnienia.
GraphQL powstał właśnie z myślą o takich danych. Schemat bezpośrednio opisuje relacje, dzięki czemu jedno zapytanie może zwrócić zestaw informacji potrzebny do wyświetlenia danego widoku. Z tego powodu GraphQL jest ważnym elementem ujednoliconego modelu danych Shopify.
Tecovas, marka oferująca odzież w stylu westernowym, potrzebowała systemu, który poza podstawowymi funkcjami zapewniałby rozbudowane API. „Szukam systemów, które rozwiązują za mnie podstawowe problemy, a jednocześnie dają możliwość rozbudowy, solidny zestaw API i elastyczność potrzebną do dostosowania ich do naszych procesów biznesowych”, mówi Kevin Harwood, dyrektor ds. technologii w Tecovas.
Tecovas wykorzystuje Shopify POS do zarządzania stanami magazynowymi w ramach jednego zintegrowanego systemu. Gdy klient pyta o konkretny produkt, pracownicy mogą od razu sprawdzić aktualny stan magazynowy. Indywidualnie zaprojektowany sklep marki działa na Shopify Hydrogen i pobiera dane produktów, kolekcji oraz koszyka przez GraphQL Storefront API.
2. Mniejszy transfer danych
Punkty końcowe REST zwracają ustalony zestaw danych, który może być większy, niż potrzebuje klient. Takie pobieranie nadmiarowych informacji niepotrzebnie zużywa zasoby i może powodować opóźnienia.
W e-commerce prowadzonym na dużą skalę liczą się nawet milisekundy. Wydłużenie czasu reakcji sklepu na interakcje o każde 32 milisekundy wiąże się zwykle ze spadkiem konwersji o około 1,5%.
GraphQL pobiera tylko pola wskazane przez klienta. Ograniczenie przesyłania zbędnych danych zmniejsza obciążenie łącza i może poprawić wydajność systemów korzystających z tego API.
3. Mniej żądań do serwera
Punkty końcowe REST nie pozwalają tak precyzyjnie wybierać pojedynczych danych, dlatego przygotowanie jednego widoku może wymagać kilku żądań uzupełniających brakujące informacje. Każde z nich oznacza kolejną wymianę danych z serwerem: wysłanie żądania i odebranie odpowiedzi.
Dobrym przykładem jest strona produktu. W REST Admin API Shopify odpowiedź dotycząca produktu ma z góry ustaloną strukturę, a powiązane informacje, takie jak metapola, trzeba pobrać osobno. Przygotowanie pełnego widoku produktu może więc wymagać kilku wywołań punktów końcowych. Każde z nich może dodatkowo zwracać pola, których strona w ogóle nie wykorzystuje. W GraphQL ten sam widok można obsłużyć jednym zapytaniem zawierającym wyłącznie potrzebne pola.
A teraz pomyśl o synchronizacji obszernego katalogu produktów, integracji z systemem planowania zasobów przedsiębiorstwa (ERP) czy aplikacji punktu sprzedaży (POS), która na bieżąco sprawdza stany magazynowe. Przy takich zastosowaniach różnica staje się wymierna. Mniej żądań oznacza szybsze ładowanie i sprawniejsze korzystanie z aplikacji.
4. Wygodniejsza praca programistów
REST jest dobrze znany wielu programistom, ponieważ stosuje się go od ponad dwóch dekad. Opanowanie GraphQL wymaga początkowo więcej czasu, ale wysiłek ten wynagradzają przydatne narzędzia. Jego schemat ściśle określa typy danych i stanowi zarazem dokumentację API. Programista może poznawać nieznany interfejs, korzystać z podpowiedzi podczas pisania zapytań i wykrywać błędy przed ich uruchomieniem. Ścisłe typowanie pomaga też utrzymać spójność danych w miarę rozwoju systemu.
Zespoły w dużych firmach powinny jednak uwzględnić w planach kilka kwestii:
- obsługa błędów: GraphQL może zwrócić HTTP 200 także wtedy, gdy część zapytania się nie powiedzie. Szczegóły trafiają wówczas do tablicy errors. Dokumentacja GraphQL Admin API Shopify wyraźnie opisuje tę różnicę. Klient musi sprawdzać treść odpowiedzi, zamiast polegać wyłącznie na kodzie statusu.
- złożoność serwera: wartości pól są ustalane przez resolvery, ale nie dla każdego pola trzeba pisać osobną funkcję. Nieprzemyślana implementacja może wykonywać osobne zapytanie do bazy danych dla każdego elementu listy. To tak zwany problem „N+1”. Rozwiązaniem jest grupowanie zapytań i buforowanie wyników, ale te mechanizmy trzeba najpierw wdrożyć.
- zasady zarządzania API: klienci tworzą własne zapytania, dlatego właściciel API musi udostępnić limity ich kosztu lub głębokości. Zmiany schematu wymagają też przeglądu przez odpowiednie zespoły. Na przykład Admin API Shopify ustala limity na podstawie obliczonego kosztu zapytania, a nie samej liczby żądań.
5. Łatwiejszy rozwój API
API zmienia się wraz z potrzebami systemu. W REST zmiana struktury odpowiedzi, która narusza zgodność wsteczną z istniejącymi aplikacjami klienckimi, oznacza zwykle nową wersję, na przykład /v2/, i okres na migrację każdej aplikacji klienckiej.
GraphQL zaprojektowano tak, aby schemat mógł się rozwijać bez nadawania kolejnych numerów wersji. Nowe pola można dodawać w dowolnym momencie. Nie wpływa to na istniejących klientów, ponieważ otrzymują tylko dane wskazane w swoich zapytaniach. Starsze pola można oznaczyć dyrektywą wycofania: nadal zwracają dane, ale narzędzia programistyczne ostrzegają przed ich używaniem. Jeśli pole zostanie usunięte, odwołujące się do niego zapytanie nie przejdzie walidacji i nie zostanie wykonane.
Nie oznacza to, że GraphQL całkowicie eliminuje zmiany naruszające zgodność. Właśnie dlatego Shopify nadal publikuje wersje swoich API co kwartał. GraphQL pozwala jednak uniknąć tworzenia nowej wersji całego API za każdym razem, gdy zmienia się pojedyncze pole.
6. Większa wydajność
Jak te korzyści przekładają się na rzeczywiste działanie sklepów? Analiza niemal 200 000 publicznie dostępnych punktów danych wykazała, że strony sklepów Shopify są renderowane nawet 2,4 raza szybciej niż strony sklepów na innych platformach. Średnia przewaga wynosi 1,8 raza.
GraphQL jest jednym z czynników wpływających na szybkość Shopify, ale sam nie wyjaśnia całej tej przewagi. Znaczenie mają również globalny hosting, dostarczanie treści przez CDN, pamięć podręczna przeglądarki, kompresja i optymalizacja obrazów. GraphQL zmniejsza ilość przesyłanych danych i liczbę żądań potrzebnych stronie. Od samej platformy zależy natomiast szybkość dostarczenia jej pozostałych elementów.
Shopify i GraphQL
Shopify zaczęło korzystać z GraphQL po jego publicznym udostępnieniu przez Facebooka. Sprawdzonych praktyk było wtedy niewiele. Shopify należało do pionierów wdrażania GraphQL i poznawało to rozwiązanie od podstaw. Od tamtej pory GraphQL zyskał na popularności i stał się jeszcze ważniejszą częścią infrastruktury Shopify. Korzystają na tym sklepy działające na platformie.
W październiku 2024 roku Shopify ogłosiło, że interfejsy oparte na GraphQL staną się domyślnym sposobem korzystania z jego API. Od 1 kwietnia 2025 roku wszystkie nowe aplikacje zgłaszane do Shopify App Store muszą korzystać z GraphQL. REST Admin API ma status starszego interfejsu (legacy), choć nadal działa. Nowe funkcje platformy trafiają najpierw do GraphQL, a niektóre, takie jak obsługa 2000 wariantów produktu i metaobiektów, są dostępne wyłącznie przez ten interfejs.
Storefront API korzysta z GraphQL, a Admin API jest dostępne za jego pośrednictwem. Narzędzia takie jak Shopify Functions, rozszerzenia interfejsu użytkownika i App Bridge wykorzystują GraphQL jako główny interfejs API.
Równoległe korzystanie z obu API podczas migracji
Modernizacja platformy nie wymaga jednoczesnego przenoszenia wszystkich integracji. REST i GraphQL mogą przez pewien czas działać równolegle. Takie podejście zastosowała marka Skullcandy.
Skullcandy przeszło na Shopify w 90 dni. Firma zastąpiła własny, pięcioetapowy proces finalizacji zakupu rozwiązaniem Shopify Checkout i zrezygnowała z oddzielnego systemu zarządzania informacjami o produktach (PIM). Zamówienia przetwarza za pomocą REST API i webhooków. Z kolei zbiorcze aktualizacje stanów magazynowych wykonuje przez GraphQL API: zamiast zmieniać rekordy pojedynczo, aktualizuje setki z nich w jednym wywołaniu. Nowe aplikacje również korzystają z tych samych interfejsów REST i GraphQL.
Efekty przejścia Skullcandy na Shopify były widoczne od razu. Już dzień po uruchomieniu sklepu czas ładowania strony głównej skrócił się z 2,8 do 0,8 sekundy. W pierwszym pełnym sezonie świątecznym na Shopify przychody marki wzrosły o 45% rok do roku. Podczas największej premiery produktu liczba wizyt wzrosła o 200%, a sklep działał bez problemów z wydajnością.
Kiedy używać GraphQL, a kiedy REST?
Zarówno REST, jak i GraphQL są wykorzystywane w działających systemach Shopify. Wybór między nimi powinien wynikać z konkretnych zadań i wymagań danej integracji.
Wybierz GraphQL, gdy potrzebujesz obsłużyć:
- złożone modele danych: produkty z wieloma wariantami, zapasy w kilku lokalizacjach, cenniki B2B lub metaobiekty, których dane trzeba pobierać razem
- różne aplikacje klienckie: aplikacje internetowe, mobilne, systemy POS i agenci AI, z których każdy potrzebuje innego zestawu tych samych danych
- indywidualnie projektowane sklepy: rozwiązania headless oparte na Hydrogen lub innym frameworku, w których ograniczenie liczby żądań ma kluczowe znaczenie dla szybkości strony
- wieloletnie integracje: połączenia z ERP, systemami zarządzania zamówieniami (OMS) i PIM, które muszą rozwijać się przez lata bez zakłóceń w działaniu
REST wciąż się sprawdza, gdy:
- operacja to prosty odczyt lub zapis pojedynczego zasobu
- narzędzia partnera wymagają REST albo istniejąca integracja działa już stabilnie
- w grę wchodzą webhooki lub przesyłanie plików
Podczas migracji możesz korzystać z obu rozwiązań. Zachowaj działające integracje REST, a nowe twórz w GraphQL. W pierwszej kolejności przenoś integracje obsługujące największy ruch lub najbardziej złożone procesy. W ich przypadku korzyści mogą być największe. Uwzględnij tę kolejność w szerszym planie transformacji IT, zamiast traktować migrację jako jednorazowe przepisanie kodu.
W e-commerce dużych firm korzystających z Shopify GraphQL w określonych zastosowaniach będzie lepszym wyborem. To właśnie w tym API pojawiają się nowe funkcje i wokół niego powstają narzędzia Shopify.
FAQ: GraphQL czy REST
Czy GraphQL jest lepszy niż REST?
GraphQL sprawdza się lepiej w e-commerce dużych firm, gdy trzeba obsłużyć rozbudowane dane produktów i zamówień oraz wiele rodzajów aplikacji klienckich. Pozwala ograniczyć ilość przesyłanych danych i liczbę wymian między klientem a serwerem. REST nadal jest dobrym wyborem przy prostych operacjach na zasobach, webhookach i integracjach wymaganych przez narzędzia partnera. Shopify korzysta z obu rozwiązań, przy czym GraphQL jest jego domyślnym API.
Dlaczego GraphQL jest mniej popularny niż REST?
GraphQL jest szeroko stosowany, ale REST ma około dwóch dekad przewagi, bogatszy zestaw narzędzi i jest lepiej znany programistom. GraphQL wymaga też większego nakładu pracy po stronie właściciela API na początku: zaprojektowania schematu, przygotowania resolverów i ustalenia limitów zapytań. Przy prostych potrzebach dotyczących danych zespół może uznać, że ten dodatkowy wysiłek nie przyniesie wystarczających korzyści.
Czy GraphQL nadal ma znaczenie w 2027 roku?
Tak. Według raportu Postmana „State of the API” z 2025 roku jedna trzecia zespołów korzysta z GraphQL równolegle z REST. Shopify wybrało interfejsy oparte na GraphQL jako domyślny sposób korzystania z API w październiku 2024 roku i właśnie tam wprowadza najpierw nowe funkcje platformy. Dla zespołów e-commerce budujących indywidualne sklepy lub złożone integracje GraphQL ma więc większe znaczenie niż w chwili swojego debiutu.
Kiedy zespoły w dużych firmach powinny wybrać GraphQL zamiast REST?
Wybierz GraphQL, gdy rozwiązanie korzysta ze złożonego modelu danych, obsługuje kilka rodzajów aplikacji klienckich lub stanowi podstawę indywidualnie projektowanego sklepu. Sprawdza się też w integracjach, które muszą rozwijać się przez lata bez zakłóceń. Typowe przykłady to zbiorcze aktualizacje stanów magazynowych i sklepy headless. REST pozostaje przydatny przy prostych operacjach na pojedynczym zasobie oraz w integracjach, które już działają stabilnie.
Czy GraphQL zastąpi REST?
Nie całkowicie. REST nadal jest powszechnie stosowany w publicznych interfejsach API i prostych integracjach. REST Admin API Shopify również nadal działa, choć ma status starszego interfejsu (legacy). GraphQL przejmuje zadania, w których najlepiej wykorzystuje swoje zalety: obsługę silnie powiązanych danych i różnych aplikacji klienckich. Oba rozwiązania będą więc współistnieć, a GraphQL będzie obsługiwać coraz więcej nowych zastosowań.

