Crei uno slug URL dal nome di un branch Git
Converta un nome di branch Git come feature/add-user-login in uno slug conciso e adatto agli URL, senza includere nel risultato il prefisso del flusso di lavoro.
Esegui gratis nel browser
La capacità riconosce il primo segmento del percorso come tipo di branch, conserva tutto ciò che segue come parte descrittiva e lo normalizza in parole minuscole separate da trattini. Il processo è deterministico, non richiede la rete e segnala chiaramente i branch che hanno un prefisso ma nessuna descrizione utilizzabile.
Separi i metadati del flusso dalla descrizione utile
I team Git iniziano spesso i nomi dei branch con un tipo di flusso come feature, fix, chore, release o docs. Il primo segmento aiuta persone e automazioni a capire lo scopo del branch, ma di solito è superfluo in un URL pubblico. Questa capacità interpreta il testo prima della prima barra come prefisso del tipo e deriva lo slug soltanto da ciò che segue. Per esempio, feature/add-user-login diventa add-user-login, mentre fix/checkout/payment-timeout produce checkout-payment-timeout. I percorsi descrittivi annidati vengono conservati come parole anziché eliminati, così il Suo team può mantenere ambiti significativi senza esporre barre nell’URL finale. L’eventuale prefisso refs/heads/, restituito spesso dagli strumenti Git e dai sistemi di integrazione continua, viene rimosso prima dell’analisi. L’operazione non utilizza un elenco chiuso di tipi ammessi. Qualsiasi primo segmento non vuoto può fungere da prefisso: la stessa regola funziona quindi con convenzioni interne come spike, experiment, maintenance o con il flusso di ticket definito dalla Sua organizzazione.
Comprenda esattamente come viene normalizzato lo slug
Dopo aver selezionato la parte descrittiva, l’algoritmo applica una sequenza stabile di trasformazioni. Rimuove gli spazi esterni, normalizza i caratteri latini accentati, converte le lettere in minuscolo, sostituisce ogni gruppo di caratteri diversi da lettere ASCII e cifre con un trattino ed elimina i trattini iniziali e finali. Barre, spazi, trattini bassi, punteggiatura e separatori ripetuti convergono quindi nella stessa forma sicura per gli URL. Un branch come feature/Account Settings_v2 diventa account-settings-v2. Il risultato è volutamente prevedibile: non intervengono modelli linguistici, dizionari, richieste di rete, valori casuali, date o stato del repository. La funzione non inventa parole e non tenta di interpretare gli identificatori dei ticket. I numeri presenti nella descrizione rimangono, caratteristica utile per nomi come fix/PROJ-482-login-loop. Poiché la normalizzazione può eliminare simboli e scritture non supportate, la capacità verifica anche che rimanga almeno una lettera o cifra utilizzabile. Se la descrizione contiene soltanto punteggiatura o caratteri che non possono formare lo slug ASCII supportato, viene restituito un errore di input invece di un valore vuoto silenzioso.
Utilizzi il risultato in sicurezza per pubblicare e automatizzare
L’oggetto restituito contiene un solo campo, slug, quindi può alimentare direttamente un’anteprima della documentazione, l’URL di un ambiente temporaneo, un percorso per le note di rilascio, una pagina del registro modifiche o un flusso di pubblicazione delle pull request. Convalidi il risultato prima di riservare una rotta se la destinazione applica regole aggiuntive, come lunghezza massima, percorsi protetti o unicità. Questa capacità non interroga il router, il provider di hosting, il servizio Git o il database dei contenuti e non può sapere se lo slug è già occupato. Non verifica neppure che la stringa fornita rappresenti un branch esistente nel repository; applica solo la convenzione documentata. Vengono rifiutati i nomi senza barra, quelli che terminano subito dopo il prefisso e le descrizioni normalizzate in uno slug vuoto. Questo comportamento rigoroso evita che una sorgente non valida pubblichi per errore su una rotta vuota o generica. Nell’automazione tramite API, ogni richiesta usa il prezzo base pubblicato di $0.002. La stessa trasformazione deterministica è disponibile nel browser per rapide conversioni singole.
Casi d'uso
Assegni un nome a una distribuzione di anteprima
Trasformi un branch di funzionalità in un percorso leggibile per un ambiente di revisione isolato senza il prefisso del flusso.
Crei un percorso per le note di rilascio
Derivi un segmento URL coerente dalla descrizione di un branch release o fix per generare le note.
Uniformi i link delle pull request
Normalizzi descrizioni annidate dei branch in link stabili e minuscoli per documentazione e automazioni.
Domande frequenti
Che cosa viene considerato prefisso del tipo?
Il primo segmento non vuoto prima della prima barra. Può essere feature, fix, chore o qualsiasi tipo adottato dal Suo team.
Come vengono trattati i percorsi annidati?
Tutti i segmenti dopo la prima barra appartengono alla descrizione e i loro separatori diventano trattini nello slug.
Posso fornire un nome refs/heads completo?
Sì. L’inizio refs/heads/ viene rimosso prima di identificare il prefisso del tipo e la parte descrittiva.
Perché un branch senza barra genera un errore?
La capacità richiede un prefisso del tipo e una parte descrittiva distinti, quindi un unico nome non separato è ambiguo.
Viene controllata l’esistenza del branch?
No. Viene eseguita solo un’elaborazione deterministica del testo, senza collegarsi a repository o servizi di hosting Git.
Quanto costa una richiesta API?
Ogni richiesta API usa il prezzo base pubblicato di $0.002; la versione per browser esegue localmente la stessa trasformazione.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/slug-from-git-branch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"branch":"feature/add-user-login"}'const res = await fetch("https://api.kit.forhosting.com/dev/slug-from-git-branch", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"branch": "feature/add-user-login"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/slug-from-git-branch",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"branch": "feature/add-user-login"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/slug-from-git-branch", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"branch":"feature/add-user-login"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"branch":"feature/add-user-login"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/slug-from-git-branch", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"branch": "feature/add-user-login"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.slug_from_git_branch",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |