Eşzamanlılık ve tekrar güvenliği

Sürüm kontrolünü, işlem kimliğini ve toplu değişiklikleri doğru yönetin.

Son güncelleme:

Bu sayfadaKayıt sürümüTek toplu işlemrequest_idDeğişiklikleri izlemeBatch geri alma

Kayıt sürümü

Düzenlenebilir kayıtlar version alanı taşır. Harita nesnelerinin GeoJSON yanıtında aynı değer properties.v olarak bulunur. Güncelleme veya silmede istemci, son okuduğu değeri işlemdeki version alanına koyar. Değer güncel değilse sunucu 409 döndürür.

Sürümü tahmin ederek artırmayın. Sunucunun yanıtını yeni taban olarak kullanın; gerektiğinde kaydı yeniden okuyun. Bir işlem, bağımlı cihazları ve bağlantıları da değiştirebilir.

Sürüm bilgisi çoğu güncelleme ve silmede zorunludur. Bağlantılarda eski çağrılar için dar bir istisna vardır; ancak location_id veya slot gönderildiğinde sürüm kesinlikle gerekir. Yeni entegrasyonlar bağlantı işlemlerinde de her zaman sürüm göndermelidir.

Tek toplu işlem

POST /api/p/{pid}/edit, 1–2000 işlem içeren ops dizisini sırayla uygular. İlişki, modül, kapasite ve kota kontrolleri aynı veritabanı işlemi içinde yürütülür. Bir adım reddedilirse değişiklikler birlikte geri alınır. Başarılı isteğin değişiklikleri tek batch altında kaydedilir.

Aynı projedeki yazmalar sunucuda sıraya alınır. Bu, istemcinin sürüm göndermesinin yerini tutmaz; beklerken başka bir kullanıcının yazdığı değerle çatışabilirsiniz.

request_id

Çerezli genel düzenleme isteğinde request_id isteğe bağlıdır; v1 düzenleme isteğinde zorunludur. 8–64 karakter uzunluğunda olmalı; harf, rakam ve kısa çizgi içermelidir. Ağ kesintisinde güvenli tekrar için kullanılması önerilir.

Durum Sonuç
Aynı kullanıcı, aynı proje, aynı request_id, aynı ops İşlemler yeniden uygulanmaz; kayıtlı sonuç replayed: true ile döner.
Aynı kapsam ve request_id, farklı ops 409 ile reddedilir.
Başka kullanıcı veya başka proje Aynı metin ayrı bir tekrar anahtarıdır.

Özet, ops içeriğinden hesaplanır; üst düzey note özete dahil değildir. Yalnız notu değiştirip aynı kimliği göndermek yeni işlem oluşturmaz. Tekrar kayıtları iki günden eski olduğunda temizlenebilir; bu mekanizma süresiz tekrar güvencesi değildir.

Tekrar yanıtı ilk yazmanın sonucudur. Güncel veri okuması yerine kullanılmamalıdır. Sonuç içeriği o andaki modül görünürlüğüne göre süzülebilir; kayıtların bugünkü durumuna ihtiyaç duyuyorsanız yeniden okuyun.

Değişiklikleri izleme

  1. GET /api/p/{pid}/features yanıtındaki cursor değerini saklayın.
  2. GET /api/p/{pid}/changes?since={cursor} çağrısını yapın.
  3. Dönen features kayıtlarını kimlikleriyle güncelleyin; properties._deleted işaretli olanları görünümden çıkarın.
  4. nodes, layers, talep, tahsis ve devre bildirimlerine göre ilgili ayrıntıları yeniden okuyun.
  5. Yanıttaki yeni cursor değerini sonraki çağrı için saklayın.

Bu akış istemcinin HTTP ile sorgulamasına dayanır. Olay bildirimi için ayrıca webhook aboneliği kurulabilir; webhook bu okuma akışının yerine tam veri göndermez. Rol veya modül kapsamı değiştiğinde yalnız değişen nesneleri almak yerine proje görünümünü yeniden kurun.

Batch geri alma

POST /api/p/{pid}/changes/{batch}/revert, işlem grubunu geri almayı dener. Sonradan değiştirilen kayıtlar veya yeni bağımlılıklar varsa 409 dönebilir. Başarılı geri alma yeni bir işlem grubu oluşturur; geçmişi silmez.

Dosya içe aktarma, paket yükleme ve özel önizleme/onay uçlarının tekrar kuralları farklıdır. /edit için anlatılan request_id davranışını bütün POST uçlarına taşımayın. Düzenleme API’si örnekleriyle devam edin.