Terminalden URL kısaltmak tek satırdır:
curl -s -X POST https://api.elido.app/v1/links \
-H "Authorization: Bearer $ELIDO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"destination_url":"https://example.com/spring-sale"}' | jq -r .short_url
Bu yalnızca https://s.elido.me/ab12cd yazdırır, başka hiçbir şey değil. curl isteği yapar, jq JSON'dan tek bir alanı çeker ve -r çevreleyen tırnakları atar; böylece değer doğrudan panoya ya da başka bir komuta gidebilir.
Yazının geri kalanı, o satırı gerçekten kullanacağınız bir şeye dönüştüren dört yükseltmedir: bir kabuk işlevi, dürüst çıkış kodları, sınırlı eşzamanlılıkla toplu iş ve pano. Kabukta değil bir dilde yazmayı tercih ederseniz aynı çağrı Python, Go ve altı başka çalışma zamanında da var.
Onu Bir Komut Yapın
Takma ad bağımsız değişken alamaz, bu yüzden bir işlev kullanın. .zshrc ya da .bashrc içinde:
short() {
[ -z "$1" ] && { echo "usage: short <url> [slug]" >&2; return 2; }
local body
body=$(jq -n --arg url "$1" --arg slug "${2:-}" \
'{destination_url: $url} + (if $slug == "" then {} else {slug: $slug} end)')
curl -s --fail-with-body -X POST https://api.elido.app/v1/links \
-H "Authorization: Bearer $ELIDO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(printf %s "$1" | shasum -a 256 | cut -d' ' -f1)" \
-d "$body" | jq -r .short_url
}
Orada üç bilinçli seçim var.
JSON'u dize enterpolasyonu yerine jq -n --arg ile kurmak, tırnak ya da ve işareti içeren bir hedefin isteği bozmaması demektir. Bu, parametreli SQL'in kabuktaki karşılığıdır ve onu atlamak aynı hata sınıfıdır.
--fail-with-body, insanların kaçırdığı bayraktır. Varsayılan olarak curl tamamlanan her alışveriş için 0 ile çıkar; bu yüzden bir 401 boru hattından akar, jq null yazdırır ve bir betik, bağlantının olması gereken yerde null ile devam eder. Bununla bir 4xx sıfırdan farklı çıkış durumu verir ve okumanız için hata gövdesini yine alırsınız.
URL'den türetilen Idempotency-Key, aynı komutu iki kez çalıştırmanın iki bağlantı oluşturmak yerine aynı bağlantıyı döndürmesi demektir. Bu, aşağıdaki toplu iş bölümünde daha önemlidir ve gerekçesi hız sınırları ve idempotency yazısındadır.
Anahtar mı lazım? Ücretsiz planda bir tane oluşturun, kabuk profilinizden dışa aktarın ve işlev bir sonraki yeni terminalde çalışır.
Doğrudan Panoya
Onu bitmiş hissettiren son birkaç karakter:
short "https://example.com/spring-sale" | tee /dev/tty | pbcopy # macOS
short "https://example.com/spring-sale" | tee /dev/tty | xclip -sel c # Linux, X11
short "https://example.com/spring-sale" | tee /dev/tty | wl-copy # Wayland
short "https://example.com/spring-sale" | tee /dev/tty | clip.exe # WSL
tee /dev/tty bağlantıyı aynı anda yazdırır ve kopyalar; bu, körü körüne kopyalayıp ummaktan iyidir.
429 Biriktirmeden Toplu İş
Her satırda bir URL olan bir dosya, sekizer sekizer kısaltılır:
export -f short # bash; zsh users call the script directly
xargs -P 8 -I{} bash -c 'short "{}"' < urls.txt > short-urls.txt
-P 8 hız sınırı stratejisinin tamamıdır: dosya elli satır da olsa elli bin de olsa uçuşta sekiz istek. Onsuz xargs işlemleri başlatabildiği kadar hızlı çalıştırır ve API çoğuna 429 ile yanıt verir.
Bunu gerçek bir dosyaya yöneltmeden önce bilmeye değer iki uyarı. xargs -P çıktıyı iç içe geçirir, bu yüzden satırlar sırasız gelebilir; girdi ile çıktı arasındaki eşleme önemliyse ikisini de yazdırın:
xargs -P 8 -I{} bash -c 'printf "%s\t%s\n" "{}" "$(short "{}")"' < urls.txt > mapping.tsv
Ve boşluk ya da tırnak içeren bir URL, kaçışsız -I{} ile hayatta kalamaz. Kullanıcıdan gelen her şey için boş karakterle ayrılmış girdi dosyalı xargs -0 güvenli sürümdür. O noktada Python'da gerçek bir betik, tırnaklamayı doğru yapmaktan genellikle daha az iştir.
Anahtarı Geçmişinizin Dışında Tutun
ELIDO_API_KEY=abc123 short <url> anahtarı ~/.zsh_history içine ve makinedeki diğer her hesabın ps ile okuyabildiği işlem listesine koyar.
Bunun yerine onu kabuk profilinizden dışa aktarın ya da daha iyisi, kabuk başlangıcında bir gizli depodan çekin:
export ELIDO_API_KEY="$(security find-generic-password -s elido -w)" # macOS Keychain
export ELIDO_API_KEY="$(pass show elido/api-key)" # pass
Bir anahtarı döndürmek o zaman üç makinedeki nokta dosyalarını taramak yerine tek bir girdiyi güncellemek demektir. Aynı ilke zamanladığınız her betiğin sunucu tarafında da geçerlidir ve bağlantı olayları için webhook'lar, başka bir anahtarın bir yerde yaşamasına gerek kalmadan veri geri almanın kalıbıdır.
Terminalin Doğru Yer Olduğu Durumlar
URL'ler zaten bir dosyadaysa, zaten bir kabuktaysanız ya da kısaltma daha büyük bir betiğin bir adımıysa doğrudur: bir dağıtım bağlantısı üreten bir sürüm süreci, bir önizleme dağıtımı URL'sini kısaltan bir CI işi, bir değişiklik günlüğü girdisi için bağlantı üreten bir git kancası.
Bir kampanyayı yönetmek için yanlış yerdir. Klasörler, etiketler ve yerleşimler arasında tıklama hacmini karşılaştırmak bir pano gerektirir; bunu bir liste uç noktasına jq sorgularıyla yapmaya çalışmak kısayol değil, bir projedir. Geliştiriciler için çözümler API'nin oluşturmanın ötesinde neler sunduğunu, API ve SDK'lar ise bir kabuk betiği yetmez hale geldiğinde türlendirilmiş istemcileri kapsar.
Köşe Taşı Serisini Okuyun
Bu yazı mühendislik kümesinde yer alır. Uç nokta biçimi için ücretsiz URL kısaltıcı API rehberiyle başlayın, ardından hız sınırları ve idempotency yazısına geçin. Canlı başvuru API belgeleridir.
Blogda İlgili Yazılar
Sıkça sorulan sorular
Komut satırından URL nasıl kısaltılır?
Hedefi curl ile kısaltıcının API'sine POST edin ve yanıtı jq'dan geçirip kısa bağlantıyı ayıklayın. Tek satır, curl ve jq dışında kurulum yok ve API anahtarı bir ortam değişkeninden gelir, böylece kabuk geçmişinizde hiç görünmez.
Bunu yeniden kullanılabilir bir komut nasıl yaparım?
curl çağrısını .zshrc ya da .bashrc içinde, URL'yi ilk bağımsız değişken olarak alan bir kabuk işlevine sarın. Profili yeniden yükleyin ve short https://example.com her dizinden çalışır. Burada takma ad yerine işlev daha iyidir, çünkü bir bağımsız değişken kabul etmesi gerekir.
API 401 döndürdüğünde curl hattım neden başarılı görünüyor?
Çünkü curl, hata yanıtları dahil, tamamlanan her HTTP alışverişi için 0 ile çıkar. --fail-with-body ekleyin; böylece bir 4xx ya da 5xx sıfırdan farklı çıkış kodu verir ve gövde yine yazdırılır; yoksa betik kısa bağlantının olması gereken yerde bir hata nesnesiyle devam eder.
Kabuktan URL'lerden oluşan bir dosyanın tamamı nasıl kısaltılır?
Dosyayı xargs'a verin; aynı anda sekiz istek çalıştırmak için -P 8, her satırı yerine koymak için -I{} kullanın. Bu, dosya uzunluğundan bağımsız olarak eşzamanlılığı sekizle sınırlar; büyük bir toplu işi 429 biriktirmek yerine API hız sınırının altında tutan budur.
Kısa bağlantıyı doğrudan panoya nasıl kopyalarım?
Çıktıyı macOS'ta pbcopy, X11'li Linux'ta xclip -selection clipboard, Wayland'da wl-copy ya da WSL altında clip.exe'ye aktarın. Bir kabuk işleviyle birleştiğinde tek komut, yapıştırmaya hazır bir bağlantı üretir.
CLI iş akışında API anahtarı nerede durmalı?
Kabuk profilinizden dışa aktarılan bir ortam değişkeninde ya da daha iyisi, kabuk başlangıcında bir parola yöneticisinden ya da gizli depodan çekilerek. Anahtarı satır içinde yazmak onu geçmiş dosyanıza ve makinedeki diğer her kullanıcının okuyabildiği işlem listesine koyar.
Elido'yu deneyin
Bir URL yapıştırın, çalışan bir kısa bağlantı alın
Kayıt gerekmez. Bağlantı 30 gün boyunca yaşar. Sonsuza kadar saklamak için kaydolun.
Kayıt gerekmez. Ücretsiz kaydolun, ayda 50 bağlantı oluşturun.