Samouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu

  1. Strona główna
  2. Blog
  3. Rozwój oprogramowania

Rozwój oprogramowania

Samouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu

Fetch to wbudowany sposób wywoływania interfejsów API z JavaScript, ale ma jedną niespodziankę, która zaskakuje prawie wszystkich. Naucz się wysyłać żądania, radzić sobie z wszelkiego rodzaju awariami i budować małego pomocnika, którego będziesz mógł ponownie wykorzystać.

9 min czytania
Samouczek JavaScript Fetch API: GET, POST, obsługa błędów i przekroczenia limitu czasu

Najważniejsze

  • fetch() zwraca obietnicę dla Response, a odczytanie treści zajmuje sekundę await.
  • Błędy HTTP takie jak 404 i 500 nie odrzucają, dlatego zawsze sprawdzaj response.ok.
  • Aby wysłać JSON, użyj JSON.stringify i ustaw nagłówek Content-Type.
  • Fetch nie ma domyślnej opcji limitu czasu, więc użyj AbortSignal.timeout().

Większość nowoczesnych aplikacji internetowych cały czas komunikuje się z serwerem. JavaScript Fetch API to standardowy sposób, aby to zrobić, i jest wbudowany w przeglądarki oraz w Node.js 18 i nowsze, więc nie trzeba nic instalować.

Podstawowe użycie zajmuje dwie linijki, ale wiele samouczków kończy się na tym i pomija część, która powoduje prawdziwe błędy: obsługę awarii. Przetestowaliśmy przykłady w tym przewodniku na małym serwerze lokalnym w Node.js 24 i pokazane dane wyjściowe pochodzą z tego uruchomienia. example.com w kodzie oznacza Twój własny interfejs API. Jeśli obietnice są dla Ciebie nowością, zacznij od wyjaśnienia obietnic JavaScript.

Co to jest API pobierania?

Fetch to oparty na obietnicach interfejs umożliwiający wysyłanie żądań HTTP. Zastąpił on starszy, oparty na wywołaniach zwrotnych XMLHttpRequest i wiele projektów używa go obecnie zamiast dodawać bibliotekę do prostych wywołań.

Funkcja Pobierz Axios (biblioteka)
Instalacja Wbudowany Dodano jako zależność
Treść JSON-a Zweryfikuj to sam Automatyczny
Przeanalizuj odpowiedź JSON Zadzwoń response.json() Automatyczny
Błędy HTTP odrzucone? Nie Tak, domyślnie
Limit czasu Przez AbortSignal Opcja timeout.

Żądanie GET

Fetch domyślnie wysyła żądanie GET. Są dwa kroki i każdy z nich wymaga await: najpierw przychodzą nagłówki odpowiedzi, a następnie czytasz treść.

const response = await fetch("https://example.com/users/1");
const user = await response.json();

console.log(user);

// { id: 1, name: 'Asha' }

Te dwa kroki istnieją, ponieważ treść może być duża i pojawiać się później niż nagłówki. W skrypcie przeglądarki najwyższy poziom await potrzebuje modułu, więc zazwyczaj umieszcza się go w funkcji async. Zobacz nasz przewodnik po asynchronizacji/oczekiwaniu JavaScript.

Obiekt odpowiedzi

Zanim przeczytasz treść, możesz sprawdzić odpowiedź:

console.log(response.status, response.ok, response.headers.get("content-type"));

// 200 true application/json
Właściwość lub metoda Daje ci
response.ok true dla statusów od 200 do 299
response.status Kod stanu, taki jak 404
response.headers.get(name) Jeden nagłówek odpowiedzi
response.json() Treść przeanalizowana jako JSON
response.text() Ciało jako sznurek
response.blob() Dane binarne, takie jak obraz

Ciało można odczytać tylko raz. Wywołanie json() po raz drugi nie powiodło się w naszym teście:

await res.json();
await res.json();

// TypeError: Body is unusable: Body has already been read

Jeśli chcesz przeczytać to dwa razy, najpierw zadzwoń do response.clone().

Wielka niespodzianka: 404 nie rzuca

To najważniejsza rzecz w tym artykule. Zażądaliśmy użytkownika, który nie istnieje:

const res = await fetch("https://example.com/users/999");
console.log(res.status, res.ok);

// 404 false

Nie zgłoszono żadnego wyjątku. Jeśli chodzi o pobieranie, żądanie zadziałało: osiągnięto serwer i odpowiedział. Obietnica zostaje odrzucona tylko wtedy, gdy nie nadchodzi żadna użyteczna odpowiedź, jak w przypadku awarii sieci. Zatem taki kod ma ukryty błąd:

try {
  const res = await fetch(url);
  const data = await res.json();   // may be an error payload
  showUser(data);                  // runs anyway for 404 and 500
} catch (error) {
  showError();                     // does not run for 404 or 500
}

Sprawdź naszą ściągawkę dotyczącą kodów stanu HTTP, aby zobaczyć, co oznacza każdy kod.

Pomocnik wielokrotnego użytku

Nie powtarzaj tej kontroli wszędzie. Zawiń raz:

async function getJson(url, options) {
  const response = await fetch(url, options);
  if (!response.ok) {
    throw new Error(`Request failed with status ${response.status}`);
  }
  return response.json();
}

try {
  await getJson("https://example.com/users/999");
} catch (error) {
  console.log("caught:", error.message);
}

// caught: Request failed with status 404

Teraz zarówno błędy HTTP, jak i błędy sieciowe kończą się w tym samym catch. Tę małą funkcję warto mieć w każdym projekcie. Prawdziwa wersja może również odczytać komunikat o błędzie z treści odpowiedzi i obsłużyć odpowiedź 204 No Content, która nie zawiera kodu JSON do przeanalizowania.

POST danych JSON

Przekaż obiekt opcji jako drugi argument. W przypadku JSON musisz sam zrobić dwie rzeczy: przekonwertować dane na ciąg znaków i ustawić nagłówek.

const created = await getJson("https://example.com/users", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ name: "Ben" }),
});

console.log(created);

// { id: 2, name: 'Ben', type: 'application/json' }

Nasz serwer testowy powtórzył otrzymany typ zawartości, potwierdzając otrzymanie nagłówka. Zapomnienie o tym nagłówku jest częstą przyczyną mylących błędów serwera, ponieważ wiele frameworków analizuje JSON tylko wtedy, gdy jest on zadeklarowany. Aby przesłać formularz lub pliki, przekaż obiekt FormData jako treść i nie ustawiaj Content-Type, ponieważ przeglądarka sama musi dodać wartość graniczną.

Inne metody i opcje

Opcja Przykład Cel
metoda "PUT", "PATCH", "DELETE" Metoda HTTP
nagłówki { Autoryzacja: „Na okaziciela…” } Nagłówki żądań
ciało JSON.stringify(data) Treść żądania
sygnał AbortSignal.timeout(5000) Anulowanie
referencje „uwzględnić” Wysyłanie plików cookie między źródłami
pamięć podręczna „bez sklepu” Zachowanie pamięci podręcznej przeglądarki

Wybierasz pomiędzy REST a innymi stylami API? Nasze porównanie REST vs GraphQL pokazuje, jak fetch pasuje do każdego z nich.

Ciągi zapytań

Nie twórz ciągów zapytań poprzez łączenie tekstu, ponieważ znaki specjalne spowodują ich przerwanie. URLSearchParams obsługuje kodowanie za Ciebie:

const params = new URLSearchParams({ q: "red shoes", page: 2 });
console.log(params.toString());

// q=red+shoes&page=2

await getJson(`https://example.com/search?${params}`);

// { q: 'red shoes', page: '2' }

Serwer odebrał red shoes poprawnie, z przywróconą przestrzenią.

Limity czasu i anulowanie

Fetch będzie długo czekać na wolnym serwerze, chyba że powiesz inaczej. AbortSignal.timeout() ustala limit. Nasz testowy punkt końcowy zajął dwie sekundy przy limicie 200 milisekund:

try {
  await fetch("https://example.com/slow", { signal: AbortSignal.timeout(200) });
} catch (error) {
  console.log(error.name);
}

// TimeoutError

Aby anulować ręcznie, na przykład gdy użytkownik opuszcza stronę lub wpisuje nowe wyszukiwane hasło, użyj AbortController:

const controller = new AbortController();
const pending = fetch("https://example.com/slow", { signal: controller.signal });

controller.abort();

try {
  await pending;
} catch (error) {
  console.log(error.name);
}

// AbortError

Aby uruchomić kilka żądań jednocześnie, użyj Promise.all, co jest znacznie szybsze niż oczekiwanie na nie pojedynczo:

const [user, search] = await Promise.all([
  getJson("https://example.com/users/1"),
  getJson("https://example.com/search?q=a&page=1"),
]);

Każdy rodzaj porażki

Oto, jak wyglądała każda porażka w naszym biegu, wraz z tym, jak je odróżnić:

Sytuacja Co się stanie Jak to wykryć
Serwer zwraca 404 lub 500 Obietnica się spełnia response.ok jest fałszywe
Serwer nie jest osiągalny Odrzuca z TypeError złapać
Osiągnięto limit czasu Odrzuca z TimeoutError error.name
Ręcznie anulowane Odrzuca z AbortError error.name
Treść nie jest prawidłowym kodem JSON json() odrzuca z SyntaxError złapać

Ten ostatni rząd jest powszechny w produkcji. Serwer proxy zwracający błąd 502 często wysyła stronę błędu HTML. Odtworzyliśmy to i res.json() rzuciło SyntaxError. Sprawdzenie response.ok przed analizą oznacza, że ​​zgłaszasz prawdziwy problem, a nie mylący błąd analizy.

Wskazówka: Celowo przetestuj te ścieżki błędów. Narzędzia programistyczne przeglądarek mogą symulować bycie w trybie offline, a narzędzia testowe mogą kpić z odpowiedzi 500. Nasz przewodnik testowanie API z Postmanem obejmuje sprawdzanie strony API.

CORS i poświadczenia

W przeglądarce żądanie z jednego źródła do drugiego podlega CORS, zasadom udostępniania zasobów między źródłami. Jeśli zobaczysz błąd wskazujący Access-Control-Allow-Origin, poprawka należy do serwera, który musi zezwalać na Twoją witrynę. W JavaScript awaria pojawia się tylko jako ogólna TypeError, więc spójrz na konsolę przeglądarki, aby poznać rzeczywisty powód. Node.js nie wymusza CORS, więc żądanie działające w skrypcie może nadal zakończyć się niepowodzeniem w przeglądarce.

Domyślnie przeglądarki nie wysyłają plików cookie w przypadku żądań pochodzących z różnych źródeł. Ustaw credentials: "include", jeśli ich potrzebujesz i upewnij się, że serwer na to pozwala. Nigdy nie umieszczaj tajnych kluczy API w JavaScript przeglądarki, ponieważ każdy może je odczytać. Trzymaj je na swoim serwerze.

Typowe błędy

  • Nie sprawdzam. response.ok. Odpowiedzi na błędy są traktowane jako pomyślne.
  • Zapomnienie o drugim await. response.json() również zwraca obietnicę.
  • Zapominanie JSON.stringify. Przekazywanie obiektu w miarę wysyłania go przez ciało [object Object].
  • Ustawienie Content-Type z FormData. To przerywa granicę, więc ją pomiń.
  • Bez limitu czasu. Zawieszone żądanie może spowodować, że spinner strony będzie działał przez czas nieokreślony.
  • Przetwarzanie JSON pod kątem pustej odpowiedzi. Liczba 204 nie ma treści i json() wyrzuci.

Podsumowanie

Pobieranie jest proste, jeśli pamiętasz jego główną zasadę: odpowiedź nie jest tym samym, co sukces. Skopiuj małego pomocnika do swojego projektu, dodaj limit czasu i przetestuj ścieżki błędów. Następnym krokiem będzie zbudowanie małej strony, która ładuje dane z API, wyświetla wyraźny komunikat o błędzie i pozwala użytkownikowi anulować powolne wyszukiwanie.

Najczęstsze pytania

Czy pobieranie zgłasza błąd 404?

Nie. pobieranie jest odrzucane tylko w przypadku braku odpowiedzi, na przykład w przypadku awarii sieci. W przypadku błędów HTTP sprawdź samodzielnie plik respond.ok lub respond.status.

Jak wysłać JSON z pobraniem?

Ustaw metodę na POST, dodaj nagłówek Content-Type aplikacji/json i przekaż dane przez JSON.stringify jako treść.

Dlaczego potrzebuję dwóch oczekiwań z pobraniem?

Pierwszy zostaje rozwiązany po nadejściu nagłówków odpowiedzi. Drugi czeka na pobranie i przeanalizowanie treści, co może nastąpić później.

Jak ustawić limit czasu pobierania?

Sygnał przekazu: AbortSignal.timeout(5000) w opcjach. Żądanie zostaje następnie odrzucone z błędem TimeoutError, jeśli trwa dłużej niż określona liczba milisekund.

Czy pobieranie jest dostępne w Node.js?

Tak. Funkcja Fetch jest dostępna na całym świecie w Node.js 18 i nowszych wersjach. Starsze wersje wymagają pakietu, chociaż zasady CORS obowiązują tylko w przeglądarkach.

Ucz się dalej

Pracuj z Stack Quora

Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?

Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.

Czytaj dalej

Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój

Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.

Sztuczna inteligencja

Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć

Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…

Przeczytaj artykuł →
DevOps

Wyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo

Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429

Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …

Przeczytaj artykuł →
Automatyzacja testów

Wyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią

Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…

Przeczytaj artykuł →
Testowanie oprogramowania

Wyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%

Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…

Przeczytaj artykuł →
Bazy danych i SQL

DELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich

DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami

Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…

Przeczytaj artykuł →
Tworzenie oprogramowania

Interfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora

Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…

Przeczytaj artykuł →
Tworzenie oprogramowania

Python *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami

Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…

Przeczytaj artykuł →
Tworzenie oprogramowania

Funkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać

Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…

Przeczytaj artykuł →
Sztuczna inteligencja

Kim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić

Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…

Przeczytaj artykuł →
DevOps

Monitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami

Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…

Przeczytaj artykuł →
DevOps

Woluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób

Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…

Przeczytaj artykuł →
Automatyzacja testów

TDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich

TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…

Przeczytaj artykuł →
Testowanie oprogramowania

Testowanie akceptacyjne użytkownika (UAT): proces, lista kontrolna i rzeczywiste przykłady

Wyjaśniono testy akceptacyjne użytkownika: kto je przeprowadza, czym różni się od kontroli jakości, siedmioetapowy proces, szablon przypadku testowe…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie wartości SQL NULL: IS NULL, COALESCE, NULLIF i pułapki, których należy unikać

Wartości SQL NULL wyjaśnione za pomocą zapytań, które wykonaliśmy: logika trójwartościowa, IS NULL, COALESCE, NULLIF, w jaki sposób agregacje, łącze…

Przeczytaj artykuł →
Bazy danych i SQL

Instrukcja SQL CASE WHEN: składnia, rzeczywiste przykłady i typowe błędy

SQL CASE WHEN wyjaśnione za pomocą zapytań, które uruchomiliśmy: proste i przeszukiwane formularze, kolejność warunków, elementy przestawne z SUM, s…

Przeczytaj artykuł →
Tworzenie oprogramowania

Co to jest JWT? Tokeny internetowe JSON wyjaśnione na przykładzie działania

Co to jest JWT? Wyjaśniono tokeny sieciowe JSON: trzy części, token zbudowany i zmodyfikowany w uruchomionym przez nas kodzie, JWT a sesje, pamięć m…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie pętli zdarzeń JavaScript: stos wywołań, mikrozadania i liczniki czasu z przykładami

Pętla zdarzeń JavaScript wyjaśniona za pomocą uruchomionego przez nas kodu: stos wywołań, kolejki zadań i mikrozadań, dlaczego setTimeout 0 nie jest…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie generatorów Pythona i wydajności: oszczędzaj pamięć dzięki prawdziwym przykładom

Generatory Pythona i wydajność wyjaśnione za pomocą uruchomionego przez nas kodu: sposób wstrzymywania i wznawiania, mierzone oszczędności pamięci, …

Przeczytaj artykuł →
Sztuczna inteligencja

Czym są osady? Wyjaśnienie wektorów i podobieństwa cosinusa

Czym są osadzania? Prosty przewodnik po wektorach, podobieństwie cosinusów i wyszukiwaniu semantycznym, z małym przykładem, który przeprowadziliśmy,…

Przeczytaj artykuł →
DevOps

Wdrożenie niebiesko-zielone a kanaryjskie: różnice, kompromisy i sposób wyboru

Wyjaśniono wdrożenie Blue-Green vs Canary: sposób działania każdego z nich, koszty, ryzyko i wycofywanie zmian, przetestowane przez nas stabilne łąc…

Przeczytaj artykuł →
Automatyzacja testów

Niestabilne testy: co je powoduje i jak je naprawić na dobre

Niestabilne testy wyjaśnione w przeprowadzonych przez nas demonstracjach: główne przyczyny, sposób potwierdzenia i zdiagnozowania jednej z nich, odp…

Przeczytaj artykuł →
Testowanie oprogramowania

Load Testing vs Stress Testing: Differences, Metrics and k6 Examples

Wyjaśniono testy obciążenia i testy warunków skrajnych: co dowodzi każdy z nich, testy szczytowe i nasiąkania, istotne metryki, dlaczego średnie wpr…

Przeczytaj artykuł →
Testowanie oprogramowania

Przypadek testowy a scenariusz testowy: kluczowe różnice, przykłady i kiedy stosować każdy z nich

Wyjaśnienie przypadków testowych i scenariuszy testowych: jasne definicje, tabela obok siebie, jedna funkcja resetowania hasła zaczerpnięta ze scena…

Przeczytaj artykuł →
Bazy danych i SQL

Optymalizacja zapytań SQL: czytaj plany wykonania i napraw powolne zapytania z synchronizacją

Optymalizacja zapytań SQL przetestowana na milionie wierszy: przeczytaj plany wykonania, dodaj odpowiednie indeksy, napraw filtry niesargowalne, uży…

Przeczytaj artykuł →
Bazy danych i SQL

SQL UNION vs UNION ALL: różnice, przykłady i testowana wydajność

SQL UNION vs UNION ALL wyjaśnione na podstawie zapytań, które uruchomiliśmy: duplikaty, obie reguły są zgodne, prawdziwy błąd danych, zmierzona wyda…

Przeczytaj artykuł →
Tworzenie oprogramowania

Samouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu

Samouczek JavaScript Fetch API testowany na serwerze lokalnym: GET i POST, dlaczego 404 nie rzuca, pomocnik wielokrotnego użytku, ciągi zapytań, prz…

Przeczytaj artykuł →
Tworzenie oprogramowania

Obsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami

Obsługa plików w Pythonie wyjaśniona za pomocą uruchomionego przez nas kodu: tryby otwarte, czytanie dużych plików, CSV, JSON, pathlib, pliki binarn…

Przeczytaj artykuł →
Tworzenie oprogramowania

Klasy i obiekty Pythona: samouczek OOP z prawdziwymi przykładami

Klasy i obiekty Pythona objaśnione za pomocą uruchomionego przez nas kodu: __init__, metody, atrybuty klas i instancji, dziedziczenie, właściwości, …

Przeczytaj artykuł →
Sztuczna inteligencja

Co to jest model dużego języka? Jak działają LLM, wyjaśnione bez szumu

Co to jest model dużego języka? LLM wyjaśnione prostym językiem: tokeny, osadzanie, uwaga, szkolenie, temperatura i okna kontekstowe, mała demonstra…

Przeczytaj artykuł →
DevOps

Polecenia systemu Linux dla początkujących: niezbędny przewodnik po terminalu z przykładami

Polecenia systemu Linux dla początkujących, pogrupowane według zadań: nawigacja, pliki, przeglądanie logów, grep, potoki, uprawnienia, procesy i arc…

Przeczytaj artykuł →
Automatyzacja testów

Selenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór

Porównanie Selenium i Playwright: architektura, oczekiwanie, obsługa przeglądarki i języka, debugowanie, ten sam test w obu narzędziach, porady doty…

Przeczytaj artykuł →
Testowanie oprogramowania

Partycjonowanie równoważne: technika projektowania testów wyjaśniona na praktycznych przykładach

Wyjaśniono podział równoważny: jak znaleźć prawidłowe i nieprawidłowe partycje, sprawdzone przykłady dla grup wiekowych, hasła i kupony, przeprowadz…

Przeczytaj artykuł →
Testowanie oprogramowania

Ważność a priorytet w testowaniu oprogramowania: różnice, macierz i rzeczywiste przykłady

Wyjaśniono ważność a priorytet w testowaniu oprogramowania: jasne definicje, czterokierunkowa macierz z przykładami, skale poziomów, kto ustawia każ…

Przeczytaj artykuł →
Bazy danych i SQL

Samouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

Samouczek dotyczący podzapytań SQL z zapytaniami, które wykonaliśmy: podzapytania skalarne, IN, FROM i SELECT, podzapytania skorelowane, EXISTS, puł…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie transakcji SQL i ACID: COMMIT, ROLLBACK i poziomy izolacji

Transakcje SQL i ACID wyjaśnione za pomocą wykonanego przez nas przelewu bankowego: COMMIT, ROLLBACK, punkty zapisu, blokady, poziomy izolacji, brud…

Przeczytaj artykuł →
Tworzenie oprogramowania

Ściągawka dotycząca poleceń Git: polecenia, których faktycznie używasz, z przykładami

Ściągawka poleceń Git pogrupowana według zadań: konfiguracja, przemieszczanie, gałęzie, piloty, skrytka, historia i cofanie błędów, z danymi wyjścio…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie obietnic JavaScript: następnie catch, Promise.all i typowe błędy

Obietnice JavaScript wyjaśnione za pomocą uruchomionego przez nas kodu: stany, łańcuchy then i catch, obsługa błędów, Promise.all, allSettled, race …

Przeczytaj artykuł →
Tworzenie oprogramowania

Samouczek słownika języka Python: metody, przykłady i typowe wzorce

Samouczek słownika języka Python z uruchomionym przez nas kodem: tworzenie, odczytywanie i aktualizowanie słowników, metody kluczowych, łączenie, ro…

Przeczytaj artykuł →
Sztuczna inteligencja

Co to jest RAG? Generacja rozszerzona o wyszukiwanie wyjaśniona na przykładzie roboczym

Co to jest RAG? Generowanie wspomagane pobieraniem wyjaśnione krok po kroku: indeksowanie, fragmentowanie, osadzanie, pobieranie, mały działający pr…

Przeczytaj artykuł →
DevOps

Samouczek Terraform dla początkujących: Infrastruktura jako kod od pierwszego pliku do modułów

Samouczek Terraform dla początkujących: zacznij bez konta w chmurze, naucz się inicjowania, planowania i stosowania, a następnie zmiennych, wyników,…

Przeczytaj artykuł →
DevOps

Docker kontra Kubernetes: kluczowe różnice, jak ze sobą współpracują i czego potrzebujesz

Wyjaśniono Docker vs Kubernetes: co robi każdy z nich, ta sama aplikacja działa z obydwoma, porównanie Docker Compose i Swarm, zmiana podkładki dock…

Przeczytaj artykuł →
Automatyzacja testów

Samouczek Pytest dla początkujących: urządzenia, parametryzacja i prawdziwe przykłady

Samouczek pytest dla początkujących z testami, które przeprowadziliśmy na pytest 9.2: asercje, urządzenia, parametryzacja, conftest, znaczniki, tmp_…

Przeczytaj artykuł →
Testowanie oprogramowania

Cykl życia testowania oprogramowania (STLC): 6 faz, kryteria wejścia i wyjścia, przykład

Wyjaśniono cykl życia testowania oprogramowania: sześć faz STLC z kryteriami wejścia i wyjścia, elementy dostarczane, działający przykład funkcji lo…

Przeczytaj artykuł →
Tworzenie oprogramowania

Git merge vs rebase: różnice, przykłady i kiedy czego używać

Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.

Przeczytaj artykuł →
Tworzenie oprogramowania

Python list comprehension: składnia, przykłady i kiedy jej unikać

Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…

Przeczytaj artykuł →
Bazy danych i SQL

SQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)

Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…

Przeczytaj artykuł →