Aracılığıyla paylaş


Katalog

Katalog, bir paket kaynağındaki oluşturmalar ve silmeler gibi tüm paket işlemlerini kaydeden bir kaynaktır. Katalog kaynağı, hizmet dizininde türüne sahiptirCatalog. Bu kaynağı, yayımlanan tüm paketleri sorgulamak için kullanabilirsiniz.

Not

Katalog resmi NuGet istemcisi tarafından kullanılmadığından, kataloğu tüm paket kaynakları uygulamaz.

Not

Şu anda nuget.org kataloğu Çin'de kullanılamıyor. Diğer ayrıntılar için bkz . NuGet/NuGetGallery#4949.

Sürüm oluşturma

Aşağıdaki @type değer kullanılır:

@type Değer Notlar
Katalog/3.0.0 İlk sürüm

Temel URL

Aşağıdaki API'lerin giriş noktası URL'si, yukarıda belirtilen kaynak @type değerleriyle ilişkili özelliğin değeridir@id. Bu konu, yer tutucu URL'sini {@id}kullanır.

HTTP yöntemleri

Katalog kaynağında bulunan tüm URL'ler yalnızca ve HEADHTTP yöntemlerini desteklerGET.

Katalog dizini

Katalog dizini, kronolojik olarak sıralanmış katalog öğelerinin listesini içeren, iyi bilinen bir konumda bulunan bir belgedir. Katalog kaynağının giriş noktasıdır.

Dizin, katalog sayfalarından oluşur. Her katalog sayfası katalog öğeleri içerir. Her katalog öğesi, belirli bir noktada tek bir paketle ilgili bir olayı temsil eder. Katalog öğesi, paket kaynağından oluşturulmuş, listelenmemiş, yeniden listelenmiş veya silinmiş bir paketi temsil edebilir. İstemci, katalog öğelerini kronolojik sırayla işleyerek V3 paket kaynağında bulunan her paketin güncel bir görünümünü oluşturabilir.

Kısacası katalog blobları aşağıdaki hiyerarşik yapıya sahiptir:

  • Dizin: Kataloğun giriş noktası.
  • Sayfa: Katalog öğeleri grubu.
  • Yaprak: Tek bir paketin durumunun anlık görüntüsü olan katalog öğesini temsil eden belge.

Her katalog nesnesinin commitTimeStamp , öğe kataloğa eklendiğinde temsil eden adlı bir özelliği vardır. Katalog öğeleri, işlemeler adı verilen toplu işlerde bir katalog sayfasına eklenir. Aynı işlemedeki tüm katalog öğeleri aynı işleme zaman damgasına (commitTimeStamp) ve işleme kimliğine () sahiptircommitId. Aynı işlemeye yerleştirilen katalog öğeleri, paket kaynağında aynı noktada gerçekleşen olayları temsil eder. Katalog işlemesinde sıralama yoktur.

Her paket kimliği ve sürümü benzersiz olduğundan, bir işlemede hiçbir zaman birden fazla katalog öğesi olmaz. Bu, tek bir paket için katalog öğelerinin işleme zaman damgasına göre her zaman kesin bir şekilde sıralanmasını sağlar.

Kataloğun her commitTimeStampbiri için hiçbir zaman birden fazla işleme yoktur. Başka bir deyişle, commitId ile commitTimeStampyedeklidir.

Paket kimliğiyle dizine alınan paket meta veri kaynağının aksine, katalog yalnızca zamana göre dizine alınır (ve sorgulanabilir).

Katalog öğeleri kataloğa her zaman monoton olarak artan, kronolojik sırada eklenir. Başka bir deyişle, X zamanında bir katalog işlemesi eklenirse, X'ten küçük veya buna eşit bir süreyle hiçbir katalog işlemesi eklenmez.

Aşağıdaki istek katalog dizinini getirir.

GET {@id}

Katalog dizini, aşağıdaki özelliklere sahip bir nesne içeren bir JSON belgesidir:

Adı Tür Zorunlu Notlar
commitId string evet En son işlemeyle ilişkilendirilmiş benzersiz bir kimlik
commitTimeStamp string evet En son işlemenin zaman damgası
count integer evet Dizindeki sayfa sayısı
öğe nesne dizisi evet Bir sayfayı temsil eden her nesne olan bir nesne dizisi

Dizideki items her öğe, her sayfa hakkında en az ayrıntıya sahip bir nesnedir. Bu sayfa nesneleri katalog yapraklarını (öğeler) içermez. Bu dizideki öğelerin sırası tanımlanmadı. Sayfalar istemci tarafından kendi özelliği kullanılarak commitTimeStamp bellekte sıralanabilir.

Yeni sayfalar kullanıma sunulduğunda count , değeri artırılır ve dizide items yeni nesneler görüntülenir.

Öğeler kataloğa eklendikçe dizinler commitId değişir ve commitTimeStamp artacaktır. Bu iki özellik temelde dizideki tüm sayfa commitId ve commitTimeStamp değerlerin items özetidir.

Dizindeki Katalog sayfası nesnesi

Katalog dizininin items özelliğinde bulunan katalog sayfası nesneleri aşağıdaki özelliklere sahiptir:

Adı Tür Zorunlu Notlar
@id string evet Katalog sayfasını getirmek için URL
commitId string evet Bu sayfadaki en son işlemeyle ilişkilendirilmiş benzersiz bir kimlik
commitTimeStamp string evet Bu sayfadaki en son işlemenin zaman damgası
count integer evet Katalog sayfasındaki öğe sayısı

Bazı durumlarda satır içi dizine ayrılan paket meta veri kaynağının aksine, katalog yaprakları hiçbir zaman dizine satır içine alınmaz ve her zaman sayfanın URL'si @id kullanılarak getirilmelidir.

Örnek isteği

GET https://api.nuget.org/v3/catalog0/index.json

Örnek yanıt

{
  "commitId": "3d698852-eefb-48ed-8f55-9ee357540d20",
  "commitTimeStamp": "2017-10-31T23:33:17.0954363Z",
  "count": 3,
  "items": [
    {
      "@id": "https://api.nuget.org/v3/catalog0/page0.json",
      "commitId": "3a4df280-3d86-458e-a713-4c91ca261fef",
      "commitTimeStamp": "2015-02-01T06:30:11.7477681Z",
      "count": 540
    },
    {
      "@id": "https://api.nuget.org/v3/catalog0/page1.json",
      "commitId": "8bcd3cbf-74f0-47a2-a7ae-b7ecc50005d3",
      "commitTimeStamp": "2015-02-01T06:39:53.9553899Z",
      "count": 540
    },
    {
      "@id": "https://api.nuget.org/v3/catalog0/page2.json",
      "commitId": "3d698852-eefb-48ed-8f55-9ee357540d20",
      "commitTimeStamp": "2017-10-31T23:33:17.0954363Z",
      "count": 47
    }
  ]
}

Katalog sayfası

Katalog sayfası, katalog öğeleri koleksiyonudur. Katalog dizininde bulunan değerlerden biri @id kullanılarak getirilen bir belgedir. Katalog sayfasının URL'si tahmin edilebilir olması amaçlanmamıştır ve yalnızca katalog dizini kullanılarak bulunmalıdır.

Yeni katalog öğeleri, katalog dizinindeki sayfaya yalnızca en yüksek işleme zaman damgasıyla veya yeni bir sayfaya eklenir. Kataloğa daha yüksek işleme zaman damgasına sahip bir sayfa eklendikten sonra, eski sayfalar hiçbir zaman eklenmez veya değiştirilmez.

Katalog sayfası belgesi, aşağıdaki özelliklere sahip bir JSON nesnesidir:

Adı Tür Zorunlu Notlar
commitId string evet Bu sayfadaki en son işlemeyle ilişkilendirilmiş benzersiz bir kimlik
commitTimeStamp string evet Bu sayfadaki en son işlemenin zaman damgası
count integer evet Sayfadaki öğe sayısı
öğe nesne dizisi evet Bu sayfadaki katalog öğeleri
ana string evet Katalog dizininin URL'si

Dizideki items her öğe, katalog öğesiyle ilgili en az ayrıntıya sahip bir nesnedir. Bu öğe nesneleri katalog öğesinin tüm verilerini içermez. Sayfanın items dizisindeki öğelerin sırası tanımlanmamış. Öğeler, istemci tarafından kendi özelliği kullanılarak commitTimeStamp bellekte sıralanabilir.

Sayfadaki katalog öğelerinin sayısı sunucu uygulaması tarafından tanımlanır. nuget.org için, her sayfada en fazla 550 öğe vardır, ancak belirli bir noktadaki sonraki işleme toplu işleminin boyutuna bağlı olarak bazı sayfalar için gerçek sayı daha küçük olabilir.

Yeni öğeler eklendikçe, count değeri artırılır ve dizide items yeni katalog öğesi nesneleri görüntülenir.

Sayfaya commitId öğeler eklendikçe değişiklikler ve commitTimeStamp artışlar da artar. Bu iki özellik temelde dizideki tüm commitId ve commitTimeStamp değerlerin items özetidir.

Sayfadaki katalog öğesi nesnesi

Katalog sayfasının items özelliğinde bulunan katalog öğesi nesneleri aşağıdaki özelliklere sahiptir:

Adı Tür Zorunlu Notlar
@id string evet Katalog öğesini getirmek için URL
@type string evet Katalog öğesinin türü
commitId string evet Bu katalog öğesiyle ilişkilendirilmiş işleme kimliği
commitTimeStamp string evet Bu katalog öğesinin işleme zaman damgası
nuget:id string evet Bu yaprağın ilişkili olduğu paket kimliği
nuget:version string evet Bu yaprağın ilişkili olduğu paket sürümü

Değer @type aşağıdaki iki değerden biri olacaktır:

  1. nuget:PackageDetails: bu, katalog yaprak belgesindeki türe PackageDetails karşılık gelir.
  2. nuget:PackageDelete: bu, katalog yaprak belgesindeki türe karşılık gelir PackageDelete .

Her türün ne anlama geldiğini öğrenmek için aşağıdaki ilgili öğe türüne bakın.

Örnek isteği

GET https://api.nuget.org/v3/catalog0/page2926.json

Örnek yanıt

{
  "commitId": "616117f5-d9dd-4664-82b9-74d87169bbe9",
  "commitTimeStamp": "2017-10-31T23:30:32.4197849Z",
  "count": 5,
  "parent": "https://api.nuget.org/v3/catalog0/index.json",
  "items": [
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.23.30.32/util.biz.payments.0.0.4-preview.json",
      "@type": "nuget:PackageDetails",
      "commitId": "616117f5-d9dd-4664-82b9-74d87169bbe9",
      "commitTimeStamp": "2017-10-31T23:30:32.4197849Z",
      "nuget:id": "Util.Biz.Payments",
      "nuget:version": "0.0.4-preview"
    },
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.23.28.02/util.biz.0.0.4-preview.json",
      "@type": "nuget:PackageDetails",
      "commitId": "820340b2-97e3-4f93-b82e-bc85550a6560",
      "commitTimeStamp": "2017-10-31T23:28:02.788239Z",
      "nuget:id": "Util.Biz",
      "nuget:version": "0.0.4-preview"
    },
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.data.1.0.0-preview1-00258.json",
      "@type": "nuget:PackageDetails",
      "commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
      "commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
      "nuget:id": "SourceCode.Clay.Data",
      "nuget:version": "1.0.0-preview1-00258"
    },
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.1.0.0-preview1-00258.json",
      "@type": "nuget:PackageDetails",
      "commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
      "commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
      "nuget:id": "SourceCode.Clay",
      "nuget:version": "1.0.0-preview1-00258"
    },
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2017.10.31.22.31.22/sourcecode.clay.json.1.0.0-preview1-00258.json",
      "@type": "nuget:PackageDetails",
      "commitId": "cae34527-ffc7-4e96-884f-7cf95a32dbdd",
      "commitTimeStamp": "2017-10-31T22:31:22.5169519Z",
      "nuget:id": "SourceCode.Clay.Json",
      "nuget:version": "1.0.0-preview1-00258"
    }
  ]
}

Katalog yaprağı

Katalog yaprağı belirli bir paket kimliği ve sürümü hakkında belirli bir zaman diliminde meta veriler içerir. Katalog sayfasında bulunan değer kullanılarak @id getirilen bir belgedir. Katalog yaprağının URL'si tahmin edilebilir olması amaçlanmamıştır ve yalnızca bir katalog sayfası kullanılarak bulunmalıdır.

Katalog yaprak belgesi, aşağıdaki özelliklere sahip bir JSON nesnesidir:

Adı Tür Zorunlu Notlar
@type dize veya dize dizisi evet Katalog öğesinin türleri
catalog:commitId string evet Bu katalog öğesiyle ilişkilendirilmiş bir işleme kimliği
catalog:commitTimeStamp string evet Bu katalog öğesinin işleme zaman damgası
id string evet Katalog öğesinin paket kimliği
Yayınlanan string evet Paket kataloğu öğesinin yayımlanma tarihi
sürüm string evet Katalog öğesinin paket sürümü

Öğe türleri

@type özelliği bir dize veya dize dizisidir. Kolaylık olması için, değer bir dizeyse @type , birinci boyutta herhangi bir dizi olarak ele alınmalıdır. için @type tüm olası değerler belgelenmez. Ancak, her katalog öğesi aşağıdaki iki dize türü değerinden tam olarak birine sahiptir:

  1. PackageDetails: paket meta verilerinin anlık görüntüsünü temsil eder
  2. PackageDelete: silinmiş bir paketi temsil eder

Paket ayrıntıları katalog öğeleri

Türüne PackageDetails sahip katalog öğeleri, belirli bir paket için paket meta verilerinin anlık görüntüsünü (kimlik ve sürüm bileşimi) içerir. Paket kaynağı aşağıdaki senaryolardan herhangi biri ile karşılaştığında paket ayrıntıları katalog öğesi oluşturulur:

  1. Bir paket gönderiliyor.
  2. Bir paket yeniden listelendi.
  3. Paket listelenmemiş.
  4. Paket kullanım dışı bırakıldı.
  5. Paket kullanım dışıdır.
  6. Paket yeniden akıtılır.
  7. Paketin güvenlik açığı durumu güncelleştirilir.

Paket yeniden akışı, temelde paketin kendisinde değişiklik olmadan mevcut bir paketin sahte gönderimini oluşturan bir yönetim hareketidir. nuget.org, kataloğu kullanan arka plan işlerinden birinde bir hata düzeltildikten sonra yeniden akış kullanılır.

Katalog öğelerini kullanan istemciler, bu senaryolardan hangisinin katalog öğesini ürettiğini belirlemeye çalışmamalıdır. Bunun yerine, istemcinin korunan tüm görünüm veya dizinleri katalog öğesinde bulunan meta verilerle güncelleştirmesi yeterlidir. Ayrıca, yinelenen veya yedekli katalog öğeleri düzgün bir şekilde (aynı anda) işlenmelidir.

Paket ayrıntıları katalog öğeleri, tüm katalog yapraklarında bulunanlara ek olarak aşağıdaki özelliklere sahiptir.

Adı Tür Zorunlu Notlar
Yazar Dize hayır
Oluşturulan Dize hayır Paketin ilk oluşturulduğu zaman damgası. Fallback özelliği: published.
dependencyGroups nesne dizisi hayır Hedef çerçeveye göre gruplandırılmış paketin bağımlılıkları (paket meta veri kaynağıyla aynı biçim)
Kaldırılması nesne hayır Paketle ilişkili kullanımdan kaldırma (paket meta veri kaynağıyla aynı biçim)
açıklama Dize hayır
iconUrl Dize hayır
isPrerelease boolean hayır Paket sürümünün yayın öncesi olup olmadığı. uygulamasından versionalgılanabilir.
dil Dize hayır
licenseUrl Dize hayır
listelenen boolean hayır Paketin listelenip listelenmediği
minClientVersion Dize hayır
packageHash string evet Standart temel 64 kullanılarak kodlayarak paketin karması
packageHashAlgorithm string evet
packageSize integer evet .nupkg paketinin bayt cinsinden boyutu
packageTypes nesne dizisi hayır Yazar tarafından belirtilen paket türleri.
projectUrl Dize hayır
releaseNotes Dize hayır
requireLicenseAgreement boolean hayır Dışlandıysa varsay false
Özet Dize hayır
tags dizeler dizisi hayır
Başlık Dize hayır
verbatimVersion Dize hayır .nuspec'te bulunan sürüm dizesi
Güvenlik açıkları nesne dizisi hayır Paketin güvenlik açıkları

Package version özelliği, normalleştirmeden sonraki tam sürüm dizesidir. Bu, SemVer 2.0.0 derleme verilerinin buraya dahil edilebileceği anlamına gelir.

Zaman created damgası, paketin paket kaynağı tarafından ilk alındığı zamandır ve bu genellikle katalog öğesinin işleme zaman damgasından kısa bir süre önce olur.

, packageHashAlgorithm oluşturmak için kullanılan karma algoritmasını temsil eden sunucu uygulaması tarafından tanımlanan bir dizedir packageHash. nuget.org her zaman değerini SHA512kullandıpackageHashAlgorithm.

packageTypes özelliği yalnızca yazar tarafından bir paket türü belirtilmişse mevcut olur. Varsa, her zaman en az bir (1) girişi olur. Dizideki packageTypes her öğe aşağıdaki özelliklere sahip bir JSON nesnesidir:

Adı Tür Zorunlu Notlar
Adı string evet Paket türünün adı.
sürüm Dize hayır Paket türünün sürümü. Yalnızca yazar nuspec'te açıkça bir sürüm belirttiyse sunulur.

Zaman published damgası, paketin son listelendiği zamandır.

Not

nuget.org değeri, published paket listelenmemiş olduğunda 1900 yılına ayarlanır.

Güvenlik Açıkları

Bir nesne dizisi vulnerability . Her güvenlik açığı aşağıdaki özelliklere sahiptir:

Adı Tür Zorunlu Notlar
advisoryUrl string evet Paket için güvenlik önerisinin konumu
önem derecesi string evet Danışmanlığın önem derecesi: "0" = Düşük, "1" = Orta, "2" = Yüksek, "3" = Kritik

severity özelliği burada listelenenler dışında değerler içeriyorsa, önerinin önem derecesi Düşük olarak ele alınmalıdır.

Örnek isteği

GET https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json

Örnek yanıt

{
  "@type": [
    "PackageDetails",
    "catalog:Permalink"
  ],
  "authors": "NuGet.org Team",
  "catalog:commitId": "49fe04d8-5694-45a5-9822-3be61bda871b",
  "catalog:commitTimeStamp": "2015-02-01T11:18:40.8589193Z",
  "created": "2011-12-02T20:21:23.74Z",
  "description": "This package is an example for the V3 protocol.",
  "deprecation": {
    "reasons": [
      "Legacy",
      "HasCriticalBugs",
      "Other"
    ],
    "message": "This package is an example--it should not be used!",
    "alternatePackage": {
      "id": "Newtonsoft.JSON",
      "range": "12.0.2"
    }
  },
  "iconUrl": "https://www.nuget.org/Content/gallery/img/default-package-icon.svg",
  "id": "NuGet.Protocol.V3.Example",
  "isPrerelease": false,
  "language": "en-US",
  "licenseUrl": "http://www.opensource.org/licenses/ms-pl",
  "packageHash": "2edCwKLcbcgFJpsAwa883BLtOy8bZpWwbQpiIb71E74k5t2f2WzXEGWbPwntRleUEgSrcxJrh9Orm/TAmgO4NQ==",
  "packageHashAlgorithm": "SHA512",
  "packageSize": 118348,
  "packageTypes": [
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#packagetypes/DotnetTool",
      "@type": "PackageType",
      "name": "DotnetTool"
    }
  ],
  "projectUrl": "https://github.com/NuGet/NuGetGallery",
  "published": "1900-01-01T00:00:00Z",
  "requireLicenseAcceptance": false,
  "title": "NuGet V3 Protocol Example",
  "version": "1.0.0",
  "dependencyGroups": [
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup",
      "@type": "PackageDependencyGroup",
      "dependencies": [
        {
          "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/aspnet.suppressformsredirect",
          "@type": "PackageDependency",
          "id": "aspnet.suppressformsredirect",
          "range": "[0.0.1.4, )"
        },
        {
          "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/webactivator",
          "@type": "PackageDependency",
          "id": "WebActivator",
          "range": "[1.4.4, )"
        },
        {
          "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#dependencygroup/webapi.all",
          "@type": "PackageDependency",
          "id": "WebApi.All",
          "range": "[0.5.0, )"
        }
      ],
      "targetFramework": ".NETFramework4.6"
    }
  ],
  "tags": [
    "NuGet",
    "V3",
    "Protocol",
    "Example"
  ],
  "vulnerabilities": [
    {
      "@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json#vulnerability/GitHub/999",
      "@type": "Vulnerability",
      "advisoryUrl": "https://github.com/advisories/ABCD-1234-5678-9012",
      "severity": "2"
    }
  ]
}

Katalog öğelerini paket silme

Türüne PackageDelete sahip katalog öğeleri, katalog istemcilerine paket kaynağından bir paketin silindiğini ve hiçbir paket işlemi (geri yükleme gibi) için artık kullanılamadığını belirten en düşük bilgi kümesini içerir.

Not

Bir paketin silinmesi ve daha sonra aynı paket kimliği ve sürümü kullanılarak yeniden yayımlanması mümkündür. nuget.org'da bu durum, resmi istemcinin paket kimliği ve sürümünün belirli bir paket içeriğini ima ettiğini varsayan varsayımını bozan çok nadir bir durumdur. nuget.org'da paket silme hakkında daha fazla bilgi için ilkemize bakın.

Paket silme kataloğu öğelerinin, tüm katalog yapraklarında bulunanlara ek olarak ek özellikleri yoktur.

version özelliği, .nuspec paketinde bulunan özgün sürüm dizesidir.

published özelliği, paketin silindiği zamandır ve genellikle katalog öğesinin işleme zaman damgasından kısa bir süre önce olur.

Örnek isteği

GET https://api.nuget.org/v3/catalog0/data/2017.11.02.00.40.00/netstandard1.4_lib.1.0.0-test.json

Örnek yanıt

{
  "@type": [
    "PackageDelete",
    "catalog:Permalink"
  ],
  "catalog:commitId": "19fec5b4-9335-4e4b-bd50-8d5d3f734597",
  "catalog:commitTimeStamp": "2017-11-02T00:40:00.1969812Z",
  "id": "netstandard1.4_lib",
  "originalId": "netstandard1.4_lib",
  "published": "2017-11-02T00:37:43.7181952Z",
  "version": "1.0.0-test"
}

Imleç

Genel bakış

Bu bölümde, protokol tarafından zorunlu kılınmasa da, herhangi bir pratik katalog istemci uygulamasının parçası olması gereken bir istemci kavramı açıklanmaktadır.

Katalog zamana göre dizine eklenen yalnızca ekleme veri yapısı olduğundan, istemcinin katalog öğelerini hangi noktaya kadar işlediğini gösteren bir imleci yerel olarak depolaması gerekir. Bu imleç değerinin hiçbir zaman istemcinin makine saati kullanılarak oluşturulmaması gerektiğini unutmayın. Bunun yerine, değer bir katalog nesnesinin değerinden commitTimestamp gelmelidir.

İstemci, paket kaynağında yeni olayları her işlemek istediğinde, yalnızca depolanan imlecinden daha büyük bir işleme zaman damgasına sahip tüm katalog öğeleri için kataloğu sorgulaması gerekir. İstemci tüm yeni katalog öğelerini başarıyla işledikten sonra, yeni imleç değeri olarak işlenen katalog öğelerinin en son işleme zaman damgasını kaydeder.

İstemci, bu yaklaşımı kullanarak paket kaynağında gerçekleşen paket olaylarını hiçbir zaman kaçırmayabileceğinden emin olabilir. Ayrıca, istemcinin hiçbir zaman imlecin kaydedilmiş işleme zaman damgasından önce eski olayları yeniden işlemesi gerekmeyecektir.

bu güçlü imleç kavramı birçok nuget.org arka plan işi için kullanılır ve V3 API'sinin kendisini güncel tutmak için kullanılır.

İlk değer

Katalog istemcisi ilk kez başlatıldığında (ve bu nedenle imleç değeri olmadığında), varsayılan imleç değerini kullanmalıdır. NET'ler System.DateTimeOffset.MinValue veya en düşük temsil edilebilir zaman damgası gibi benzer bir kavram.

Katalog öğeleri üzerinde yineleme

İşlenmesi gereken bir sonraki katalog öğeleri kümesini sorgulamak için istemcinin şunları yapması gerekir:

  1. Kaydedilen imleç değerini yerel bir depodan getirin.
  2. Katalog dizinini indirin ve seri durumdan kaldırın.
  3. İşleme zaman damgası imleçten büyük olan tüm katalog sayfalarını bulun.
  4. İşlenmek üzere katalog öğelerinin boş bir listesini bildirin.
  5. 3. adımda eşleşen her katalog sayfası için:
    1. Katalog sayfasını indirin ve seri durumdan kaldırın.
    2. İmleçten daha büyük işleme zaman damgasına sahip tüm katalog öğelerini bulun.
    3. Eşleşen tüm katalog öğelerini 4. adımda bildirilen listeye ekleyin.
  6. Katalog öğesi listesini işleme zaman damgasına göre sıralayın.
  7. Her katalog öğesini sırayla işleyin:
    1. Katalog öğesini indirin ve seri durumdan kaldırın.
    2. Katalog öğesinin türüne uygun şekilde tepki gösterin.
    3. Katalog öğesi belgesini istemciye özgü bir şekilde işleyin.
  8. Son katalog öğesinin işleme zaman damgasını yeni imleç değeri olarak kaydedin.

Bu temel algoritmayla, istemci uygulaması paket kaynağında kullanılabilen tüm paketlerin eksiksiz bir görünümünü oluşturabilir. İstemcinin her zaman paket kaynağındaki en son değişiklikleri bilmesi için bu algoritmayı düzenli aralıklarla yürütmesi gerekir.

Not

Bu, nuget.org Paket Meta Verileri, Paket İçeriği, Arama ve Otomatik Tamamlama kaynaklarını güncel tutmak için kullandığı algoritmadır.

Bağımlı imleçler

Bir istemcinin çıkışının başka bir istemcinin çıkışına bağlı olduğu, doğası gereği bağımlılığı olan iki katalog istemcisi olduğunu varsayalım.

Örnek

Örneğin, nuget.org yeni yayımlanan bir paket, paket meta veri kaynağında görünmeden önce arama kaynağında görünmemelidir. Bunun nedeni, resmi NuGet istemcisi tarafından gerçekleştirilen "geri yükleme" işleminin paket meta veri kaynağını kullanmasıdır. Bir müşteri arama hizmetini kullanarak bir paket bulursa, paket meta veri kaynağını kullanarak bu paketi başarıyla geri yükleyebilmesi gerekir. Başka bir deyişle, arama kaynağı paket meta veri kaynağına bağlıdır. Her kaynağın, bu kaynağı güncelleştiren bir katalog istemcisi arka plan işi vardır. Her istemcinin kendi imleci vardır.

Her iki kaynak da katalogdan oluşturulduğundan, arama kaynağını güncelleştiren katalog istemcisinin imleci paket meta veri kataloğu istemcisinin imlecinin ötesine geçmemelidir.

Algoritma

Bu kısıtlamayı uygulamak için yukarıdaki algoritmayı şu şekilde değiştirmeniz yeterlidir:

  1. Kaydedilen imleç değerini yerel bir depodan getirin.
  2. Katalog dizinini indirin ve seri durumdan kaldırın.
  3. İşleme zaman damgası imleçten büyük olan ve bağımlılığın imlecinden küçük veya buna eşit olan tüm katalog sayfalarını bulun.
  4. İşlenmek üzere katalog öğelerinin boş bir listesini bildirin.
  5. 3. adımda eşleşen her katalog sayfası için:
    1. Katalog sayfasını indirin ve seri durumdan kaldırın.
    2. İmleç, bağımlılığın imlecindenküçük veya buna eşit olan işleme zaman damgasına sahip tüm katalog öğelerini bulur.
    3. Eşleşen tüm katalog öğelerini 4. adımda bildirilen listeye ekleyin.
  6. Katalog öğesi listesini işleme zaman damgasına göre sıralayın.
  7. Her katalog öğesini sırayla işleyin:
    1. Katalog öğesini indirin ve seri durumdan kaldırın.
    2. Katalog öğesinin türüne uygun şekilde tepki gösterin.
    3. Katalog öğesi belgesini istemciye özgü bir şekilde işleyin.
  8. Son katalog öğesinin işleme zaman damgasını yeni imleç değeri olarak kaydedin.

Bu değiştirilmiş algoritmayı kullanarak, kendi dizinlerini, yapıtlarını vb. oluşturan bağımlı katalog istemcilerinden oluşan bir sistem oluşturabilirsiniz.