Geliştirici belgeleri

uhm.co API'si: diğer yazılımlardan bağlantı oluşturma ve yönetme, her biri için tıklama istatistikleriyle birlikte.

Kimlik doğrulama

Bir API anahtarı, Pro ve üzeri planlarda kullanılabilen kontrol panelinin API anahtarları ekranından oluşturulur. Her anahtar, oluşturulduğunda kendisine verilen yetkileri taşır. Bir istek, anahtarı taşıyıcı kimlik bilgisi olarak içeren bir Authorization başlığıyla kimlik doğrular.

Authorization: Bearer uhm_live_...

Yetkiler

  • links:read bağlantıları listeler ve okur.
  • links:write bağlantı oluşturur, günceller ve siler.
  • analytics:read tıklama istatistiklerini okur.

/v1/me hiçbir yetki gerektirmez. Bir anahtarın kendini tanımlayamaması, bir yanlış yapılandırmanın bir entegrasyonun kendi ayarlar ekranından teşhis edilmesini imkânsız kılar.

Tasarım gereği yalnızca sunucu tarafında

Bu API, kasıtlı olarak hiçbir CORS başlığı göndermez ve bu bildirilmesi gereken bir eksiklik değildir. Bir anahtar taşıyıcı bir kimlik bilgisidir: onu elinde bulunduran, tüm çalışma alanı için bağlantı oluşturabilir ve analitik verilerini okuyabilir. Bir anahtarın tarayıcı JavaScript'ine yerleştirilmesi, sayfayı yükleyen her ziyaretçiye o anahtarı yayınlamak anlamına gelir. Eksik CORS başlıkları, bu API'nin bir tarayıcı tarafından çağrılmasını yalnızca tavsiye etmek yerine fiilen imkânsız kılar. Her istek bir sunucudan gönderilmelidir, hiçbir zaman bir ziyaretçinin tarayıcısında çalışan bir koddan değil.

Yinelemeden yayınlama

reference, çağıran taraf tarafından verilen, en fazla 255 karakterlik, bağlantının çağıranın kendi tarafında neyi temsil ettiğini adlandıran bir tanımlayıcıdır; örneğin bir CMS yazısı. Çalışma alanında zaten var olan bir reference ile bağlantı oluşturmak, 200 durum koduyla kayıtlı bağlantıyı döndürür ve yeni bir şey oluşturmaz. Gerçek bir oluşturma 201 döner; böylece bir entegrasyon ikisini zaman damgalarını karşılaştırmadan ayırt edebilir.

Örnek: bir CMS'in yazı yayınlaması

  1. Bir site 142 numaralı yazıyı yayınlar. Eklenti, reference değeri "wp:example-com:142" ve destination_url olarak yazının adresiyle POST /v1/links isteği gönderir. Bu reference için henüz bir bağlantı olmadığından yeni bir bağlantı oluşturulur ve yanıt 201 olur.
  2. Yazar, yazıyı düzenleyip yeniden yayınlar. Eklenti aynı isteği, aynı reference ve aynı hedefle tekrar gönderir. Bu reference için zaten bir bağlantı var olduğundan yeni bir şey oluşturulmaz; yanıt 200 olur ve aynı bağlantıyı, aynı id ile döndürür.
  3. Sitenin kalıcı bağlantı yapısı değişir ve yazı artık farklı bir adreste yer alır. Eklenti, yeni destination_url değeriyle PATCH /v1/links/{id} isteği gönderir. reference bir PATCH ile değiştirilemez: eklentinin daha önce oluşturduğu bağlantıyı tanımasını sağlayan alan budur; bir düzenlemenin bunu taşımasına izin vermek, bir isteğin başka bir bağlantıyı sessizce sahipsiz bırakmasına yol açardı.

Uç noktalar

/v1/me dışındaki her uç nokta, anahtarın ait olduğu çalışma alanıyla sınırlıdır. Var olan ama başka bir çalışma alanına ait bir bağlantı, hiç var olmayan bir bağlantıyla aynı şekilde yanıtlanır.

MetotYolYetkiAçıklama
GET/v1/meyokAnahtar, çalışma alanı ve kalan hak.
GET/v1/linkslinks:readBağlantıları sayfalı biçimde listeler.
POST/v1/linkslinks:writeBir bağlantı oluşturur, ya da bir reference için var olan bağlantıyı döndürür.
GET/v1/links/{id}links:readTek bir bağlantıyı okur.
PATCH/v1/links/{id}links:writeBir bağlantıyı günceller.
DELETE/v1/links/{id}links:writeBir bağlantıyı siler.
GET/v1/links/{id}/statsanalytics:readTek bir bağlantı için tıklama istatistikleri.

Sorgu parametreleri: GET /v1/links

page_size
Sayfa boyutu. Varsayılan 50, en fazla 200.
cursor
Önceki sayfanın next_cursor değerinden alınan, anlamı belirtilmemiş bir sayfalama imleci. İlk sayfa için boş bırakılır.
reference
Sayfayı yalnızca bu reference değerini taşıyan bağlantılarla sınırlar.

Sorgu parametreleri: GET /v1/links/{id}/stats

days
Geriye dönük pencere, tam gün olarak. Varsayılan 30, en fazla 1095.

Hatalar

Her hata yanıtı aynı biçimdedir: { "error": { "code", "message", "docs_url" } }. Bir entegrasyonun karar vermesi gereken alan code'dur. message, çalışma alanının kendi dilinden bağımsız olarak yalnızca İngilizce yazılan, geliştiriciye yönelik bir hata ayıklama metnidir: bir müşterinin ekranda okuduğu bir metin değil, bir geliştiricinin sunucu kaydında okuduğu bir metindir ve bu bilinçli bir tercihtir, bir eksiklik değildir. Kontrol paneli ve bu sayfa, müşteriye görünen her şey gibi, iki dilde de eksiksizdir. docs_url, aşağıdaki ilgili satıra yönlendirir.

KodDurumAnlamı
invalid_request400Bir istek alanı eksik veya hatalı biçimde gönderilmiştir.
invalid_slug400İstenen kısa ad izin verilmeyen karakterler içeriyor.
destination_rejected400Hedef URL, bağlantı oluşturulmadan önce reddedildi. Neden, reason alanında belirtilir: kendine referans, IP adresi biçiminde bir host, zincirleme bir kısaltma servisi ve gerçek bir hedefi göstermesi son derece düşük ihtimalli birkaç başka örüntü.
unauthenticated401Anahtar eksik, tanınmıyor, iptal edilmiş ya da süresi dolmuş.
quota_exceeded402Aylık bağlantı hakkı tükenmiş ve kalan kredi yok. Daha önce oluşturulan bağlantılar yönlendirmeye devam eder; bu hata yalnızca yeni oluşturmayı engeller.
insufficient_scope403Anahtar, bu uç noktanın gerektirdiği yetkiyi taşımıyor. Gerekli yetki required_scope alanında belirtilir.
feature_not_available403Kullanılan alan (özel kısa ad, şifre veya son kullanma tarihi) çalışma alanının mevcut planına dahil değil. Hangisi olduğu feature alanında belirtilir.
api_not_included403Çalışma alanının planı API erişimini hiç içermiyor. Gerekli plan required_plan alanında belirtilir.
workspace_banned403Çalışma alanının bağlantı oluşturması ve düzenlemesi engellenmiştir.
trial_expired403Çalışma alanının deneme süresi sona erdi ve etkin bir plan yok.
domain_not_verified403domain_id, doğrulaması henüz tamamlanmamış bir alan adını gösteriyor.
not_found404Böyle bir bağlantı yok, ya da bağlantı başka bir çalışma alanına ait. domain_id, çalışma alanının kendi alan adlarından birini göstermediğinde de aynı hata döner.
slug_taken409Bu kısa ad zaten kullanımda.
slug_reserved409Bu kısa ad ayrılmış olduğundan kullanılamaz.
destination_unsafe422Hedef, güvenlik taramasında işaretlendi.
rate_limited429Geçerli pencerede çok fazla istek gönderildi. Kaç saniye beklenmesi gerektiği Retry-After alanında belirtilir.
internal_error500İstek bizim tarafımızda tamamlanamadı.
api_not_configured503API bu dağıtımda yapılandırılmamış.

İstek sınırları

Sınırlar anahtar başına, dakika başına uygulanır; okuma ve yazma istekleri ayrı sayılır. Her yanıt X-RateLimit-Limit ve X-RateLimit-Remaining taşır; 429 yanıtları ayrıca Retry-After taşır.

PlanOkuma / dkYazma / dk
Pro60060
Business3000300

Makine tarafından okunabilir açıklama

API'nin tamamı, yukarıda açıklanan uç noktalardan üretilen OpenAPI 3.1 biçiminde tanımlanmıştır.

openapi.json dosyasını görüntüleyin