Adres bazowy

Wszystkie żądania kierowane są do https://api.learn.labendowicz.com. API zwraca i przyjmuje JSON z kluczami w camelCase, a identyfikatory to tekstowe UUID.

Uwierzytelnianie

Sesje oparte są o bezpieczny cookie ustawiany przy logowaniu — nie ma osobnych kluczy API dla zwykłych kont. Zarejestruj się i zaloguj, a przeglądarka/klient HTTP z obsługą cookies (credentials: 'include') będzie automatycznie uwierzytelniony przy kolejnych żądaniach. Dostępne jest też logowanie przez zewnętrznych dostawców (Google, GitHub) oraz osobny mechanizm OAuth do rejestrowania własnych aplikacji klienckich (/oauth/clients, /oauth/authorize, /oauth/token).

Szybki start

# Rejestracja
curl -c cookies.txt -X POST https://api.learn.labendowicz.com/auth/register \
  -H "Content-Type: application/json" \
  -d '{"id":"<uuid>","firstName":"Ada","lastName":"Kowalska","email":"ada@example.com","password":"••••••••"}'

# Odczyt własnych kursów (z zapisanym cookie sesji)
curl -b cookies.txt https://api.learn.labendowicz.com/objects/courses

Kontrola dostępu

Każdy zasób treściowy (kurs, lekcja, artykuł, quiz, zestaw pytań, gra, pytanie, odpowiedź) ma domyślnie widocznego tylko dla właściciela. Widoczność kaskaduje w dół — udostępnienie kursu odsłania też jego lekcje, artykuły, quizy i wszystko pod nimi — ale nigdy w górę i nigdy nie daje prawa zapisu. Edycja, usuwanie, dołączanie/odłączanie elementów i zarządzanie udostępnieniami zawsze wymagają bycia właścicielem. Zasób nieistniejący i zasób, który istnieje, ale nie jest widoczny, zwracają identyczne 404 — nie da się ich odróżnić z zewnątrz.

Na każdym typie zasobu dostępne są: GET .../shares (lista osób z dostępem),POST .../shares (udostępnij, przyjmuje adres email osoby — serwer sam odnajduje jej konto, 404 jeśli żadne konto nie ma takiego adresu) iDELETE .../shares/{userId} (odbierz dostęp) — wszystkie tylko dla właściciela. Nie ma osobnego endpointu do wyszukiwania użytkowników.

Struktura treści

Kurs zawiera lekcje (w ustalonej kolejności). Lekcja może zawierać artykuły, quizy, zestawy pytań i gry. Quiz odwołuje się do jednego lub więcej zestawów pytań (z wagą). Zestaw pytań zawiera pytania, a każde pytanie — odpowiedzi z oznaczeniem poprawności.

Masowe tworzenie treści — /composite

Zbudowanie całego drzewa kursu (lekcje, artykuły, quizy, pytania, odpowiedzi) jednym żądaniem — zamiast dziesiątek osobnych zapytań — umożliwia endpoint /composite, wzorowany na Salesforce Composite API: pojedyncze żądanie z listą operacji, gdzie każda kolejna operacja może odwołać się do wyniku poprzedniej przez@{referenceId.field}.

Odczyt grafu treści — /graphql

Do pobrania pełnego drzewa treści (kurs → lekcje → artykuły/quizy/zestawy pytań → pytania → odpowiedzi) jednym zapytaniem, zamiast wielu żądań REST, służy pojedynczy endpoint/graphql (tylko odczyt).

Wyszukiwanie

GET /search?q= przeszukuje wszystkie typy treści naraz, z uwzględnieniem uprawnień wywołującego, i zapisuje zapytanie w historii wyszukiwań użytkownika.