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.
Aşağıdaki @type
değer kullanılır:
@type Değer | Notlar |
---|---|
Katalog/3.0.0 | İlk sürüm |
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.
Katalog kaynağında bulunan tüm URL'ler yalnızca ve HEAD
HTTP yöntemlerini desteklerGET
.
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 commitTimeStamp
biri için hiçbir zaman birden fazla işleme yoktur. Başka bir deyişle, commitId
ile commitTimeStamp
yedeklidir.
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.
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.
GET https://api.nuget.org/v3/catalog0/index.json
{
"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 öğ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.
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:
nuget:PackageDetails
: bu, katalog yaprak belgesindeki türePackageDetails
karşılık gelir.nuget:PackageDelete
: bu, katalog yaprak belgesindeki türe karşılık gelirPackageDelete
.
Her türün ne anlama geldiğini öğrenmek için aşağıdaki ilgili öğe türüne bakın.
GET https://api.nuget.org/v3/catalog0/page2926.json
{
"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ğı 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ü |
@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:
PackageDetails
: paket meta verilerinin anlık görüntüsünü temsil ederPackageDelete
: silinmiş bir paketi temsil eder
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:
- Bir paket gönderiliyor.
- Bir paket yeniden listelendi.
- Paket listelenmemiş.
- Paket kullanım dışı bırakıldı.
- Paket kullanım dışıdır.
- Paket yeniden akıtılır.
- 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 version algı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 SHA512
kullandı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.
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.
GET https://api.nuget.org/v3/catalog0/data/2015.02.01.11.18.40/windowsazure.storage.1.0.0.json
{
"@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"
}
]
}
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.
GET https://api.nuget.org/v3/catalog0/data/2017.11.02.00.40.00/netstandard1.4_lib.1.0.0-test.json
{
"@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"
}
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.
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.
İşlenmesi gereken bir sonraki katalog öğeleri kümesini sorgulamak için istemcinin şunları yapması gerekir:
- Kaydedilen imleç değerini yerel bir depodan getirin.
- Katalog dizinini indirin ve seri durumdan kaldırın.
- İşleme zaman damgası imleçten büyük olan tüm katalog sayfalarını bulun.
- İşlenmek üzere katalog öğelerinin boş bir listesini bildirin.
- 3. adımda eşleşen her katalog sayfası için:
- Katalog sayfasını indirin ve seri durumdan kaldırın.
- İmleçten daha büyük işleme zaman damgasına sahip tüm katalog öğelerini bulun.
- Eşleşen tüm katalog öğelerini 4. adımda bildirilen listeye ekleyin.
- Katalog öğesi listesini işleme zaman damgasına göre sıralayın.
- Her katalog öğesini sırayla işleyin:
- Katalog öğesini indirin ve seri durumdan kaldırın.
- Katalog öğesinin türüne uygun şekilde tepki gösterin.
- Katalog öğesi belgesini istemciye özgü bir şekilde işleyin.
- 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.
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.
Ö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.
Bu kısıtlamayı uygulamak için yukarıdaki algoritmayı şu şekilde değiştirmeniz yeterlidir:
- Kaydedilen imleç değerini yerel bir depodan getirin.
- Katalog dizinini indirin ve seri durumdan kaldırın.
- İş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.
- İşlenmek üzere katalog öğelerinin boş bir listesini bildirin.
- 3. adımda eşleşen her katalog sayfası için:
- Katalog sayfasını indirin ve seri durumdan kaldırın.
- İmleç, bağımlılığın imlecindenküçük veya buna eşit olan işleme zaman damgasına sahip tüm katalog öğelerini bulur.
- Eşleşen tüm katalog öğelerini 4. adımda bildirilen listeye ekleyin.
- Katalog öğesi listesini işleme zaman damgasına göre sıralayın.
- Her katalog öğesini sırayla işleyin:
- Katalog öğesini indirin ve seri durumdan kaldırın.
- Katalog öğesinin türüne uygun şekilde tepki gösterin.
- Katalog öğesi belgesini istemciye özgü bir şekilde işleyin.
- 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.