Logo apiterapia.io Szkolenie z projektowania i programowania REST API
„Nigdy nie będziesz mieć drugiej szansy aby wydać pierwszą wersję API”

Tomasz Zieliński
autor szkolenia

Tomasz Zieliński, autor szkolenia

Nowe szkolenie autora bloga Informatyk Zakładowy. Jego szkolenie ze scrapowania zarobiło już przeszło 600 tys. zł i trafiło do 1489 zadowolonych uczestników!

Zapisz się do newslettera szkolenia apiterapia.io

(zero spamu, wypisanie jednym klikiem)

Zaprojektuj perfekcyjne REST API za pierwszym razem

Zaczynasz wymarzony nowy projekt i siadasz do projektowania API? Jeśli przeoczysz w projekcie choć jeden istotny aspekt, konieczne będą nawroty i czasochłonne poprawki - zwłaszcza, jeśli równolegle rozpoczynają się prace programistyczne.

Szkolenie apiterapia.io prezentuje i omawia kompletną listę zagadnień, które należy rozważyć przy tworzeniu pierwszej wersji API. Już dziś ustal strategię zarządzania sesjami, rolami, limitami ruchu czy idempotencją - nawet, jeśli implementacja tych elementów jest oddalona o tygodnie lub miesiące.

Myślenie zamiast LLM-a

Wiedza ze szkolenia pozwoli ci na zaprojektowanie spójnego interfejsu łączącego platformę serwerową z aplikacjami klienckimi. Nieważne, czy korzystasz z Claude Code, Codex-a czy innych narzędzi AI/LLM. Niech automat pisze kod implementujący ten interfejs, ale to ty, jako architekt oprogramowania, masz podjąć kluczowe decyzje.

Scenariusze ujęte w szkoleniu

Szkolenie omawia temat projektowania REST API w sposób uniwersalny, jednak przykłady koncentrują się na trzech popularnych przypadkach:

  1. REST API jako wewnętrzny interfejs łączący serwer z aplikacją webową/mobilną
  2. REST API jako produkt oferowany zewnętrznym klientom
  3. REST API do obsługi narzędzi CLI (interfejs linii komend)

Nie wszystkie omawiane zagadnienia wystąpią w jednym projekcie, dlatego apiterapia.io ma charakter modułowy. Nie musisz marnować czasu na niepotrzebne tematy - skup się na kluczowych elementach bieżącego projektu. Szkolenie kupujesz bezterminowo, więc zawsze możesz wrócić po nową dawkę wiedzy.

Szkolenie będzie przydatne na każdym etapie życia projektu - wliczając w to dobrowolne lub przymusowe aktualizacje wersji oraz wycofywanie (deprecation / sunset) endpointów. Rozdziały poświęcone przeciwdziałaniu atakom DOS, limitowaniu ruchu czy zarządzaniu cache po stronie klienta, pozwolą na systematyczną poprawę jakości już istniejącego produktu.

Zagadnienia są ułożone według stopnia złożoności: podstawowe (wersjonowanie, konwencje nazewnictwa, użycie statusów HTTP, OpenAPI), średnio zaawansowane (autoryzacja i uwierzytelnianie, sesje, role, stronicowanie, rate limiting, timeouty, webhooki, sandboksy) oraz skomplikowane (telemetria, idempotencja, circuit breakers, backpressure, impersonacja, observability). Pełny spis treści znajdziesz na końcu strony.

Docelowy odbiorca

Adresatem szkolenia jest osoba odpowiedzialna za kształt i jakość mającego powstać lub już istniejącego REST API. Zazwyczaj będzie to architekt oprogramowania lub starszy programista. Zdarza się jednak, że to QA jest tą osobą, która ogarnia całość projektu i pierwsza dostrzega problemy lub niespójności.

Czy szkolenie powinny przerobić całe zespoły? Z jednej strony tak, bo uporządkowanie i ujednolicenie poziomu wiedzy poprawi komunikację i ułatwi utrzymanie jakości. Z drugiej strony nawet pojedynczy członek zespołu będzie w stanie zidentyfikować i wskazać obszary, którym powinien przyjrzeć się cały zespół.

O autorze

Tomasz Zieliński, autor szkolenia

Dlaczego możesz mi zaufać? Byłem tam, Gandalfie, 3000 lat temu. Korzystałem z interfejsów REST zanim w ogóle ukuto termin „Representational State Transfer". W minionym tysiącleciu na „API" mówiliśmy „skrypty cgi-bin" i pisaliśmy je w Perlu. Przez minione ćwierć wieku poznałem temat z każdej strony - budowałem aplikacje mobilne, tworzyłem oprogramowanie serwerowe, projektowałem REST API a potem pracowicie je utrzymywałem.

Przez lata zetknąłem się z wielką liczbą interfejsów źle zaprojektowanych, łamiących bez powodu kompatybilność wsteczną, naruszających separację warstw abstrakcji albo na inne sposoby utrudniające pracę programisty. Nauczyłem się jednego - życie jest za krótkie, by publikować kiepskie API.

Szkolenie apiterapia.io zawiera moje własne wnioski, obserwacje i rekomendacje. Powiadają, że eksperta można poznać po tym, że każdą odpowiedź rozpoczyna frazą „to zależy". Aktywnie unikam takiej postawy - gdy przedstawiam kilka rozwiązań, wskazuję jednocześnie, które warto wybrać w typowym przypadku.

Jestem zawodowym programistą od 2003 roku, byłem wykładowcą akademickim, bywam trenerem na szkoleniach IT i prelegentem na konferencjach. Pracowałem w Microsofcie przy Bingu, współtworzyłem systemy finansowe dla Narodowego Banku Polskiego, przyłożyłem rękę do dwóch gier z serii Angry Birds, rozwijałem backend automatycznego tłumacza DeepL. Oprócz tego programowałem tramwaje i autobusy, implementowałem aplikację bankowości mobilnej na Androida, aplikacje obsługujące mobilną telewizję i VOD oraz wiele, wiele innych.

Obecny status szkolenia – preprodukcja

Szkolenie jest obecnie w fazie preprodukcji - przygotowuję materiały do kilku rozdziałów demonstracyjnych, by następnie zarejestrować je w profesjonalnym studiu nagrań. Potem nastąpi przedsprzedaż (w promocyjnej cenie), która odpowie na pytanie, czy takie szkolenie jest w ogóle potrzebne. Wierzę, że tak - w języku polskim nie ma żadnego szkolenia obejmującego kompleksowo temat REST API. Udana przedsprzedaż sfinansuje produkcję reszty materiałów.

Zapisz się do newslettera szkolenia apiterapia.io

(zero spamu, wypisanie jednym klikiem)

Bez AI/LLM

Ważne! Cała zawartość szkolenia apiterapia.io powstaje w głowie autora, w oparciu o jego wiedzę i osobiste doświadczenie. Żadne zdanie, które pojawi się w treści dowolnego rozdziału, nie zostało ani nie zostanie utworzone przez AI/LLM.

Przedsprzedaż

Cena w przedsprzedaży będzie dużo niższa, niż późniejsza regularna cena szkolenia - to forma podziękowania dla osób, które zaufają mi i będą gotowe poczekać kilka miesięcy na gotowy produkt. Z transakcji będzie można wycofać się przez cały okres oczekiwania oraz przez dwa tygodnie od premiery szkolenia.

Dostęp do zakupionego szkolenia jest bezterminowy - możesz więc wracać do niego w przyszłości by poszerzać swoją wiedzę o zagadnienia, które wcześniej nie były potrzebne.

Planuję systematyczne dodawanie do szkolenia apiterapia.io nowych treści, stanowiących darmową aktualizację dla wszystkich uczestników z lat poprzednich. Robię tak w Szkoleniu z automatyzacji pobierania danych z internetu - każda kolejna edycja była wzbogacana o kolejne rozdziały.

Gwarancja satysfakcji

Jestem pewny wysokiej jakości szkolenia, więc dostajesz gwarancję satysfakcji. Jeśli uznasz, że szkolenie nie było warte zapłaconej ceny, dostaniesz zwrot pieniędzy. Bez zadawania pytań, bez żalu ani wyrzutów. Na taką decyzję będziesz mieć 14 dni od daty wydania kompletnego szkolenia - oczywiście w okresie przedsprzedaży możesz zrezygnować przez cały okres oczekiwania.

Ramowy spis treści

Poniżej znajdziesz planowany program szkolenia apiterapia.io wraz z hasłowym opisem tematów.

Rozdział 1: Podstawy

Dla kogo jest to szkolenie i co chcemy osiągnąć

Patrz - wstęp powyżej.

O czym będzie, trzy podstawowe przypadki użycia REST API

Patrz - wstęp powyżej.

O czym NIE będzie

Nie skupiamy się na kryptografii, hardeningu, podatnościach bezpieczeństwa ani pentestach - ale przy projektowaniu REST API będziemy zapobiegać lukom bezpieczeństwa wynikającym z niewłaściwej architektury (np. IDOR - możliwość enumeracji zasobów).

Nie będziemy mówić o autoskalowaniu infrastruktury, zasygnalizujemy jedynie, gdy omawiane zagadnienie będzie związane z rozmiarem projektu. Podobnie z testami - nie uczymy zasad tworzenia testów jednostkowych czy integracyjnych, ale wskażemy nieoczywiste aspekty testowania API warte uwzględnienia.

Nie będzie o konkretnym frameworku ani języku, nie będzie o websocketach, nie będzie o GraphQL, nie będzie o multimediach ani streamowaniu audio/wideo. Nie będziemy wchodzić w procesy biznesowe e-commerce ani rozważać atomowości zmiany stanów magazynowych - w szkoleniu skupiamy się na sposobach komunikowania tego stanu.

Protokół HTTP/HTTPS

Celem tego rozdziału jest wyrównanie poziomu wiedzy na temat naszego podstawowego protokołu komunikacyjnego, jakim jest HTTP(S). Znajdziemy tu omówienie protokołu, objaśnienie wszystkich elementów URL-a, poznamy główne cechy żądań i odpowiedzi, nauczymy się ręcznej komunikacji przez HTTP (umiejętność ta raczej się nie przyda, ale buduje głębsze zrozumienie tematu). Dowiemy się, w jaki sposób diagnozować problemy z komunikacją za pomocą narzędzi developerskich przeglądarki oraz narzędzia curl. Na końcu przeczytamy, co nowego doszło w protokołach HTTP 2 oraz HTTP 3.

Narzędzia, które warto poznać

Podstawowe narzędzia przydatne na początku - curl, httpie, Yaak, OpenAPI itp.

Absolutnie podstawowe, minimalne REST API

Bierzemy na tapet najprostsze, najbardziej podstawowe REST API fikcyjnego narzędzia z listą zadań TODO, przyjmujące żądania typu GET i POST, zwracające odpowiedzi w formacie JSON. Dodatkowo: dlaczego używać https także w developmencie, bez redirectów i nigdy po IP, oraz dlaczego warto trzymać API pod inną (sub)domeną niż witryna produktowa.

Jak wersjonować API

Przy projektowaniu API nie myślimy z reguły o tym, że kiedyś zastąpimy je wersją 2.0 zaś wersję 1.0 trzeba będzie w przewidywalny i cywilizowany sposób wycofać z użycia (deprecate). Meaningful versioning, semantic versioning; routowanie do różnych wersji nie wymagające deserializacji; symbol wersji na początku czy w środku czy poza URL-em; tylko prototyp może zmieniać się często i bez zgodności wstecznej; zagadnienie kompatybilność API w tył i w przód; inne możliwości wersjonowania.

Jak komunikować wersjonowanie API

changelog, przewodniki migracji, onboarding deweloperów; dodanie opcjonalnego pola = bezpieczne; usunięcie/zwężenie/zmiana typu = łamiące; nowa wartość enuma = to zależy; jak to robią w protobufach.

Wycofywanie wersji (albo mniejszych fragmentów)

osobny URL od sprawdzania aktualności i kompatybilności; nagłówki RFC 8594 Sunset HTTP Header do rozważenia, ale łatwiej osadzić informację w zwracanym obiekcie.

Status pages

gdzie stawiać (zewnętrzna infrastruktura), kiedy powiadamiać, jak często aktualizować, gdzie wyświetlać (pasek na głównej ma sens), dlaczego duzi dostawcy bardzo o tym kłamią, dlaczego czasem naprawdę nie wiedzą (bo np. cloudflare zepsuł ale tylko pół regionu); jak wynagradzać klienta; SLA / SLO / SLI.

Konwencje nazewnictwa ścieżek w endpointach czyli czasowniki kontra rzeczowniki

Omówienie popularnych opcji; sztuczne klucze w ID-kach zamiast ujawniania danych, opcjonalny slug może być wygodny dla użytkownika, konwencje nazewnictwa pól, kodowanie enumów.

Jak traktować wchodzący i wychodzący content-type

czasem coś co wygląda jak json zostanie automatycznie zdeserializowane, niektóre API będą wymuszać prawidłowy content-type; kompresja odpowiedzi jeśli klient się zgadza; chunked max length; tylko angielski i nic więcej - zaoszczędzisz czas a developerzy i tak nie znoszą tłumaczeń bo nie da się wtedy googlać błędów.

Czy i do czego używać statusu odpowiedzi HTTP

Wiele tutoriali robi tu złą robotę. Konwencje, które w małym projekciku mają sens, wywracają spójność dużego projektu zbudowanego z wielu komponentów. Uwaga na przezroczyste przekierowania w serwerach i klientach. Których metod HTTP będziemy używać, dlaczego upsert nie pasuje do konwencji i tak dalej.

Proponowany ogólny schemat każdej odpowiedzi

Podsumowanie powyższych rozdziałów: status, pole z odpowiedzią, ostrzeżenie o kompatybilności, ostrzeżenie o pracach serwisowych.

Dobre komunikaty błędów

Czyli co zamiast „błąd w kolumnie 18282”. Kontrola GET czy POST; override standard errors pages; „czy miałeś na myśli”; URL do bazy wiedzy; kody błędu gdy opis nie jest unikalny; Problem Details (RFC 9457) do rozważenia. Błędy formularzy - zwracanie wszystkich błędów walidacji naraz; sygnał „czy można ponawiać”.

Dygresja: warstwy abstrakcji przy tworzeniu klientów

Im bardziej customowe rzeczy robimy, tym ważniejsze są warstwy abstrakcji - jedna bierze obiekt, druga bierze string, trzecia bierze strumień. Abstrakcje zawsze ciekną.

OpenAPI

O potrzebie posiadania jednego źródła prawdy; generowanie dokumentacji; co jest teraz a co będzie w wersji 4.0, OpenAPI nie będzie panaceum, np. Cloudflare generuje openapi z typescriptu.

Generowanie serwerów i klientów z OpenAPI

Zaleta - użycie takich samych encji; dokumentowanie obejść; wady.

Czy warto wydawać oficjalne SDK, howto, tutoriale

Jeśli produkt będzie popularny, to za darmo powstaną nieoficjalne; które potem można sforkować/przejąć/zatrudnić; SDK dostarcza silne typy ale także operacje asynchroniczne, SDK może dostarczać preferowane timeouty, sposób obsługi błędów albo pre-walidację zmniejszającą obciążenie serwera, każda publikacja ciągnie za sobą konieczność aktualizowania; cykl życia spowalnia iteracje i wymaga zasobów.

Konwencje z jsonapi.org

Opis, co ma sens a co nie bardzo; uwzględnić sparse fieldsets (?fields=), dołączanie powiązanych zasobów (?include=/embedding vs linkowanie).

Zasoby-singletony

/me, /settings, /config. Wzorzec „bieżący użytkownik” i zasoby jednoznaczne (bez ID w ścieżce).

Udostępnianie klientom Postmana

O wymaganych nagłówkach CORS.

Generowanie klientów z modelu danych

czy ścieżki API mają odwzorować relacje, np. users/123/cart/456; często klient i serwer będą pisane w różnych językach; reference client do łatwego porównania z implementacją produkcyjną.

Daty, godziny i strefy czasowe

Tu żyją smoki. Serio. W tym rozdziale będę starał się przekonać cię, by wszystkie timestampy trzymać w postaci UTC oraz by upraszczać architekturę i raczej dać wszystkim darmowe 23h usług, niż obsługiwać reklamację użytkownika przeprowadzającego się z Nowej Zelandii na Hawaje. ISO 8601-formatted strings, ISO 8601 durations, interwały, powtarzalność (np. dla rate-limit window, retencji, subskrypcji).

Drobiazgi

ignoruj slashe na końcu ścieżki (raczej interpretuj jako ten sam zasób niż redir), health endpoint, readiness endpoint, nie zwracaj arrayów jako głównej odpowiedzi (rozszerzalność o metadane / paginację), integracje przez n8n albo make albo zapier; unikaj tworzenia wewnętrznych API; Pieniądze / waluty / precyzja dziesiętna; nie przeliczaj walut, ceny to decyzja biznesowa a nie projektowa.

Projektowanie API MCP dla AI/LLM

tutaj co nieco o API dla AI, ale także by uważać i nie ujawniać swoich kluczy; oraz o tym że LLM może używać CLI.

Dodatkowa wiedza o tworzeniu API klient-serwer

CORS. Preflight, Access-Control-*, credentials, czemu „*” gryzie się z cookies. HEAD i OPTIONS poza CORS. HEAD do taniego sprawdzenia istnienia/rozmiaru bez body; OPTIONS jako deklaracja możliwości.

Dlaczego nie będzie o projektowaniu zmian i governance

Każda firma, dział, zespół i PM wykształca własny zestaw sposobów na zarządzanie, więc będzie tylko garść porad: niech przepychanie wniosku o zmianę będzie zadaniem jednej osoby a nie zespołu; ta osoba musi znać problem wzdłuż i wszerz; ADR niestety oprócz rozwiązań technicznych musi też być zarządzany politycznie.

Rozdział 2: Rzeczy średnio skomplikowane

Autoryzacja i uwierzytelnianie

Nie ma słowa autentykacja, 401 vs 403, dodać testy sprawdzające czy wszystkie endpointy są chronione (brak ochrony to wyjątek).

przegląd schematów: API key, OAuth2 (client-credentials dla M2M, auth-code dla aplikacji), JWT (i kiedy świadomie NIE — bo unieważnienie jest trudne), mTLS, podpisywanie żądań (HMAC) — z kryterium „kiedy co”; cyklu życia poświadczeń: wydawanie, rotacja, unieważnianie, wygasanie, refresh, scopes/ograniczanie uprawnień klucza, gdzie i jak klient klucz pozyskuje.

Zarządzanie sesjami

Nie ma jednego dobrego sposobu. Token w URL-u, token w cookies, token w nagłówkach, token w requeście. CSRF, SameSite, double-submit; Zasoby z czasem życia - TTL / rezerwacje np. koszyk / rezerwacja ważna 10 min, potem wygasa — jak to wyrazić w kontrakcie.

Role i dostępy

czy zapewnia je system zewnętrzny, czy implementacja API, czy filtrujemy po tabelach, kolumnach, wierszach, czy API jest z tym zgodne; czy ukryte dane da się pozyskać na około; jawna kontrola własności obiektu.

Walidacja danych wejściowych

komunikatami błędów pomożemy userom i włamywaczom ale security by obscurity i tak nie działa; limity połączeń, zip bomby; czy sanityzować w bazie czy na UI; UTF-8 wszędzie, normalizacja napisów, pułapki przy porównywaniu loginów/identyfikatorów, emoji, case-folding.

ORM w danych

Czy drzewo zależnych obiektów jesteśmy w stanie tworzyć atomowo? Czy głębokość ORM w deserializacji jest sterowana? Jaki jest default? Problemy z reprezentacją relacji w formacie JSON.

Filtrowanie i sortowanie wyników

Uwaga na SQL injection; ULID; limit długości URL-a w GET, wyszukiwanie z ciałem żądania nową metodą QUERY gdy kryteriów jest dużo, sygnalizacja wyszukiwania pełnotekstowego; pusta kolekcja = 200 [], nie 404; null vs [] vs brak pola w odpowiedzi.

Stronicowanie wyników

gruby temat, mocno zależy do skali, side efekty zależne od przyjętej konwencji.

Rate limits czyli limitowanie ruchu

W jaki sposób realizować limity wynikające z wykupionego tiera, jak poradzić sobie z klientem którego kod poszedł w maliny; sliding window rate limiting per API key and IP; IETF draft: RateLimit Header Fields (RateLimit, RateLimit-Policy); kontrakt odpowiedzi (429 + Retry-After).

O zliczaniu zasobów

uwaga na równoległe zadania oraz jak podejść do sytuacji w której klient wyczerpuje limit zasobów; kwota rozliczeniowa/metering (billing).

Timeouty nie istnieją, są tylko niedostarczone bajty

Na każdym poziomie abstrakcji timeout będzie czym innym, ale zawsze będzie to problem dwóch generałów.

Dygresja: na jakim poziomie sterować retry’ami

Plusy i minusy decyzji na różnym poziomie abstrakcji.

Dodatek: statystyki użycia zasobów dla klienta (oraz dla supportu)

Loguj wszystko, supportowi pokazuj wszystko, klientowi pokazuj dane zagregowane.

Aktualizacja danych - niekoniecznie PATCH

Semantyka null / brak pola / wartość pusta; czy null kasuje, czy brak pola = „nie zmieniaj”; które pola są read-only i co się dzieje przy próbie ich zmiany, co się dzieje przy próbie zmiany nieistniejących atrybutów, JSON Merge Patch (RFC 7386) vs JSON Patch (RFC 6902).

Generatory danych testowych i testy obciążeniowe

Historyjka z dawnych czasów i generatory sensownie wyglądających danych.

API default open / default close

Mikroserwisy albo usługi zależne mogą nie odpowiadać w zakładanym czasie, co wtedy robić; fail open z flagą informującą o degradacji.

Operacje asynchroniczne kontra synchroniczne

Kiedy przyjmować zadanie do kolejki a kiedy obsługiwać je natychmiast; 202 Accepted + zasób statusu + polling/Location/Retry-After.

Kontraktowa spójność danych

read-after-write czy eventual consistency? bardzo zależy od budowy infrastruktury, możliwości przyklejenia klienta do jednej maszyny na load balancerze, itp.

Upload i download plików

multipart vs base64-w-JSON vs presigned URL (klient wgrywa wprost do storage, serwer tylko podpisuje), limity rozmiaru ciała, skanowanie; bulk export dużych zbiorów. Odwrotność uploadu: żądanie eksportu → zadanie async → pobierz plik.

Po co komu CLI

Dla testerów, do integracji LLM, do automatyzacji, z wyjściem JSON; warto mieć wewnętrzne CLI jako reference client; bardzo warto trzymać się przyjętych konwencji, np. exit codes, dobrze jest integrować się z istniejącą infrą np. uwierzytelnianie w K8S i tak dalej.

Generowanie klientów CLI

Jak generować stronę serwerową i kliencką i utrzymywać zgodność w obie strony; uwierzytelnianie w środowisku headless/CI.

A może Protocol Buffers zamiast JSON-a?

Kiedy lepiej sprawdzi się protobuf, co jest tam wymyślone dobrze.

Dlaczego nie mówimy o gRPC/JSONRPC?

Czyli jak wykonywać akcje po stronie serwera bez udawania, że to odwołanie do zasobów REST.

Problemy z JSON-em i serializacją

Brak typu datetime, brak reprezentowalnych zakresów; brak reprezentacji zależności cyklicznych i WIELE innych.

OpenAPI dla średnio zaawansowanych

Jak utworzyć definicję OpenAPI w już istniejącym projekcie.

Model danych dla średnio zaawansownych

dodawaj symetryczne możliwości odpytywania, inaczej będzie full scan; Granularność zasobu: chatty vs chunky, granice agregatu. Czy GET /order zwraca też pozycje i adres, czy trzy osobne calle? Over-fetch vs N+1 po stronie klienta mobilnego; Relacje, embedding vs linkowanie, semantyka kaskad. Co się dzieje z dziećmi po skasowaniu rodzica (kaskada / 409 / osierocenie), nullowalne FK, jak reprezentować i modyfikować relacje. Ścieżki users/123/cart/456 są wzmiankowane, ale bez semantyki integralności.

Edycja wielu encji naraz

Oraz że bez sensu mieć HTTP 207 multi cośtam, nie należy też wymuszać na klientach pamiętania requestów, ogólnie batch API ma definiować semantykę - czy failuje w całości, czy robi revert, czy robi sekwencyjnie, czy przerywa; raportowanie zawsze granularne.

Jak sprzedawać dostęp do płatnego API

porady dotyczące oferty komercyjnej; SSO, RBAC, SOC-II i inne certyfikaty, logi audytowe; będzie nowy zestaw problemów: scraping, credential stuffing, account takeover, tworzenie tysięcy darmowych kont.

Architektura multi-tenant

Czyli osobne deploymenty dla osobnych klientów: współdzielona baza + tenant_id, schema-per-tenant, deployment-per-tenant, sposób identyfikacji tenanta (subdomena / nagłówek / token), izolacja danych, „noisy neighbor”; customowe SLA; customowa instalacja która odbiega od dalszego rozwoju, fajnie to robi Basecamp.

Zarządzanie pamięcią cache klienta

rzadko poruszany temat, osobna domena na zasoby statyczne, osobna na user generated, oprócz tego polecane dwa tiery - brak cache i krótki cache; ETag Cache-Control, Expires, Pragma, Last-Modified; ETag + If-Match, If-Unmodified-Since, wykrywanie „ktoś nadpisał w międzyczasie”. To bardzo częsty realny problem. RFC 9110/9111; Vary. Bez niego CDN/proxy potrafi podać odpowiedź jednego użytkownika drugiemu, gdy treść zależy od Authorization/Accept/Accept-Encoding; Dodatkowo: Cache-Control: private/no-store.

Infrastruktura serwerowa / cloudflare / cdn / proxy itp

Kim był serwerow? Rate limiting, DDoS protection, TLS termination, Request normalization, Geographic routing.

Webhooki

API oddzwania do klienta (zdarzenia). Ogromny temat produktowy: dostarczanie at-least-once, podpisywanie (HMAC), retry, idempotencja po stronie odbiorcy, ochrona przed SSRF, replay; CloudEvents jako koperta zdarzeń. Standardowy format webhooka/eventu (źródło, typ, id, czas) zamiast wymyślania własnego. „Cienkie vs grube” zdarzenia (event-carried state). Czy webhook niesie pełny stan, czy tylko identyfikator danych.

Sandboxy

gdy API jako produkt - sandbox dla klientów (testowe klucze, dane-zabawki, brak skutków ubocznych); możliwość klonowania proda, wiele endpointów albo przełącznik prod-sandbox; fejkowe kwoty wymuszające określone odpowiedzi.

Dobre rady dotyczące wydajności

Warto prowadzić testy na bazie wypełnionej tak, jak za rok będzie wypełniona produkcja. Warto śledzić czas wykonania testów - oraz śledzić regresje. Warto dodać stress-testy i śledzić, co jest w danej chwili wąskim gardłem.

Rozdział 3: Rzeczy skomplikowane

JSON Schema - czy pomoże?

Być może. W protobufach fajne jest to, że telegram sam się waliduje względem niezbędnego w tym przypadku pliku definicji.

Logowanie zdarzeń / telemetria

opentelemetry? co zapisywać? 100% of 500s, exceptions, failures; zapisuj wolne połączenia - wszystko powyżej p99 latency threshold; do tego: nazwani userzy, nazwani klienci; konta testowe; oflagowane sesje; reszta losowo - 1-5%.

Bezpieczne logowanie - SecretString

Jak logować informacje aby przeszły audyt, jak secret string, anonimizowanie dumpów proda.

GDPR, retencja, prawo do zapomnienia

techniczny konflikt między trzymaniem spójnych backupów a prawem do zapomnienia, nie cytujcie mnie ale w praktyce nikt nie przepisuje backupów, natomiast trzeba backupować osobno listę kluczy encji zapomnianych i w procedurze przywracania backupu mieć proces ponownego kasowania; logi można trzymać jeśli będą pseudoanonimizowane; audyty i historia zasobów - kto i kiedy.

Geoblokowanie / Sankcje / kontrola eksportu

nie tylko odrzucenie ataków z Białorusi czy Korei - świadome odrzucanie ruchu z określonych jurysdykcji — realny wymóg produktów komercyjnych.

Unikanie enumeracji zasobów

Jakie pułapki mamy w UUID różnych wersji, oraz stabilne czasowo generatory IDków czyli ULID albo uuidv7; osobne pule / prefiksy uidów dla różnych tabel.

Idempotencja - jak implementować

Wskazówki dotyczące implementacji endpointów; jest na to RFC IETF draft: Idempotency-Key Header; używać zawsze zegara serwerowego; Identyfikatory generowane przez klienta (PUT-create). Klient dostarcza UUID/ULID, dzięki czemu tworzenie jest idempotentne bez Idempotency-Key.

Losowe błędy w dev, test i preprod API

Dlaczego warto; dodatkowo o requestach zagregowanych np. aby nie mieć 20 calli z mobilki i 2^20 błędów tylko jeden call.

Przeciwdziałanie atakom Denial of Service (DoS)

Tutaj o tym, że trzeba bronić API przed wysyceniem zasobów, np. poprzez filtrowanie nieuprawnionych żądań powodujących pracochłonne obliczenia po stronie serwera.

circuit breakers, exponential backoff, backpressure

bezpieczniki, disabling features on demand twitter load, CAPTCHA or proof-of-work challenges after suspicious activity.

compatibility flags, compatibility dates

kompatybilność wsteczna.

dodatkowe testowanie API

celowe spowalnianie API w testach - co daje np. zobaczymy słabości klienta mobilnego; sprawdźmy choć raz wydajność generując 10x więcej danych niż przewidujemy na produkcji; testowanie malformed JSON unterminated strings i innych usterek.

Impersonacja konta użytkownika

Aby odtworzyć problem, support może potrzebować zalogować się na konto użytkownika - tutaj wskazówki dotyczące implementacji tej funkcji - audyt musi wyraźnie zaznaczać, co zrobił pracownik impersonując.

Zaawansowany JSON - niebezpieczeństwa i pułapki

Przykłady problemów związanych z deserializacją i serializacją JSON, jak np. przekroczenie granicy za którą liczby zmiennoprzecinkowe nie pokrywają wszystkich liczb naturalnych (problem z Twitterem/X i identyfikatorami tweetnięć). Streamowanie JSON-a (JSON Lines, NDJSON, JSON Text Sequences, Server-Sent Events (SSE)) aby mieć wyniki przyrostowe - mało popularne, podatne na problemy z buforowaniem, raczej korzysta się z websocketów czyli poza zakresem szkolenia; NaN/Infinity/liczby spoza zakresu w JSON.

Migracje, drain before restart

rollouty stopniowe z nowymi binarkami - jak robić routing; Migracje danych bez przestoju. Zmiana schematu pod żywym API: dual-write/dual-read, backfill, ekspansja-kontrakcja.

Automatyczne rollbacki

trzeba to powiązać z infrastrukturą, dzięki k8s nie jest już zarezerwowane dla największych, rollback z powodu degradacji jest nieoczywisty ale rollback częściowego deploymentu serwisu który nie zgłasza gotowości jest łatwy.

Observability

Tutaj większość będzie tylko zasygnalizowana, jeden dashboard czyni cuda, dashboardy działają najlepiej gdy pozwalają na szybkie filtrowanie i wizualizację kryteriów, więc lepiej grafana niż homemade, np. 20% faili zapytań to klienci z jednego z pięciu serwerów czy jeden kraj czy jeden dostawca płatności itp.

lista pytań: ile żądań, ile per endpoint, nagłówek, osobne pole.

Traceability

temat zwracania klientowi identyfikatora żądania (np. X-Request-Id, W3C traceparent) — do cytowania supportowi i do śledzenia rozproszonego. To element kontraktu odpowiedzi, a nie tylko logowania, więc nie domyka go Observability ani Bezpieczne logowanie. Naturalnie łączy się z dobrymi komunikatami błędów („podaj ten identyfikator supportowi”) i z impersonacją.

Zapisz się do newslettera szkolenia apiterapia.io

(zero spamu, wypisanie jednym klikiem)

FAQ

Czy będą jakieś zniżki dla uczniów, studentów lub bezrobotnych?

Nie. To specjalistyczne szkolenie kierowane do branży IT.

Czy na Black Friday będzie taniej? Albo na Mikołajki albo w przyszłym roku?

Najniższą możliwą ceną będzie cena w przedsprzedaży. Potem szkolenie podrożeje i nigdy nie stanieje.

Last minute?

Nie. Nic tak nie wkurza, jak informacja, że szkolenie kupione z dużym wyprzedzeniem zostaje przecenione kilka dni przed końcem sprzedaży – to robienie w trąbę najwierniejszych klientów. Serio, nigdy nie będzie taniej.

Kto dokładnie sprzedaje szkolenie?

FTL Software Tomasz Zieliński
Stanisławowska 47
54-611 Wrocław
NIP 899-208-16-48