Extension:JsonConfig/tr

$ 1 uzantısı, diğer uzantıların yapılandırma verilerini bir viki sayfasında JSON blobu olarak depolamasına izin verir.

Mevcut özellikler ve kullanım modelleri

 * Verileri birkaç şekilde depolamak için JsonConfig'i kullanabilirsiniz:
 * tek bir yapılandırma sayfasında, ör. Config içinde uzantınız için bir dizi ayar: MyExtSettings (, JsonConfig uzantısıyla ilişkili varsayılan ad alanıdır);
 * kendi ad alanlarında bulunan benzer yapıya sahip bir dizi sayfada, ör. bilinen proxy'lerin IP adresleri veya "Proxy:Opera" adlı olay günlüğü şemaları veya Schema:AccountCreation adlı şemalar
 * yalnızca başlıkları bir normal ifade kalıbıyla eşleşen sayfalar için kullanma, ör. Config:Proxy:Opera veya Config:Opera.proxy. Bu, her içerik modeli için bir tane olmak üzere çok sayıda ad alanı içeren bir vikiyi doldurmaktan kaçınır.
 * Veri doğrulama (geçerli JSON dışında) ve normalleştirme yapmak için bir içerik sınıfı sağlayabilirsiniz.
 * HTML görünümünü özelleştirmek için bir görünüm sınıfı sağlayabilirsiniz.
 * Verileri saklayabilirsiniz:
 * "one-per-wiki", "one-per-cluster", hatta her "family" için bir tane (paylaşılan memcached için önbellek anahtarının farklı yapısı);
 * in a public or private wiki and accessed with credentials;
 * in a separate cluster, and do remote notification when changed.

Current

 * Commons tabular data sets
 * Commons map data sets
 * Dashiki dashboard configurations
 * Others?

Past

 * Wikipedia Zero operator configurations (see Extension:ZeroBanner)

Bu değişken, her tür yapılandırma sayfası için profilleri tanımlar. , her bir alt dizinin aşağıdaki parametrelere sıfır veya daha fazlasına sahip olduğu ilişkilendirilebilir bir dizi dizisidir. Varsayılan olarak, JsonConfig dize anahtarını bu profilin temsil ettiği model kimliği olarak kullanır, ancak aynı model kimliğini birden fazla profilde yeniden kullanmak istemeniz durumunda bunu  parametresiyle geçersiz kılabilirsiniz.

Bu değişken, hangi özel içerik sınıfının hangi Model kimliğini işleyeceğini tanımlar. Aynı içerik sınıfı tarafından birden fazla Model Kimliği işlenebilir. Tüm içerik sınıfları  sınıfından türetilmelidir; model kimliği   ile eşleşirse, varsayılan   sınıfı model kimliğini işler.

Örnek:

HTML oluşturma için ayrı bir sınıf uygularsanız, yapılandırma modelinizi fazladan  sınıfı olan bir dizi olarak belirtebilirsiniz:

Hello World
The simplest case is a single configuration page without any validation, stored locally on each wiki. Just add these settings to LocalSettings.php

The above enables namespace "Config" on the local wiki, but only allows the "Config:MySettings" page to be created, not any other page in that namespace. You can store well-formed JSON data in the page.

To read the MySettings data in PHP, use a  object to access the page, then request its content:

Bir kümede paylaşılan birden fazla yapılandırma
Lets say we decide to store the trusted proxies' IPs as "Config:Proxy:SomeName" pages on Meta-Wiki and share this data with the cluster.

If instead you want to dedicate a separate namespace to proxies, the parameters would change to:

Doğrulama
Çoğu zaman, kendi doğrulamasına sahip özel bir içerik sınıfı da istenir. JSON sayfaları,  üzerinden türetilen içerik sınıfları tarafından yönetilir. İçerik sınıfı, ham metnin ayrıştırılması ve doğrulanmasından sorumludur. , JSON ayrıştırmasının ötesinde herhangi bir doğrulama yapmaz, ancak ondan türetmeyi ve  ile geçersiz kılmayı seçebilirsiniz. Daha da iyisi, bir dizi doğrulama ilkeli sağlayan ve yalnızca  ile geçersiz kılan   sınıfından türetebilirsiniz.

Bu belgenin iyiliği için, Opera Mini sunucularını açıklayan proxy yapılandırma sayfasının şu biçime sahip olduğunu varsayalım:

İşte bu verileri doğrulamak için içerik sınıfı.

Depolama vikisindeki özelleştirme davranışı
Ayrıca, depolama vikisinde görüntülemeyi ve sayfa oluşturmayı özelleştirmek isteyebilirsiniz (yukarıdaki örnekte Meta-Wiki). Bunu yapmanın iki yolu vardır: -türetilmiş sınıfınızın içinde veya   üzerinden türetilen ayrı bir "view" sınıfı aracılığıyla. İkinci yaklaşım, mimariyi temiz bir şekilde ayırdığı için tercih edilir ve görünüm sınıfının, verileri kullanan tüm vikilerde değil, yalnızca depolama vikisinde (örneğin, Meta-Wiki) bulunması gerekir.

-türetilmiş sınıftaki varsayılan değeri geçersiz kılmak için, yapıcıyı geçersiz kılın ve  değerini üst kurucuya iletmeden önce NULL olarak gelirse yeni varsayılana ayarlayın. HTML oluşturmayı geçersiz kılmak için  geçersiz kılın.

Önerilen şekilde,  veya daha zengin özelliklere sahip   üzerinden türetilen bir görünüm sınıfı oluşturun. için,  ve   uygulamanız gerekecek. Varsayılan olarak, görünüm  sınıfı tarafından uygulanır ve bu, görünümünde küçük ayarlamalara ihtiyacınız varsa özelleştirilebilir bir temel olarak da kullanılabilir.

En iyi uygulamalar

 * JsonConfig kullanan uzantılar, yapılandırmalarını ana uzantı dosyasındaki  ve   değerlerine eklemelidir.
 * Yapılandırma verilerini birden fazla viki arasında paylaşırsanız,  içinde kullanılan anahtar adını belgeleyin ve   içinde 'store' / 'remote' bölümünü başlatın. Bu, yapılandırma işlevini çoğaltan bir dizi genel değişken sunmaktan daha iyidir. Örneğin Wikimedia'nın Graph uzantısı yapılandırmasına bakın (bu, basit yapılandırma değişkenleri yerine karmaşık çoklu viki kurulumunu kullanmasına rağmen).

Uygulanan özellikler

 * JSON ayrıştırma JSON metnini bir diziye veya bir nesneye dönüştürür
 * Görselleştirme JSON'u koddan ziyade görüntülemesi kolay bir tablo olarak gösterir ve bazı ekstra vurgulamalar içerir. Örneğin, değer sağlanmadıysa ve varsayılan kullanılıyorsa, gri renkte gösterilir veya değer varsayılanla aynı olduğunda mor olarak gösterilir. Örneğin, bunu ve bunu bakın.
 * Kod Düzenleyici JSON düzenlemeyi basitleştirir
 * Özel Doğrulama, değerin doğru biçimde olup olmadığını veya bir kullanıcı kimliğinin var olup olmadığını kontrol etmek gibi karmaşık kontroller gerçekleştirir.
 * MemCached önbelleğe alma json blob'larını memcached'de özel anahtarlar ve süre sonu politikaları altında depolar ve kaydetme sırasında sıfırlar.
 * Flagged Revision desteği, yapılandırmaların üretime geçmeden önce "incelendi" olarak işaretlenmesine izin verir
 * Çoğu temel arayüz öğesinin yerelleştirilmesi birçok dilde yapılmıştır ve en yaygın mesajların tek bir yerde yalnızca bir kez verilmesi çeviri işini azaltacaktır.

Uygulanmamış hoş şeyler
Bu özellikler, birden fazla yapılandırma türü için arzu edilir:
 * Şema doğrulayıcı - Çoğu uzantı karmaşık doğrulama kurallarına ihtiyaç duymayabileceğinden veya şema artı ekstra doğrulamayı birleştirmek isteyebileceğinden, JSON Şeması'na göre doğrulayın.
 * Özel düzenleyici - Zero team, muhtemelen JSON Schema'ya dayalı daha karmaşık bir düzenleyici uygulamayı düşünüyor.
 * API sorgu desteği - Yapılandırma sayfalarının, metin blobları yerine tüm biçimlerde - json/xml/... - normal API sonuçları olarak döndürülmesine izin verin:
 * Yerelleştirme - her yapılandırma anahtarı için yerelleştirilmiş açıklamalar gösterebilmek iyi olur
 * Yerelleştirme - her yapılandırma anahtarı için yerelleştirilmiş açıklamalar gösterebilmek iyi olur

Dış erişim
Depolanan yapılandırma verilerine sıklıkla JavaScript, bot veya diğer programlar gibi bazı harici aracılar tarafından ihtiyaç duyulabilir. JavaScript, standart  API'yi çağırarak gerekli verilere erişmek için JSONP'yi kullanabilir veya CORS kullanılamıyorsa bir yönlendirme hizmeti geliştirebiliriz. Uzantı yazarları, alana özgü bilgiler sağlamak için kendi API modüllerini eklemeyi seçebilirler. Son olarak,  Sorgu API parametresi,   döndüreceği bir metin blobu olarak değil, API sonucunun bir parçası olarak JSON verilerini döndürecektir.