ForHosting KIT · Outils pour développeurs

Résolvez les collisions de slug avec un suffixe numérique

Le résolveur de collisions compare le slug exact que vous souhaitez aux slugs déjà occupés.

● BetaGratuit · dans votre navigateur
Utilisez-le depuis WebAPIE-mailTelegramApp bientôt

Si la valeur est disponible, il la renvoie sans modification. Si elle est prise, il teste des variantes numériques comme -2, -3 et les suivantes jusqu’à trouver la première place libre. Ce composant simple et déterministe convient aux systèmes éditoriaux, aux imports, aux générateurs de documentation et à tout processus devant attribuer une URL unique sans écraser accidentellement un contenu existant.

Préservez le slug souhaité chaque fois que possible

Un bon résolveur de collisions ne doit modifier une URL que lorsque cela est nécessaire. Envoyez la valeur proposée dans desired_slug et fournissez toutes les valeurs occupées dans used_slugs. Les comparaisons sont exactes et sensibles à la casse. Si la proposition ne figure pas dans l’ensemble occupé, le résultat contient le slug d’origine et signale qu’aucune collision n’a eu lieu. L’outil ne convertit pas en minuscules, ne supprime pas les espaces, ne translittère pas et ne remplace pas la ponctuation : ces transformations relèvent d’une étape de création de slug préalable. La séparation de ces responsabilités évite les changements d’URL inattendus et rend le résultat reproductible dans les builds, migrations et tests. Un slug souhaité vide est refusé plutôt que transformé en suffixe arbitraire, car une telle sortie masquerait un titre absent ou une correspondance défaillante en amont. Les doublons de la liste n’influencent pas la réponse : ils sont naturellement regroupés pendant la recherche.

Sélectionnez le premier suffixe numérique disponible

Lorsque le slug exact est occupé, la sélection commence à 2, conformément à la convention courante selon laquelle le chemin sans suffixe représente le premier élément et le suivant reçoit -2. Le résolveur vérifie ensuite les candidats dans l’ordre croissant : souhaité-2, souhaité-3, souhaité-4, puis la suite. Il s’arrête au premier candidat absent de l’ensemble fourni. Les intervalles libres sont donc réutilisés de façon prévisible. Par exemple, si report, report-2 et report-4 sont occupés, le résultat est report-3. La comparaison porte sur les chaînes entières : annual-report et report-old ne créent donc aucune collision. Une terminaison numérique existante est considérée comme une partie littérale de la valeur, sans interprétation ni réécriture ; si release-2 est demandé et occupé, le premier candidat sera release-2-2. Ce comportement évite de deviner l’intention et garantit que des entrées identiques donnent toujours la même sortie, indépendamment d’une base de données, d’une horloge, du hasard, des paramètres régionaux ou de l’ordre d’exécution.

Intégrez le résultat sans risque à vos publications

Cette capacité intervient lorsque votre application connaît déjà les slugs réservés. Rassemblez ces valeurs, transmettez-les avec le slug souhaité et utilisez le résultat pour le nouvel enregistrement. La réponse précise également si une collision a eu lieu et, pour un résultat suffixé, le numéro choisi. Ces informations peuvent alimenter des journaux, des aperçus ou un message expliquant pourquoi l’URL diffère de la proposition initiale. L’opération ne réserve pas la valeur renvoyée : les systèmes acceptant des écritures simultanées doivent maintenir une contrainte d’unicité et réessayer avec une liste actualisée si un autre processus prend le même slug. Pour les imports par lots, ajoutez chaque attribution réussie à votre ensemble local avant de traiter la ligne suivante. La comparaison étant exacte, appliquez auparavant votre propre politique d’URL de manière cohérente : utilisez un générateur de slugs si vous devez normaliser la casse, Unicode, les espaces ou la ponctuation. Chaque requête API coûte $0.002, et la même logique déterministe s’exécute dans le navigateur pour les contrôles interactifs.

Publiez une page sans en remplacer une autre

Conservez le chemin préféré de l’éditeur s’il est libre, ou attribuez la première variante numérotée disponible s’il est déjà pris.

Importez des enregistrements avec des URL stables

Résolvez chaque slug préparé face aux chemins existants et nouvellement attribués afin de suffixer les titres répétés de façon déterministe.

Générez les chemins d’une documentation

Empêchez des titres ou pages générées en double de revendiquer le même chemin, tout en conservant des URL lisibles et prévisibles.

Que se passe-t-il si le slug souhaité est libre ?

Il est renvoyé sans modification et collision vaut false.

Quel suffixe est testé en premier ?

Le résolveur commence par -2, puis vérifie -3, -4 et les valeurs supérieures jusqu’à trouver la première disponible.

L’outil transforme-t-il du texte en slug d’URL ?

Non. Il compare et prolonge la valeur exacte reçue. Utilisez d’abord un générateur si vous devez normaliser la casse, les espaces, la ponctuation ou Unicode.

Les comparaisons sont-elles sensibles à la casse ?

Oui. Product et Product sont identiques, tandis que Product et product sont considérés comme deux chaînes différentes.

La capacité réserve-t-elle le slug renvoyé ?

Non. Elle calcule un candidat à partir de la liste fournie. Votre stockage doit imposer l’unicité lors de l’écriture.

Combien coûte une requête API ?

Chaque requête coûte $0.002.

Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.

POSThttps://api.kit.forhosting.com/dev/slug-collision-resolve

Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.

curl -X POST https://api.kit.forhosting.com/dev/slug-collision-resolve \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"desired_slug":"product-guide","used_slugs":["product-guide","product-guide-2"]}'
{
  "desired_slug": "product-guide",
  "used_slugs": [
    "product-guide",
    "product-guide-2"
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.slug_collision_resolve",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.

par requête$0.002

Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.

max_used_slugs10000
max_slug_chars10000
HTTPCodeSignification
401unauthorizedClé API absente ou invalide : vérifiez l’en-tête Authorization.
402insufficient_balanceSolde insuffisant : rechargez votre compte pour lancer cette tâche.
404unknown_typeType de tâche inconnu : vérifiez le champ type de votre requête.
429rate_limitedTrop de requêtes : ralentissez la cadence, puis réessayez.

Consulter la documentation complète du KIT →