Dla deweloperów
learn ma w pełni udokumentowane REST API oraz endpoint GraphQL do odczytu. Ten sam interfejs napędza oficjalną aplikację, więc nie ma „ukrytych" możliwości — wszystko, co widać w aplikacji, jest też dostępne przez API.
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/coursesKontrola 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.