Backend integrace
Mobilní klient propojený s celým ekosystémem.
Integrujeme mobilní aplikace s ERP, WMS, CRM a dalšími systémy — přes REST, GraphQL, WebSocket i legacy protokoly.
Proč je backend integrace kritická¶
Mobilní aplikace bez backend integrace je izolovaný ostrov. Hodnota vzniká propojením — mobilní klient čte data z ERP, zapisuje do WMS, synchronizuje s CRM, přijímá notifikace z monitoringu. Bez kvalitní integrace je mobilní aplikace jen hezký formulář.
Integrace je také nejčastější zdroj problémů. Pomalé API, nekonzistentní kontrakty, chybějící error handling, security díry v autentizaci. Stavíme integrační vrstvu, která je rychlá, bezpečná a odolná vůči selhání.
REST API¶
Standard pro většinu mobilních integrací. Jednoduchý, předvídatelný, široce podporovaný.
Návrh API pro mobilní klienty¶
Mobilní klient má specifické požadavky, které se liší od webového frontendu:
- Minimální payload: Mobilní síť je pomalá a drahá. Žádné zbytečné fieldy, žádné nested objekty, které klient nepotřebuje. Sparse fieldsets (
?fields=id,name,status). - Pagination: Cursor-based pagination pro stabilní stránkování při změnách dat. Offset-based pro jednodušší případy. Page size optimalizovaný pro mobilní UI (20-50 položek).
- Caching: ETag a Last-Modified hlavičky. Conditional requests (
If-None-Match,If-Modified-Since). 304 Not Modified šetří bandwidth. Cache-Control pro explicitní TTL. - Compression: Gzip/Brotli pro response body. Pro binární data (obrázky, dokumenty) server-side resizing podle požadovaného rozlišení.
API versioning¶
Mobilní klienty nemůžete aktualizovat naráz — uživatel může mít verzi starou měsíce. API musí podporovat backward compatibility:
- URL versioning:
/api/v1/orders,/api/v2/orders. Jasné, explicitní. - Backward-compatible evoluce: Nové fieldy přidáváme, staré neodstraňujeme. Nullable new fields.
- Deprecation policy: Stará verze API funguje minimálně 6 měsíců. Sunset header informuje klienta. Analytika ukazuje, kolik klientů používá starou verzi.
OpenAPI specifikace¶
API definováno v OpenAPI (Swagger). Z jedné specifikace generujeme:
- Klientský kód: OpenAPI Generator pro Swift a Kotlin — type-safe API klient, žádné ruční psaní network vrstvy
- Dokumentaci: Automaticky generovaná, vždy aktuální
- Mock server: Frontend tým vyvíjí proti mock API, nemusí čekat na backend
- Contract testy: Ověření, že implementace odpovídá specifikaci
GraphQL¶
Když mobilní klient potřebuje flexibilní queries — různé obrazovky potřebují různá data ze stejných entit.
Kdy GraphQL místo REST¶
GraphQL řeší dva problémy REST:
- Over-fetching: REST endpoint vrátí celý objekt, klient potřebuje 3 z 20 fieldů. Mobilní síť přenáší zbytečná data.
- Under-fetching: Detail objednávky vyžaduje data z
/orders/{id},/customers/{id},/products/{ids}— tři roundtripy. GraphQL to vyřeší jedním query.
Apollo Client (iOS/Android) s normalized cache. Automatická deduplikace dat v cache — order detail a order list sdílejí stejná data. Cache-first policy pro okamžitou odezvu, network pro aktualizaci.
Subscriptions pro real-time¶
GraphQL Subscriptions přes WebSocket pro real-time data:
- Live tracking (poloha řidiče na mapě)
- Chat zprávy
- Status updates (stav objednávky se změní → UI se okamžitě aktualizuje)
- Collaborative features
WebSocket a real-time komunikace¶
Pro use cases, kde data tečou v reálném čase a polling nestačí.
Architektura real-time komunikace¶
Connection lifecycle: 1. Autentizace přes HTTP (OAuth token) 2. Upgrade na WebSocket s tokenem 3. Heartbeat (ping/pong) pro detekci dropped connections 4. Automatic reconnect s exponential backoff 5. Message queue pro zprávy odeslané během reconnectu
Socket.IO vs native WebSocket: Socket.IO přidává automatic reconnect, room management, fallback na long-polling. Native WebSocket pro lightweight scénáře. Volba podle komplexity.
Use cases¶
- Live tracking: Řidič sdílí GPS polohu každých 5s. Dispečink vidí pozici na mapě v reálném čase. Geofencing pro automatické notifikace.
- Messaging: In-app chat, zákaznická podpora. Typing indicators, read receipts, delivery status.
- Collaborative editing: Více uživatelů edituje stejný dokument. Operational Transform nebo CRDT pro conflict-free sync.
- Live dashboards: KPI metriky aktualizované v reálném čase. Počet objednávek, revenue, alert status.
Autentizace a bezpečnost¶
OAuth 2.0 + PKCE¶
Standard pro mobilní aplikace. Authorization Code flow s PKCE (Proof Key for Code Exchange) — bezpečnější než Implicit flow, vhodný pro public clients (mobilní aplikace nemůžou bezpečně uložit client secret).
Token management: - Access token: krátkodobý (15-60 minut), v paměti - Refresh token: dlouhodobý, v secure storage (Keychain/Keystore) - Token refresh transparentní pro uživatele — žádné opakované přihlášení - Biometrická autentizace pro přístup k refresh tokenu
Ochrana komunikace¶
- TLS 1.3: Veškerá komunikace šifrovaná
- Certificate pinning: Aplikace akceptuje jen certifikáty s konkrétním public key. Ochrana proti man-in-the-middle i při kompromitované CA
- Certificate rotation: Pinning s backup pinem pro plynulou rotaci certifikátů bez update aplikace
- Request signing: HMAC podpis pro kritické operace (platby, schvalování)
Secure storage¶
Tokeny, credentials a citlivá data nikdy v plaintext:
- iOS: Keychain Services s kSecAttrAccessibleWhenUnlockedThisDeviceOnly
- Android: Android Keystore s hardware-backed keys (StrongBox na podporovaných zařízeních)
- Šifrování dat: AES-256 pro lokální databázi s citlivými daty
Error handling a resilience¶
Mobilní síť je nespolehlivá. Integrace musí být odolná:
- Retry policy: Exponential backoff pro transient errors (timeout, 503). Idempotency key pro bezpečné retry mutací.
- Circuit breaker: Po opakovaných selháních circuit breaker zastaví requesty a vrátí cached data. Recovery probe periodicky zkouší, zda je backend zpět.
- Graceful degradation: Pokud je backend nedostupný, aplikace funguje v offline režimu. UI komunikuje stav: „Offline — data mohou být neaktuální.”
- Timeout policy: Connect timeout 10s, read timeout 30s, write timeout 30s. Konfigurovatelné per endpoint.
Technologický stack¶
Networking: URLSession (iOS), OkHttp/Retrofit (Android), Ktor (KMP), Apollo (GraphQL).
Serialization: Codable (Swift), kotlinx.serialization, Protocol Buffers, MessagePack.
Auth: AppAuth (OAuth 2.0 + PKCE), Keychain/Keystore, BiometricPrompt/LocalAuthentication.
Real-time: Socket.IO, Scarlet (Android), Starscream (iOS), native WebSocket.
API design: OpenAPI 3.1, GraphQL SDL, Postman/Insomnia, Pact (contract testing).
Časté otázky
REST pro jednoduché CRUD a stabilní kontrakty. GraphQL pro komplexní UI s mnoha relacemi a variabilními datovými požadavky. WebSocket pro real-time komunikaci. Často kombinujeme — REST pro CRUD, WebSocket pro live updates.
OAuth 2.0 s PKCE flow — standard pro nativní aplikace. Refresh token v secure storage (Keychain/Keystore). Biometrická autentizace pro opakovaný přístup. Certificate pinning proti man-in-the-middle.
Ano. SOAP, XML-RPC, proprietární protokoly. Stavíme API gateway nebo middleware vrstvu, která starší systémy obalí moderním API. Mobilní klient komunikuje jen s čistým REST/GraphQL.
URL versioning (/v1/, /v2/) pro major changes. Backward-compatible evoluce pro minor changes. Deprecation policy: stará verze funguje minimálně 6 měsíců po release nové. Feature flags pro postupný rollout.