# Python 13 (API)

# Python 13 (API)
Photo by Majid Gheidarlou / Unsplash
  1. Wizualne rozpisanie elementów, z których składa się pełny adres internetowy.
  • Protokół (np. http, https): wskazuje, w jaki sposób przeglądarka ma komunikować się z serwerem. https - wysyłanie kanałem szyfrowanym. http - protokół tekstowy, brak szyfrowania.
  • Opcjonalna subdomena: To dodatkowy fragment adresu, który pozwala „podzielić” stronę na różne sekcje lub lokalizacje, subdomena przekierowuje użytkownika np. blog.domena.com.
  • Nazwa strony (domena główna)
    Najważniejsza część adresu, np. nazwa w nazwa.com.
  • Top-level domain (TLD)
    Rozszerzenie domeny, np. .com, .pl, .org.
  • Ścieżka do dokumentu: występuje po podstawowym adresie, pokazuje miejsce na serwerze, gdzie znajduje się zasób, np. /ścieżka_do_dokumentu.
  • Parametry (query string)
    Dodatkowe informacje przekazywane serwerowi w formie par klucz=wartość. Dodatkowe parametry wpisujemy po znaku '?'.

Parametry: ?string=thinkpad&seria-procesora=AMD%20Ryzen%207

& - pełni rolę separatora parametrów.

  1. Adres IP
  • adres "nazwowy" wewnętrznie zamieniany jest nad adres "liczbowy" IP (np. 15.122.10.14) z pomocą DNS

Adres IP w klasycznym zapisie IPv4 składa się z czterech liczb oddzielonych kropkami, np. 192.168.0.1. Każda z tych liczb nazywana jest oktetem.

Każdy oktet reprezentuje 8 bitów (czyli 1 bajt).

  • 8 bitów może przyjąć 2⁸ = 256 różnych wartości.
  • Te wartości mieszczą się w zakresie od 0 do 255.
  • 11111111 w zapisie binarnym = 255 w zapisie dziesiętnym
  • Dlatego każdy z czterech segmentów adresu IPv4 ma maksymalną wartość 255.
  • Adres IPv4 ma 32 bity → czyli 2³² = 4 294 967 296 możliwych kombinacji.

Publicznych adresów IP dla protokołu w wersji 4 zabrakło już dawno temu. Sytuację uratował NAT – umożliwił używanie adresów prywatnych w sieciach lokalnych. NAT (Network Address Translation) to mechanizm stosowany w routerach, który:

  • pozwala wielu urządzeniom w sieci lokalnej korzystać z jednego publicznego adresu IP,
  • tłumaczy prywatne adresy lokalne na adres publiczny widoczny w Internecie.
  • DNS wchodzi do gry:Twój komputer pyta serwer DNS: „Jaki adres IP ma www.allegro.pl?”DNS zwraca np. 91.194.188.132.
  • NAT przejmuje stery:Twój komputer z adresem prywatnym (np. 192.168.0.10) chce połączyć się z tym IP.Router zmienia 192.168.0.10 na swój publiczny adres (np. 83.22.45.101) i wysyła pakiet w świat.
  • Odpowiedź wraca:Strona odpowiada na adres 83.22.45.101 (publiczny adres routera).NAT w routerze sprawdza tabelę translacji i wie, że trzeba to odesłać do komputera 192.168.0.10.
  1. Porty
  • example.com → to nazwa domenowa (odpowiada adresowi IP serwera).
  • :8080 → to numer portu.

Port jest wirtualnym „numerem drzwi” na serwerze, przez które aplikacje komunikują się ze światem.
Adres IP wskazuje maszynę, a port wskazuje konkretną usługę/aplikację działającą na tej maszynie.

HTTP (HyperText Transfer Protocol) – warstwa aplikacji

  • Służy do przesyłania stron WWW i innych zasobów w Internecie.
  • Działa w oparciu o TCP, dzięki czemu masz pewność, że dane dotrą w całości.
  • Jego szyfrowana wersja to HTTPS.

IP (Internet Protocol) – warstwa sieciowa

  • Odpowiada za adresację i dostarczanie pakietów w sieci.
  • Dzieli dane na mniejsze części (pakiety), dodaje do nich adres nadawcy i odbiorcy.
  • Nie gwarantuje, że pakiety dotrą w odpowiedniej kolejności ani że dotrą w ogóle.

TCP (Transmission Control Protocol) – warstwa transportowa

  • Zapewnia pewne dostarczenie danych (z weryfikacją dostarczenia).
  • Dba o kolejność pakietów, ponowne wysłanie zagubionych fragmentów i potwierdzenia odbioru.
  • Używany np. w przeglądarce (HTTP/HTTPS), poczcie e-mail, przesyłaniu plików.

UDP (User Datagram Protocol) – warstwa transportowa

  • Jest szybszy, ale niepewny – wysyła dane bez potwierdzeń.
  • Idealny do transmisji, gdzie liczy się czas, a drobne straty nie przeszkadzają (np. wideo, gry online, rozmowy VoIP).

HTTP

  • to protokół odpowiedzialny za przesyłanie zasobów takich jak dokumenty HTML
  • działa na zasadzie żądanie → odpowiedź (co od razu sugeruje model klient - serwer)
  • komunikaty http mogą być odczytane przez człowieka, nie wymagają jakiegoś specjalnego dekodowania (stąd też zabezpiecza się je poprzez stosowanie https)
  • protokół ten nie przechowuje stanu (każde zapytanie jest niezależne)… ale obchodzi się to np. z pomocą ciasteczek
  • metody tego protokołu z których korzystamy na zajęciach to GET, POST, DELETE

API to skrót od Application Programming Interface (interfejs programistyczny aplikacji): API to zestaw reguł i narzędzi, który pozwala jednej aplikacji „rozmawiać” z inną.

  • Web API (najczęstsze) – np. REST, GraphQL, SOAP – służą do komunikacji przez Internet.
REST API: korzysta z protokołu HTTP, czyli komunikacja jest bezstanowa.

To zestaw wytycznych jak konstruować API w pewien określony sposób. Zawiera opis funkcji jakie API powinna realizować (GET, PUT, DELETE...) i sposób realizacji (np. brak przechowywania stanu pomiędzy zapytaniami, zapytania o ten sam zasób powinny wyglądać tak samo).

REST nie jest standardem / protokołem – to zestaw „luźnych” wytycznych np. nie ustala w jakim formacie będą dostarczane dane, może to być JSON, XML itd. (chociaż najczęściej spotyka się JSON-a).

Jeśli szukacie czegoś „sztywniejszego” należy sięgnąć po alternatywy np. SOAP (tam np. mamy sprecyzowane, że dane mają być wymieniane poprzez XML). Jednak ta elastyczność REST-a jest jednym z fundamentów sukcesu tego podejścia.

Jak odpytujemy RESTowe API?

To proste – wysyłamy komunikat np. typu GET na odpowiedni adres, możemy to zrobić nawet bezpośrednio w przeglądarce:

https://api.frankfurter.app/latest

Co oznacza, że w opisie danego API musimy znaleźć te adresy na które wysyłamy zapytania. Powyższa „końcówka” adresowa zwraca nam aktualne kursy popularnych walut dostarczone przez frankfurter.app.

Co jeśli chcemy uzyskać jakieś bardzo sprecyzowane wyniki?

Serwisy dają nam zazwyczaj jedną z 2 możliwości:

  1. Inny adres dający nam te sprecyzowane dane
  2. Parametry, które dodajemy do adresu lub w treści zapytania:

https://api.frankfurter.app/latest?amount=10&from=PLN&to=EUR

Przypomnijcie sobie te wszystkie „dziwne” adresy jakie pojawiają się w Waszych przeglądarkach ;) . Powyższe zapytanie zwróci nam następujący komunikat:

Ciało odpowiedzi

{
  "amount": 10.0,
  "base": "PLN",
  "date": "2024-09-13",
  "rates": {
    "EUR": 2.3311
  }
}

Hoppscotch • Open source API development ecosystem
Helps you create requests faster, saving precious time on development.