Mobile API
Documentation complète de l'API mobile YaniPay : architecture, configuration, authentification et communication avec le backend.
Overview
L'application mobile YaniPay communique avec le backend via une API REST dédiée. Tous les endpoints mobiles sont préfixés par /api/v1/mobile/ et optimisés pour les contraintes réseau mobiles (latence, offline, battery).
14 Services Connectés
Technologies Intégrées
L'API mobile YaniPay intègre nativement les deux technologies fondamentales de la plateforme pour offrir une expérience intelligente et sécurisée :
Y.A.N.I. API Endpoints
Endpoints dédiés pour les recommandations IA, la détection de fraude en temps réel et les notifications intelligentes personnalisées.
/api/v1/mobile/ai/*YaniChain API Endpoints
Endpoints DeFi pour le staking YANI, le swap de tokens, le suivi des rewards et les transactions blockchain.
/api/v1/mobile/defi/*Synergie IA + Blockchain
Pourquoi une API Mobile dédiée ?
Dans l'écosystème YaniPay, l'API mobile n'est pas une simple adaptation de l'API web. Elle a été conçue spécifiquement pour répondre aux contraintes uniques des applications mobiles fintech :
Latence réseau
Optimisation des payloads et compression GZIP pour réduire le temps de réponse sur réseaux 3G/4G/5G.
Mode Offline
File d'attente locale avec synchronisation différée pour les transactions critiques sans réseau.
Batterie
Regroupement des requêtes et polling intelligent pour minimiser la consommation énergétique.
Sécurité Device
Attestation device, certificate pinning et stockage sécurisé via Keychain/Keystore.
Différence avec l'API Web
/api/v1/) est conçue pour des requêtes serveur-à-serveur avec des payloads complets. L'API mobile (/api/v1/mobile/) optimise les réponses avec pagination, champs sélectifs et compression pour économiser la bande passante mobile.Cas d'utilisation
Découvrez comment l'API mobile YaniPay répond aux besoins concrets de différents utilisateurs :
Thomas
Étudiant
Paiement hors connexion
Thomas est dans le métro sans réseau 4G. Il doit payer son café à la sortie. L'API mobile de YaniPay utilise un système de queue offline qui stocke la transaction localement et la synchronise automatiquement dès que le réseau est disponible.
Marie
Commerçante
Intégration caisse
Marie utilise l'app YaniPay Business sur sa tablette. L'API mobile optimise les requêtes pour minimiser la latence lors de l'encaissement. Le retry automatique garantit que chaque transaction aboutit même en cas de connexion instable.
Lucas
Voyageur fréquent
Multi-devices
Lucas utilise YaniPay sur son iPhone et son iPad Pro. L'API mobile gère la synchronisation temps réel entre ses appareils : quand il reçoit un paiement sur un device, la notification push et le solde se mettent à jour instantanément sur tous ses appareils.
Sophie
Développeuse
Debug et monitoring
Sophie intègre l'API YaniPay dans une app tierce. Grâce aux headers X-Request-ID et aux logs structurés, elle peut tracer chaque requête de bout en bout et identifier rapidement les problèmes de performance.
Architecture
L'architecture client-serveur mobile suit un pattern service layer avec un client HTTP centralisé. Voici une vue d'ensemble du flux de données entre l'application et le backend :
HTTP Client
- Axios avec interceptors
- Retry automatique
- Token refresh
- Request queuing
Services Layer
- 14 services spécialisés
- Type-safe avec TypeScript
- Error handling unifié
- Caching intelligent
State Management
- Zustand stores
- React Query
- Offline persistence
- Optimistic updates
Security
- expo-secure-store
- Biometric auth
- Certificate pinning
- Request signing
Flux de requête
Voici le cycle de vie complet d'une requête API, depuis l'action utilisateur jusqu'à la réponse :
Gestion des erreurs
Configuration
Variables d'environnement requises pour la connexion API.
# API Backend URL
EXPO_PUBLIC_API_URL=https://api.yanipay.com/api/v1/mobile
# Development (simulateur)
EXPO_PUBLIC_API_URL=http://localhost:3000/api/v1/mobile
# Development VPS OVH (serveur dev distant — device physique ou CI)
EXPO_PUBLIC_API_URL=http://51.77.222.1:3000/api/v1/mobile
# Development (device physique - utiliser IP locale)
EXPO_PUBLIC_API_URL=http://192.168.1.100:3000/api/v1/mobile
# Staging
EXPO_PUBLIC_API_URL=https://staging-api.yanipay.com/api/v1/mobileVPS Dev OVH — Base URL distante
En environnement de développement avec device physique ou CI, la base URL pointe vers le VPS OVH : http://51.77.222.1:3000/api/v1/mobile. Ce serveur fait tourner Next.js dans Docker sur Ubuntu 25.04 (6 vCores / 12 GB RAM).
HTTP Client
Le client HTTP centralisé gère toutes les communications avec le backend.
import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
import * as SecureStore from 'expo-secure-store';
// Configuration de base
const API_URL = process.env.EXPO_PUBLIC_API_URL || 'http://localhost:3000/api/v1/mobile';
// Création de l'instance Axios
export const apiClient: AxiosInstance = axios.create({
baseURL: API_URL,
timeout: 30000, // 30 seconds
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Client-Type': 'mobile',
'X-Client-Version': '1.0.0',
},
});
// Request interceptor - Ajoute le token d'authentification
apiClient.interceptors.request.use(
async (config) => {
const token = await SecureStore.getItemAsync('accessToken');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
// Ajoute l'ID unique du device
const deviceId = await SecureStore.getItemAsync('deviceId');
if (deviceId) {
config.headers['X-Device-ID'] = deviceId;
}
return config;
},
(error) => Promise.reject(error)
);
// Response interceptor - Gère le refresh token
apiClient.interceptors.response.use(
(response) => response,
async (error) => {
const originalRequest = error.config;
// Token expiré - tentative de refresh
if (error.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
try {
const refreshToken = await SecureStore.getItemAsync('refreshToken');
const { data } = await axios.post(`${API_URL}/auth/refresh`, {
refreshToken,
});
await SecureStore.setItemAsync('accessToken', data.accessToken);
originalRequest.headers.Authorization = `Bearer ${data.accessToken}`;
return apiClient(originalRequest);
} catch (refreshError) {
// Refresh failed - logout user
await SecureStore.deleteItemAsync('accessToken');
await SecureStore.deleteItemAsync('refreshToken');
// Redirect to login
}
}
return Promise.reject(error);
}
);Request Headers
Headers standards envoyés avec chaque requête.
| Header | Description | Exemple |
|---|---|---|
| Authorization | JWT Bearer token | Bearer eyJhbGc... |
| X-Client-Type | Type de client | mobile |
| X-Client-Version | Version de l'app | 1.0.0 |
| X-Device-ID | Identifiant unique device | uuid-v4... |
| X-Platform | Plateforme (iOS/Android) | ios | android |
Retry Policy
Politique de retry automatique pour les requêtes échouées.
// Configuration du retry automatique
const retryConfig = {
// Nombre maximum de tentatives
maxRetries: 3,
// Délai initial entre les tentatives (ms)
initialDelay: 1000,
// Multiplicateur pour exponential backoff
backoffMultiplier: 2,
// Délai maximum entre les tentatives (ms)
maxDelay: 10000,
// Codes HTTP à retry
retryStatusCodes: [408, 429, 500, 502, 503, 504],
// Méthodes HTTP idempotentes (safe to retry)
retryMethods: ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE'],
};
// Implémentation avec axios-retry
import axiosRetry from 'axios-retry';
axiosRetry(apiClient, {
retries: retryConfig.maxRetries,
retryDelay: (retryCount) => {
const delay = retryConfig.initialDelay * Math.pow(retryConfig.backoffMultiplier, retryCount - 1);
return Math.min(delay, retryConfig.maxDelay);
},
retryCondition: (error) => {
return (
axiosRetry.isNetworkOrIdempotentRequestError(error) ||
retryConfig.retryStatusCodes.includes(error.response?.status)
);
},
});Timeout Configuration
Timeout par défaut: 30 secondes. Pour les uploads de fichiers (KYC), le timeout est étendu à 120 secondes.
API Mobile Sub-sections
Authentication
Flow d'auth, tokens, biometric
Endpoints
Référence complète des API
Offline Sync
Queue, conflits, persistence
Error Handling
Codes d'erreur et gestion
Loyalty API
NEWProgrammes de fidélité, cartes, points
Technologies
Y.A.N.I. (IA) et YaniChain (Blockchain)
Références & Resources
Sources et documentation officielle pour approfondir l'API mobile :
📚 Documentation officielle
- Axios Documentation — Client HTTP utilisé pour les requêtes API
- Expo SecureStore — Stockage sécurisé des tokens sur device
- React Native Networking — Guide officiel sur les requêtes réseau
🔒 Sécurité & Best Practices
- OWASP Mobile Top 10 — Risques de sécurité mobile les plus critiques
- JWT.io Introduction — Comprendre les JSON Web Tokens
- OWASP REST Security Cheat Sheet — Bonnes pratiques de sécurité API REST
⚡ Performance & Optimisation
- TanStack Query (React Query) — Gestion du cache et des états serveur
- Zustand Documentation — State management minimaliste et performant
- axios-retry — Plugin de retry automatique pour Axios
Pour les développeurs avancés
__DEV__ && console.log(config) dans vos intercepteurs. En production, utilisez un service de monitoring comme Sentry ou Datadog pour tracer les erreurs réseau.Last updated: 2026-04-09