GUI to interfejs graficzny, czyli okienka i guziki przyjazne dla człowieka, ale bardzo niewygodne dla komputera
CLI to interfejs tekstowy, gdzie człowiek może napisać szybko jakąś komende i program to zinterpretuje, tak średnio wygodne dla komputera ale jeszcze akceptowalne
API to "interfejs programistyczny", czyli dedykowany interfejs do komunikacji między programami (można niby symulować zachowania użytkownika i skorzystać z gui lub cli, ale często się nie da, a jak już się da to wydajność leży)
Można to zrobić na wiele różnych sposobów, masz np api do korzystania z właściwości systemu operacyjnego (żeby móc wyświetlić coś albo pobrać dane, np obecny czas), masz api do komunikacji z sprzętem (np z kartą graficzną)... i masz też api sieciowe, które jest oparte o odbieranie i wysyłanie danych po sieci
Jeśli chcesz mieć aplikacje która komunikuje się z jakąś aplikacją po sieci, to ta docelowa musi wystawiać API sieciowe... żeby się dało z nią połączyć i jej używać (według tego na co pozwala to api)
Zazwyczaj używa się protokołu HTTP bo jest przyjazny i popularny, ale można to zrobić na mnóstwo innych sposobów, możesz poczytać o SOAP, RPC, gRPC (soap jest już przestarzały)
REST to jest zbiór zasad jak powinno się tworzyć api z wykorzystaniem protokołu HTTP, żeby prawidłowo wykorzystać jego potencjał... zazwyczaj nie korzysta się z wszystkich zaleceń REST bo nie pasują do każdego przypadku, ale warto się z nimi zapoznać
A zastosowanie może być różne, np komunikacja między serwerami, albo klient-serwer
Tutaj już jest mnóstwo teorii kiedy warto czego używać i w jaki sposób, możesz poczytać o hasłach takich jak komunikacja klient-serwer, mikroserwisy, websockety, gRPC, webapi... nie zaszkodzi ci też poczytanie o tcp/ip i iso/osi... wszystkie te tematy są tak rozbudowane, że pewnie do każdego z nich da się znaleźć kilka grubych książek, ale warto przynajmniej kojarzyć co jest czym