API, czyli Interfejs Programowania Aplikacji, stanowi kluczowy element współczesnych systemów informatycznych. Działa niczym pośrednik, umożliwiając różnym aplikacjom komunikację i wymianę danych. Jest to swoista brama, poprzez którą aplikacje uzyskują dostęp do wybranych zasobów innych aplikacji.
Jedną z głównych zalet korzystania z API jest kontrola dostępu. Aplikacje zewnętrzne nie mają swobodnego dostępu do wszystkich danych, lecz jedynie do tych, które zostały udostępnione poprzez interfejs API. Daje to deweloperom precyzyjną kontrolę nad tym, które informacje są dostępne i w jaki sposób.
W interakcji z API wyróżniamy dwie strony: klienta i serwer. Klient to aplikacja lub użytkownik, który żąda danych, natomiast serwer to aplikacja, która te dane udostępnia. Ta prosta zasada leży u podstaw działania każdego API.
Interfejsy API odgrywają zasadniczą rolę w każdej współczesnej architekturze oprogramowania. Osoby ubiegające się o stanowiska w obszarach front-end, back-end, full-stack czy inżynierii sieci, bardzo często spotykają się z pytaniami dotyczącymi interfejsów API podczas rozmów rekrutacyjnych.
Mając to na uwadze, warto zapoznać się z zestawem najczęściej zadawanych pytań, szczególnie dotyczących interfejsów API REST.
Co to jest REST?
REST to wzorzec architektoniczny, który określa zbiór reguł i ograniczeń dotyczących tworzenia interfejsów API. Interfejsy, które są zgodne z zasadami REST, nazywamy interfejsami RESTful. Skrót REST rozwija się jako Representational State Transfer, co w wolnym tłumaczeniu oznacza „przenoszenie reprezentacji stanu”.
REST nie jest protokołem ani standardem, ale raczej zbiorem wytycznych, które można implementować na różne sposoby podczas tworzenia interfejsów API. Zapewnia on twórcom dużą swobodę i elastyczność, co przyczynia się do jego powszechnego stosowania. Kluczowe zasady architektury REST obejmują:
- Rozdzielenie klienta i serwera: W przypadku API RESTful, klient powinien jedynie żądać danych od serwera za pomocą identyfikatora URI (Uniform Resource Identifier). Serwer natomiast nie powinien w żaden sposób modyfikować klienta.
- Bezstanowość: Kolejne żądania nie mają świadomości o poprzednich. Oznacza to, że są one niezależne i nie zachowują stanu. Po przetworzeniu, żądanie jest po prostu zamykane. Każde żądanie jest traktowane jako odrębne i niepowiązane z innymi.
- Architektura warstwowa: Zarówno klient, jak i serwer nie wiedzą, czy komunikują się bezpośrednio z docelowym systemem, czy też przechodzą przez pośredniczące aplikacje. Ich celem jest jedynie poprawne zrealizowanie żądania i uzyskanie odpowiedzi.
- Buforowanie: Zarówno po stronie klienta, jak i serwera, odpowiedzi na zapytania mogą być zapisywane w pamięci podręcznej, co zwiększa wydajność i skalowalność systemu. Jeżeli często wysyłane jest zapytanie o ten sam zasób, odpowiedź może zostać pobrana z pamięci podręcznej, bez konieczności ponownego przetwarzania.
Jakie są główne cechy REST?
Najważniejszymi cechami charakterystycznymi architektury REST są:
- Elastyczność: Możliwość przenoszenia aplikacji między serwerami bez utraty funkcjonalności, ponieważ interfejs API zawsze zwróci tę samą odpowiedź na konkretne żądanie. Dodatkowo, łatwo można dodawać nowe punkty końcowe dla różnych typów danych.
- Skalowalność: Dzięki buforowaniu, odpowiedzi mogą być zapisywane i ponownie wykorzystywane, co obniża obciążenie serwera oraz opóźnienia.
- Autoryzacja: Nagłówek autoryzacji pozwala na przekazywanie serwerowi poświadczeń, potrzebnych do weryfikacji klienta.
- Bezstanowość: Ta kluczowa cecha gwarantuje, że żądania są niezależne od siebie. Po przetworzeniu, żądanie jest zakończone, nie pozostawiając śladu dla kolejnych zapytań.
Czym są zasoby w architekturze REST?
Zasoby stanowią podstawowe elementy składowe architektury REST. Są to obiekty, na których wykonujemy różnorodne operacje, takie jak pobieranie, modyfikacja czy usuwanie.
Na przykład, w sklepie internetowym, produkt, użytkownik lub dane o produkcie są zasobami, które mogą być manipulowane za pomocą API. Zasoby, przy pomocy API, mogą być przesyłane do innych aplikacji.
Wymień zalety i wady interfejsu API REST.
Do zalet interfejsu API REST należą:
- Łatwość implementacji.
- Proste zarządzanie zasobami.
- Wysoka skalowalność dzięki architekturze klient-serwer.
- Obsługa różnych formatów danych, takich jak XML czy JSON.
Wśród wad można wymienić:
- Brak możliwości utrzymania stanu między żądaniami.
- Trudność w ustaleniu rzeczywistego źródła danych, ze względu na architekturę warstwową.
- Mniejsza przydatność w przypadku złożonych zapytań.
Zdefiniuj szablon REST.
Szablon REST to narzędzie ułatwiające dostęp do API REST w środowisku Spring. Pozwala on na ukrycie szczegółów technicznych, związanych z żądaniem zasobów z API REST.
Co oznacza RESTful?
Interfejsy API lub usługi RESTful to te, które w swojej konstrukcji i działaniu respektują zasady architektury REST (Representational State Transfer), wykorzystując protokoły takie jak HTTP.
Czym są usługi internetowe RESTful?
Usługi sieciowe RESTful zostały stworzone z myślą o efektywnym działaniu w Internecie. Wykorzystując architekturę REST (Representational State Transfer) i jej założenia, takie jak spójny interfejs, warstwowość czy bezstanowość, usługi te osiągają wysoką wydajność i skalowalność, idealnie sprawdzając się w środowisku internetowym.
Jak testować usługi internetowe RESTful?
Do testowania usług internetowych RESTful możesz użyć dedykowanych klientów REST, takich jak Postman lub Thunder Client. Wysyłasz za ich pomocą zapytanie do testowanej usługi i analizujesz otrzymaną odpowiedź. Zrozumienie odpowiedzi jest kluczowym etapem testowania API.
W przypadku bardziej złożonych API z wieloma punktami końcowymi, warto podzielić testy na mniejsze części i przeprowadzić testy jednostkowe, integracyjne, wydajnościowe oraz kompleksowe.
Wymień cechy usług internetowych RESTful.
Główne cechy usług internetowych RESTful to:
- Obsługa różnorodnych formatów danych, np. JSON i XML.
- Skalowalność.
- Izolacja klienta i serwera.
- Elastyczność.
Zdefiniuj główne klasy zasobów RESTful.
Główne klasy zasobów to obiekty POJO (Plain Old Java Object), które są oznaczone adnotacją @Path lub mają co najmniej jedną metodę, która ma adnotację @Path lub adnotację metody żądania, np. @GET, @POST, @PUT czy @DELETE.
Co to jest identyfikator URI?
URI, czyli Uniform Resource Identifier, to ciąg znaków służący do identyfikacji lub lokalizacji zasobów w interfejsie API. Identyfikator ten wskazuje nazwę lub położenie zasobu, bez odwoływania się do konkretnej techniki czy metody dostępu.
Czym jest bezstanowość w REST?
Bezstanowość jest kluczowym ograniczeniem w interfejsach API REST. Gwarantuje ona, że każde zapytanie jest traktowane oddzielnie, a jego stan nie jest przechowywany dla kolejnych zapytań. Po przetworzeniu, żądanie zostaje zakończone i nie ma żadnego wpływu na następne.
Co to jest JAX-RS?
JAX-RS to Java API, które ułatwia tworzenie aplikacji wykorzystujących architekturę REST w języku Java. Upraszcza proces tworzenia usług REST w środowisku Java.
Jakie są podstawowe adnotacje w JAX-RS API?
Adnotacje w JAX-RS umożliwiają programistom dekorowanie klas Java, co pozwala na definiowanie zasobów i operacji, które można na nich wykonywać. Przykładowe adnotacje JAX-RS:
- @GET: Służy do obsługi żądań GET w protokole HTTP.
- @POST: Używana do obsługi żądań POST w protokole HTTP.
- @Path: Definiuje względną ścieżkę klasy Java.
- @QueryParam: Używana do określania parametrów zapytania w adresie URI.
Jakie są główne cechy JAX-RS API?
Cechy JAX-RS to:
- Buforowanie po stronie klienta.
- Buforowanie po stronie serwera.
- Możliwość dostosowania ciągu zapytania.
- Adnotacje uruchamiane w czasie wykonania.
Jak skonfigurować aplikacje JAX-RS?
Aplikacja JAX-RS składa się z co najmniej jednej klasy zasobów, spakowanej w plik WAR. Bazowy identyfikator URI, który obsługuje żądania do zasobów aplikacji, można ustawić na dwa sposoby:
- Używając adnotacji @ApplicationPath w podklasie javax.ws.rs.core.Application w pakiecie WAR.
- Używając tagu servlet-mapping w deskryptorze wdrażania web.xml pakietu WAR.
Czym są JAX-WS i JAX-RS?
JAX-WS jest API dla usług sieciowych XML, używanym do tworzenia interfejsów API za pomocą protokołu SOAP (Simple Object Access Protocol) opartego na XML.
Z drugiej strony, JAX-RS to Java API służące do tworzenia usług internetowych, opartych na architekturze REST.
Czym są kody stanu HTTP?
Kody statusu HTTP to sposób komunikowania przez serwer stanu odpowiedzi, którą wysyła do klienta. Kody te są zawarte w nagłówkach odpowiedzi i informują klienta o sukcesie lub niepowodzeniu żądania, a także o potencjalnych problemach z odpowiedzią.
Oto kilka popularnych kodów stanu HTTP:
- 200 – „OK”. Oznacza, że żądanie zostało pomyślnie zrealizowane.
- 404 – „Nie znaleziono”. Informuje, że zasób nie istnieje na serwerze lub dany punkt końcowy jest nieprawidłowy.
- 500 – „Wewnętrzny błąd serwera”. Pojawia się, gdy serwer nie jest w stanie wygenerować poprawnej odpowiedzi lub wystąpił nieobsłużony błąd.
- 503 – „Usługa niedostępna”. Oznacza, że serwer nie jest w stanie przetwarzać żądań, np. z powodu przeciążenia lub planowanej przerwy technicznej.
Czym są metody HTTP?
Metody HTTP służą do wykonywania określonych akcji na zasobach w API. Na przykład, używając metody GET pobieramy listę filmów z API, a metodą POST możemy zaktualizować dane.
Najczęściej używane metody HTTP to:
- GET: Służy do pobierania danych.
- POST: Służy do aktualizacji zasobu przez przesłanie nowych danych do serwera.
- DELETE: Służy do usuwania zasobu.
- PATCH: Służy do częściowej modyfikacji zasobu.
Jak działa podstawowe uwierzytelnianie HTTP?
Uwierzytelnianie to proces weryfikacji autentyczności klienta, który zapewnia bezpieczeństwo danych. W HTTP odbywa się to za pomocą nagłówka autoryzacji, który klient przesyła w żądaniu.
Nagłówek ten zawiera nazwę użytkownika oraz hasło klienta. Serwer sprawdza poprawność tych poświadczeń i na ich podstawie zezwala na dostęp do zasobu.
Podczas korzystania z uwierzytelniania HTTP, istotne jest, aby kanał komunikacji, przez który przesyłane są poświadczenia, był zaszyfrowany i bezpieczny. Zaleca się stosowanie protokołu HTTPS zamiast zwykłego HTTP, aby zapewnić bezpieczeństwo przesyłanych danych.
Jakie są główne elementy żądania HTTP?
Żądanie HTTP składa się z:
- Wiersza żądania: Pierwszy wiersz, który zawiera metodę HTTP, ścieżkę do zasobu (punkt końcowy) oraz numer wersji HTTP.
- Nagłówków: Dostarczają metadane dotyczące żądania.
- Treści (opcjonalna): Jest obecna w niektórych metodach żądań, np. POST, ale nie jest wymagana w przypadku GET. Stanowi właściwą treść komunikatu.
Jakie są główne elementy odpowiedzi HTTP?
Odpowiedź HTTP składa się z:
- Statusu: Zawiera kod statusu HTTP, który informuje o powodzeniu lub niepowodzeniu żądania.
- Nagłówków: Zawierają informacje o odpowiedzi, np. format danych.
- Wiadomości: Rzeczywiste dane przesyłane przez serwer do klienta w odpowiedzi na żądanie.
Jaka jest różnica między REST a AJAX?
AJAX jest klientem, który umożliwia dostęp do API RESTful i wykorzystuje JavaScript do wysyłania asynchronicznych zapytań. Natomiast REST (Representational State Transfer) jest architekturą, która definiuje sposób tworzenia interfejsów API RESTful. W skrócie, AJAX służy do wysyłania żądań HTTP, a REST do projektowania interfejsów API.
Jaka jest różnica między SOAP a REST?
REST (Representational State Transfer) to architektura o minimalnych ograniczeniach w tworzeniu API. SOAP (Simple Object Access Protocol) to protokół, który ma bardziej restrykcyjne wymagania implementacyjne.
REST jest bardziej elastyczny i łatwiejszy w użyciu niż SOAP. W SOAP komunikacja odbywa się wyłącznie za pomocą XML, podczas gdy REST obsługuje wiele formatów, takich jak JSON, XML itd. REST jest szybszy i lżejszy niż SOAP.
Usługi SOAP mają wbudowane funkcje bezpieczeństwa, co stanowi ich zaletę. Jednak dodatkowe funkcje sprawiają, że SOAP jest bardziej skomplikowany i mniej wydajny niż REST.
Jaka jest różnica między PUT a POST?
POST to metoda HTTP, która wysyła dane na serwer. Wykonanie kilku żądań POST na tym samym zasobie może mieć skutki uboczne, np. dodanie kilku takich samych wpisów do bazy danych.
PUT to metoda HTTP, która również wysyła dane na serwer. Jednak, w przeciwieństwie do POST, aktualizuje dane tylko raz. W przypadku wielu żądań PUT na tym samym zasobie nie wystąpią skutki uboczne. PUT, w przypadku gdy zasób nie istnieje, utworzy go, a jeśli istnieje, zaktualizuje.
PUT jest metodą idempotentną, a POST nie.
Co to jest ładunek?
Ładunek w REST API to treść żądania wysyłanego przez klienta do serwera. Są to dane, które chcemy przesłać na serwer w celu uzyskania odpowiedzi.
Jaki jest maksymalny rozmiar ładunku w metodach POST?
Protokół HTTP sam w sobie nie definiuje limitu rozmiaru ładunku. Ograniczenie zależy od konfiguracji klienta i serwera. Wykorzystywany jest najniższy limit spośród tych dwóch.
Jakie są najlepsze praktyki tworzenia identyfikatorów URI?
Najważniejsze aspekty, o których należy pamiętać podczas tworzenia identyfikatorów URI to:
- Unikanie rozszerzeń plików.
- Zachowanie spójności w identyfikatorach URI.
- Podział identyfikatorów URI na domeny i subdomeny dla różnych zbiorów zasobów.
- Używanie myślników lub podkreśleń do oddzielania słów.
- Stosowanie ukośnika w celu wskazania hierarchii zasobów.
- Kodowanie identyfikatora URI przy użyciu odpowiedniego kodowania.
- Dążenie do czytelności identyfikatora URI dla człowieka.
Czym są metody idempotentne?
Idempotentne metody HTTP mają ten sam skutek na serwer, niezależnie od tego, ile razy zostaną wykonane z identycznym żądaniem. Na przykład, wielokrotne wykonanie identycznego żądania DELETE dla określonego zasobu, spowoduje usunięcie tego zasobu, tak jakby żądanie zostało wykonane tylko raz.
Przykłady metod idempotentnych:
- PUT
- DELETE
- GET
- HEAD
- OPTIONS
Co to jest Postman?
Postman to narzędzie programistyczne do tworzenia, modyfikacji i testowania interfejsów API. Oferuje szereg funkcji, które ułatwiają szybkie tworzenie i testowanie API, bez potrzeby konfigurowania klienta.
Nagłówek Cache-Control zawiera instrukcje dotyczące buforowania w przeglądarkach i na serwerach. Określa on, które zasoby mają być buforowane, i przez jaki czas. Informuje przeglądarkę i serwer, w jaki sposób ma być wykorzystana pamięć podręczna.
Nagłówek Cache-Control może zawierać następujące dyrektywy:
- max-age
- no-cache
- private
- public
- no-store
- immutable
Zdefiniuj przesyłanie wiadomości w RESTful Web Services.
Przesyłanie wiadomości w usługach internetowych RESTful to komunikacja między klientem a serwerem. Klient wysyła żądanie HTTP, a serwer odsyła odpowiedź HTTP.
Jaka jest różnica między architekturą monolityczną, SOA i mikrousługową?
W architekturze monolitycznej wszystkie aspekty aplikacji są zarządzane w jednym miejscu: strona klienta, serwer i baza danych. Wszystko jest zgrupowane w pojedynczy blok.
SOA (Service-Oriented Architecture) opiera się na usługach. Różne aspekty aplikacji są obsługiwane przez oddzielne usługi. Jest to więc zbiór wielu modułów serwisowych. Integracja jest kluczowym elementem tej architektury.
Architektura mikroserwisów jest podobna do SOA, ale w przeciwieństwie do niej, ma wiele autonomicznych programów, które komunikują się za pomocą API. Każdy element jest niezależny i samowystarczalny.
Jak działa architektura mikrousług?
W architekturze mikrousług, aplikacja jest podzielona na małe, autonomiczne podjednostki, które działają niezależnie i komunikują się za pomocą API. Zalety tej architektury to: zwinność, elastyczność, skalowalność, niezależność technologii, wielokrotne wykorzystanie usług oraz łatwość wdrażania.
Co to jest CRUD?
CRUD to skrót od Create, Read, Update, Delete. Są to podstawowe operacje, które można wykonywać na zasobach. API, które obsługuje te operacje, jest nazywane API CRUD.
Co to jest buforowanie?
Buforowanie to technika przechowywania odpowiedzi lub żądań, aby móc z nich korzystać w przyszłości, bez konieczności ponownego pobierania danych z sieci.
Odpowiedzi są zazwyczaj buforowane po stronie klienta. Jeżeli klient wielokrotnie wysyła to samo żądanie, odpowiedź może zostać pobrana z pamięci podręcznej, oszczędzając czas i przepustowość.
Do czego służy @RequestMapping?
@RequestMapping to adnotacja w Spring Framework, która służy do mapowania żądań sieciowych na określone klasy lub metody obsługi.
Do czego służy @PathVariable?
Adnotacja @PathVariable w Spring Framework służy do wyodrębniania wartości zmiennych szablonu ze ścieżki URI i przekazywania ich jako parametrów do metody obsługi.
Zdefiniuj HttpMessageConverter.
Konwertery wiadomości HTTP (HttpMessageConverter) służą do przekształcania żądania HTTP (lub jego części) w typ danych, który może być użyty jako argument w metodzie obsługi, oraz do konwertowania wartości zwracanej przez metodę obsługi na odpowiedź HTTP.
Oto kilka narzędzi, które mogą pomóc w testowaniu API:
- Postman
- Rest Assured
- SoapUI
- Katalon Studio
- Ready API
- Apigee
Podsumowanie
Interfejsy API stały się kluczowe w dzisiejszym świecie, głównie za sprawą rozwoju Internetu. Popularność API REST wynika z łatwości ich tworzenia i używania.
Jeżeli przygotowujesz się do rozmowy kwalifikacyjnej, warto przeanalizować powyższe pytania. Pomogą Ci one lepiej zrozumieć architekturę REST i proces tworzenia API.
Zachęcamy również do zapoznania się z materiałami, opisującymi techniki web scraping, przy pomocy API, na portalu newsblog.pl.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.