Geliştirici / APIMasaüstü Sürüm API

Masaüstü Sürüm API

HummyTummy Masaüstü uygulamasının kurulum paketleri ve güncellemeleri, sunucu tarafındaki bir sürüm kataloğunda (DesktopRelease) tutulur. Katalog platform düzeyinde tek bir küresel listedir — her restoran kiracısı (tenant) aynı yayınlanmış sürümleri görür. Birkaç uç noktaya kimliksiz (public) erişilebilir (indirme, güncelleme sorgusu, en son sürüm); sürüm yayınlama ise yalnızca platform operatörlerine (SuperAdmin) veya CI/CD’ye açıktır.

Tüm uç noktalar global /api ön ekiyle yayınlanır. Aşağıdaki örneklerde sunucu kökü https://app.hummytummy.com olarak gösterilmiştir; kendi ortamınızda değiştirin. Kesişen sözleşmeler (hata zarfı, hız sınırı katmanları, durum kodları) için API Fundamentals sayfasına bakın.

Public uç noktalar

Bu uç noktalar kimlik doğrulaması gerektirmez (@Public) ve hız sınırlıdır (throttle).

Metot & yolAçıklamaLimit
GET /api/desktop/releases/latestEn son yayınlanmış sürüm30/dk
GET /api/desktop/releases/publishedYayınlanmış tüm sürümler (pubDate’e göre azalan)30/dk
GET /api/desktop/updates/:platform/:currentVersionTauri updater sorgusu60/dk
POST /api/desktop/releases/:version/download/:platformİndirme sayacını artırır (analitik)10/dk
⚠️

Yol parametreleri doğrulanır: :platform değeri ^[a-z0-9-]{1,32}$ desenine, :version / :currentVersion değeri ^v?\d+\.\d+\.\d+$ desenine uymalıdır. Uymayan bir değer 400 Bad Request döner.

Yalnızca published: true olan sürümler public uç noktalardan görünür. Taslak (yayınlanmamış) sürümler yalnızca SuperAdmin yönetim uç noktalarından listelenir.

En son sürümü almak

GET /api/desktop/releases/latest en son yayınlanmış tek sürüm kaydını döner. Yayınlanmış sürüm yoksa 404 döner.

curl https://app.hummytummy.com/api/desktop/releases/latest

Platform başına paket alanları

İstemci, çalıştığı platforma karşılık gelen URL alanını seçer:

PlatformURL alanıİmza alanıTipik paket
WindowswindowsUrlwindowsSignature.msi
macOS (Apple Silicon)macArmUrlmacArmSignature.dmg
macOS (Intel)macIntelUrlmacIntelSignature.dmg
LinuxlinuxUrllinuxSignature.deb / .AppImage

İlgili platform için URL null ise o sürüm o platforma derlenmemiştir.

GET /api/desktop/releases/published aynı kayıt biçimini bir dizi olarak, pubDate’e göre azalan (en yeni önce) sıralı döner.

Updater uç noktası

GET /api/desktop/updates/:platform/:currentVersion

Masaüstü uygulaması, Tauri updater’ı kullanarak yeni sürümleri kendisi indirir. Akış tamamen sunucu kontrollüdür: uygulama bulunduğu platformu ve mevcut sürümünü bildirir, sunucu güncellenebilir bir sürüm varsa imzalı bir güncelleme manifesti döndürür.

ParametreAçıklamaÖrnek
:platformTauri’nin bildirdiği platform anahtarıwindows-x86_64
:currentVersionUygulamanın şu anki sürümü0.2.5 veya v0.2.5

Geçerli platform anahtarları: windows-x86_64, darwin-aarch64, darwin-x86_64, linux-x86_64. Bu uç nokta public’tir ve 60 istek/dk ile sınırlıdır.

Yanıtlar

  • Güncelleme var200 ve aşağıdaki manifest.
  • Güncelleme yok / uygun değil → gövde null döner. Tauri bunu “güncel” olarak yorumlar. Şu durumlarda null döner:
    • mevcut sürüm en son yayınlanmış sürümle aynı ya da daha yeni,
    • hiç yayınlanmış sürüm yok,
    • istenen platform en son sürümde mevcut değil (URL yok ya da imzasız).
curl https://app.hummytummy.com/api/desktop/updates/windows-x86_64/0.2.5

platforms nesnesi yalnızca hem URL’si hem geçerli imzası olan platformları içerir (aşağıdaki güvenlik notuna bakın). notes alanı sürümün releaseNotes metnidir, pub_date ise yayınlama tarihinin ISO biçimidir.

Sürüm karşılaştırma

Sunucu sürümleri sayısal semver olarak karşılaştırır: major.minor.patch parçalarını ayırır, baştaki v önekini yok sayar ve sayısal olarak kıyaslar. En son yayınlanmış sürüm, gönderilen currentVersion’dan kesinlikle büyükse güncelleme sunulur; eşit ya da küçükse null döner.

⚠️

Karşılaştırma yalnızca sayısal parçaları dikkate alır; ön-sürüm etiketleri (1.0.0-beta.1 gibi) desteklenmez. Sürüm kataloğu operatör/CI kontrolünde olduğundan bu kısıt yeterlidir — yayınlanan sürümler daima saf major.minor.patch biçiminde tutulur.

İmza doğrulama (güvenlik)

Tauri updater, yalnızca minisign imzası sabitlenmiş public anahtarla doğrulanan bir binary’yi kurar. Sunucu bu sözleşmeyi koruyacak şekilde davranır:

  • Bir platformun URL’si varsa ama imzası yoksa (boş/eksik), o platform manifeste eklenmez — kurulamaz kabul edilir ve sunucuda uyarı loglanır. Yarı dolu, imzasız bir kayıt asla yayımlanmaz.
  • Bir platformun URL’si yoksa (o sürüm o platforma derlenmemişse) sessizce atlanır.
  • İstenen platform sonuçta platforms içinde yoksa uç nokta null döner.

Bu sayede otomatik güncelleyici hiçbir zaman imzasız (dolayısıyla doğrulanamayan) bir binary almaz.

Updater’ın hangi uç noktayı ve hangi public anahtarı kullanacağı masaüstü uygulamasının Tauri yapılandırmasında (tauri.conf.json içindeki updater bölümü) tanımlanır. Yukarıdaki sunucu sözleşmesi (manifest biçimi, imza zorunluluğu, sürüm karşılaştırma) bu istemci yapılandırmasından bağımsız olarak geçerlidir.

İndirme sayacı

POST /api/desktop/releases/:version/download/:platform

Analitik için sürüm başına indirme sayacını artırır.

curl -X POST https://app.hummytummy.com/api/desktop/releases/0.2.6/download/windows-x86_64

Bu çağrı en iyi-çaba (best-effort) çalışır: bilinmeyen bir sürüm gönderilirse hata fırlatmaz, yalnızca sunucuda loglanır.

Sürüm yayınlama (operatör / CI)

Yeni bir sürüm kataloğa iki rotadan biriyle ulaşır.

⚠️

Sürüm kataloğu platform düzeyinde küresel bir listedir ve her restoranın masaüstü güncelleyicisi buradan çeker. Bu nedenle yönetim uç noktaları (oluştur / yayınla / sil) yalnızca SuperAdmin veya CI API anahtarı ile erişilebilir; kiracı yöneticileri bu kataloğu değiştiremez. Aksi halde tek bir kiracı, tüm restoranların güncelleyicisinin çektiği binary’yi değiştirebilirdi.

Kimlik realm’leri

RealmBaşlıkKullanan
CI API anahtarıx-api-key (veya api-key): DESKTOP_RELEASE_API_KEYGitHub Actions / CI tabanlı yayınlama
SuperAdmin (Bearer)Authorization: Bearer <jwt>Platform operatörleri

Yönetim uç noktaları

Metot & yolRealmAçıklama
POST /api/desktop/ci/releasesCI API anahtarıSürüm oluştur (CI)
POST /api/desktop/ci/releases/:id/publishCI API anahtarıSürüm yayınla (CI)
POST /api/desktop/releasesSuperAdminSürüm oluştur
PATCH /api/desktop/releases/:idSuperAdminSürüm güncelle
POST /api/desktop/releases/:id/publishSuperAdminSürüm yayınla
POST /api/desktop/releases/:id/unpublishSuperAdminSürüm yayından kaldır
DELETE /api/desktop/releases/:idSuperAdminSürüm sil

Örnek — CI ile sürüm oluşturma

curl -X POST https://app.hummytummy.com/api/desktop/ci/releases \
  -H "x-api-key: $DESKTOP_RELEASE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "0.2.7",
    "releaseTag": "v0.2.7",
    "releaseNotes": "## Yenilikler\n- ...",
    "windowsUrl": "https://github.com/.../setup.msi",
    "windowsSignature": "dW50cnVzdGVkIGNvbW1lbnQ6...",
    "published": false
  }'
⚠️

version benzersiz olmalı ve \d+\.\d+\.\d+ (saf semver, v öneki olmadan) biçiminde olmalıdır. Var olan bir sürümü tekrar oluşturmaya çalışmak 400 döner. Yayınlama adımı pubDate alanını set eder; updater’ın “en son sürüm” sıralaması bu alana göre yapılır.

Kaynaktan derleme

Masaüstü uygulamasını kaynaktan derlemek için (Tauri CLI npm ile birlikte gelir):

Bağımlılıkları kurun ve derleyin

npm install
npm run tauri:dev    # geliştirme modunda çalıştır
npm run tauri:build  # üretim paketi üret

Paketleri toplayın

Çıktı paketleri src-tauri/target/release/bundle/ altında platforma göre (msi/, dmg/, deb/, appimage/) oluşturulur.

Geliştirme için Rust 1.70+ ve Node.js 18+ gerekir; Linux’ta ayrıca libdbus-1-dev ve pkg-config paketleri gerekir (Bluetooth yazıcı desteği için).

Operatör ekranları

Son kullanıcılar bu uç noktaları doğrudan çağırmaz — masaüstü uygulaması çağırır. Operatörler uygulamayı uygulama içi deneyimle kurar ve günceller: