Odchodząc od tematu frontend/backend, tylko skupiając sie na tym co to w ogóle jest "API"
Application Programming Interface => to takie coś, za pomocą aplikacje mogą się między sobą komunikować w prosty sposób, bez udziwnień
Przykładowo API do komunikacji między komputerem a drukarką/skanerem, żeby te urządzenia mogły wysyłać między sobą informacje
Albo API do komunikacji z kartą graficzną, żeby można było wykonywać na niej obliczenia
API webowe to po prostu takie API, za pomocą którego w prosty sposób aplikacje mogą się komunikować ze sobą po sieci
Przyjęło sie że robi sie to na porcie http/https, wysyła sie zapytania http z zawartością jako json (lub rzadziej - xml)
Ale można pod to podciągnąć nawet wysyłanie suchych kawałków tekstu dowolnym innym portem
Np czasami komunikacja z drukarkami po sieci to wysyłanie suchych instrukcji po TCP, niektóre mają obsługe xml/json
A po co API w komunikacji backend/frontend?
Przeglądarka domyślnie jest odbiorcą api, z którego dane ci wyświetla
Ma wbudowaną obsługe kilku formatów, np html, css, js, xml i chyba json ale nie jestem pewny
(xml -> domyślne formatowanie)
Przykładowo jeśli odbierze html to go wyświetli, jeśli html ma jakieś linki to je pobierze
Jak css to go użyje
Jak js to go wykona bo ma wbudowany interpreter
Pobierając html z serwera nie robisz nic innego, jak łączenie sie za pomocą przeglądarki z API, które zwraca html i kilka innych formatów
Ale tutaj pojawiają sie pewne ograniczenia
Bo nie zawsze chcesz pobierać całego html, czasami chciałbyś pobierać tylko małe kawałki na których byś operował w js (np poszczególne posty, zdjęcia, np chciałbyś doładowywać posty podczas przewijania strony, zamiast pobierania wszystkiego na raz lub bawienia sie w paginacje)
Stąd często pod innymi adresami (endpointami) dorzuca sie możliwość pobierania/wysyłania danych jako jsony -> bo prościej je obsłużyć za pomocą kodu, np js
Tu działa to tak samo jak przy wspomnianej obsłudze API karty graficznej albo drukarki
Jakiś kod pod spodem chciałby sie komunikować z jakimś urządzeniem (w tym przypadku z serwerem, który ma jakieś funkcjonalności)
Ale w sposób który jest prosty do obsłużenia z poziomu kodu
Wyobrażasz sobie jak musiałby wyglądać sposób komunikacji z drukarką, gdyby jej bezpośrednia obsługa była zrobiona tak, żeby była przyjazna dla użytkownika?
Jest to praktycznie niemożliwe do zrobienia
Dlatego robi sie programy, które przerabiają informacje które im podajesz (które zdjęcie, jaki format, jakie kolory, jaka jakość) na paczki danych, które za pomocą API wysyłają w przyjazny sposób z poziomu kodu
Który jest prosty do obsługi zarówno dla komputera i programu, który działa wewnątrz drukarki
Nie mówiąc już o API karty graficznej... gdyby tam miał być sposób komunikacji przyjazny dla człowieka a nie dla programu, to nie byłoby sensu używania kart graficznych