SelSup Developers

Principaux aspects de l'intégration · Les guides

Je commence

L'authentification, la première demande, les erreurs localisées, la pagination et un déploiement sécurisé de la production.

4 sectionsGuide du développeur

Commencez par un jeton dédié et une opération de lecture. Ajoutez des mutations seulement après que le comportement de manipulation et de réessayer error aient été testés.

Des développeurs et intégrateurs de backend

01

L'authentification et le stockage des jetons

Envoyez le jeton API directement dans l'en-tête Authorization sans préfixe Bearer.

Créer un jeton séparé pour chaque intégration. Vous pouvez ensuite révoquer une connexion sans interrompre les autres et accorder uniquement les autorisations dont elle a besoin.

Gardez le jeton dans des secrets du côté du serveur. Ne jamais l'envoyer dans le navigateur JavaScript, une application mobile, une URL, des journaux ou des analyses.

!
Ce n' est pas OAuth

Ne pas ajouter Bearer ou Basic. La valeur Authorization est le jeton SelSup lui-même.

Première demande · cURL
curl --request GET 'https://api.selsup.ru/api/brand/find?limit=50&page=1' \
  --header 'Authorization: YOUR_API_TOKEN'

02

Erreurs et localisation du message

Branchez sur le champ stable error et utilisez localMessage uniquement pour la sortie lisible par l'homme.

Une application error contient normalement error, localMessage et params. Le serveur traduit XPRO TECTED4X en utilisant le champ lang de l'utilisateur qui possède le jeton.

Le langage de documentation et Accept-Language ne modifient pas la localisation error. Ne jamais comparer localMessage dans le code ou le maintenir comme un état de machine.

i
Contextes de diagnostic

Enregistrez l'état de HTTP, error, params, le temps de la demande et votre identifiant de corrélation.

Application du contrat error · JSON
{
  "error": "brand_already_exists",
  "localMessage": "Brand Base already exists",
  "params": {
    "name": "Base"
  }
}

03

Paginage de grandes collections

Utilisez un tri stable et arrêtez lorsque la page suivante est fausse ou que la page retournée est plus courte que la limite.

count=true peut déclencher une requête de comptage supplémentaire. Envoyez-la sur la première demande seulement lorsque le total est réellement nécessaire.

Les données peuvent changer entre les pages. Pour une synchronisation récurrente, trier par un identifiant immutable et les changements de processus dans un flux incrémentiel séparé.

Boucle de page · JavaScript
let page = 1;
let hasNextPage = true;

while (hasNextPage) {
  const url = new URL('https://api.selsup.ru/api/brand/find');
  url.searchParams.set('limit', '500');
  url.searchParams.set('page', String(page));
  url.searchParams.set('sortBy', 'BRANDID');
  url.searchParams.set('ascending', 'true');

  const response = await fetch(url, {
    headers: { Authorization: process.env.SELSUP_API_TOKEN }
  });
  if (!response.ok) throw await response.json();

  const result = await response.json();
  await savePage(result.rows);
  hasNextPage = result.hasNextPage;
  page += 1;
}

04

Liste de contrôle de la production

  1. 1

    Lire et écrire séparément

    Valider d'abord les demandes GET. Utilisez des entités de test et une étape de confirmation explicite pour les mutations.

  2. 2

    Configurer les délais et les retries

    Une POST sans votre clé d'idempotence peut créer un duplicate.

  3. 3

    Limiter la concurrentialité

    Respectez les limites des points d'extrémité et utilisez une file d'attente avec un back-off exponentiel et un petit jitter aléatoire.

  4. 4

    Concilier les résultats

    Après une synchronisation en masse, comparez les nombres et les identifiants d'échantillon, puis déplacez les divergences dans une file d'attente séparée.

!
Données de compte en direct

L'essai envoie la demande au compte du propriétaire du jeton. La documentation ajoute une confirmation pour écrites, mais vous devriez toujours utiliser les dossiers de test.