Katalog

Katalog je prostředek, který zaznamenává všechny operace balíčků ve zdroji balíčku, například vytváření a odstraňování. Prostředek katalogu má Catalog typ v indexu služby. Tento prostředek můžete použít k dotazování na všechny publikované balíčky.

Poznámka:

Vzhledem k tomu, že katalog není používán oficiálním klientem NuGet, ne všechny zdroje balíčků implementují katalog.

Poznámka:

V současné době není katalog nuget.org k dispozici v Číně. Další podrobnosti najdete v tématu NuGet/NuGetGallery#4949.

Vytváření verzí

Použije se následující @type hodnota:

@type Hodnotu Notes
Katalog/3.0.0 Počáteční verze

Základní adresa URL

Adresa URL vstupního @id bodu pro následující rozhraní API je hodnota vlastnosti přidružené k výše uvedeným hodnotám prostředků @type . Toto téma používá zástupnou adresu URL {@id}.

Metody HTTP

Všechny adresy URL nalezené v prostředku katalogu podporují pouze metody GET HTTP a HEAD.

Index katalogu

Index katalogu je dokument ve známém umístění se seznamem položek katalogu seřazených chronologicky. Jedná se o vstupní bod prostředku katalogu.

Index se skládá ze stránek katalogu. Každá stránka katalogu obsahuje položky katalogu. Každá položka katalogu představuje událost týkající se jednoho balíčku v okamžiku v čase. Položka katalogu může představovat balíček, který byl vytvořen, neveřejně zařazen, relistován nebo odstraněn ze zdroje balíčku. Díky zpracování položek katalogu v chronologickém pořadí může klient vytvořit aktuální zobrazení všech balíčků, které existují ve zdroji balíčku V3.

Objekty blob katalogu mají stručně následující hierarchickou strukturu:

  • Index: vstupní bod katalogu.
  • Stránka: seskupení položek katalogu.
  • List: dokument představující položku katalogu, což je snímek stavu jednoho balíčku.

Každý objekt katalogu má vlastnost, která se nazývá commitTimeStamp reprezentace při přidání položky do katalogu. Položky katalogu se přidají na stránku katalogu v dávkách označovaných jako potvrzení. Všechny položky katalogu ve stejném potvrzení mají stejné časové razítko potvrzení (commitTimeStamp) a ID potvrzení (commitId). Položky katalogu umístěné ve stejném potvrzení představují události, ke kterým došlo přibližně ke stejnému bodu v čase ve zdroji balíčku. V potvrzení katalogu není žádné řazení.

Vzhledem k tomu, že každé ID balíčku a verze jsou jedinečné, nebude v potvrzení nikdy více než jedna položka katalogu. Tím zajistíte, že položky katalogu pro jeden balíček lze vždy jednoznačně uspořádat s ohledem na časové razítko potvrzení.

V katalogu nikdy není více než jedno potvrzení na každý commitTimeStamp. Jinými slovy, je commitId redundantní s commitTimeStamp.

Na rozdíl od prostředku metadat balíčku, který je indexován podle ID balíčku, je katalog indexován (a dotazovatelný) pouze časově.

Položky katalogu se vždy přidávají do katalogu v monotonicky rostoucím chronologickém pořadí. To znamená, že pokud je potvrzení katalogu přidáno v čase X, nebude přidáno žádné potvrzení katalogu s časem kratším nebo rovno X.

Následující požadavek načte index katalogu.

GET {@id}

Index katalogu je dokument JSON, který obsahuje objekt s následujícími vlastnostmi:

Name Type Požaduje se Notes
commitId string ano Jedinečné ID přidružené k nejnovějšímu potvrzení
commitTimeStamp string ano Časové razítko posledního potvrzení
count integer ano Počet stránek v indexu
položky pole objektů ano Pole objektů, každý objekt představující stránku

Každý prvek v items poli je objekt s několika minimálními podrobnostmi o každé stránce. Tyto objekty stránky neobsahují listy katalogu (položky). Pořadí prvků v tomto poli není definováno. Stránky může klient uspořádat v paměti pomocí své commitTimeStamp vlastnosti.

Při zavádění count nových stránek se zvýší a v items poli se zobrazí nové objekty.

Při přidávání položek do katalogu se index commitId změní a zvýší se commitTimeStamp . Tyto dvě vlastnosti jsou v podstatě souhrnem všech stránek commitId a commitTimeStamp hodnot v items poli.

Objekt stránky katalogu v indexu

Objekty stránky katalogu nalezené ve vlastnosti indexu items katalogu mají následující vlastnosti:

Name Type Požaduje se Notes
@id string ano Adresa URL pro načtení stránky katalogu
commitId string ano Jedinečné ID přidružené k nejnovějšímu potvrzení na této stránce
commitTimeStamp string ano Časové razítko posledního potvrzení na této stránce
count integer ano Počet položek na stránce katalogu

Na rozdíl od prostředku metadat balíčku, který v některých případech vložené listy do indexu, listy katalogu nejsou nikdy vloženy do indexu a musí být vždy načteny pomocí adresy URL stránky @id .

Ukázkový požadavek

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

Ukázková odpověď

{
  "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
    }
  ]
}

Stránka katalogu

Stránka katalogu je kolekce položek katalogu. Jedná se o dokument načtený pomocí jedné z @id hodnot nalezených v indexu katalogu. Adresa URL stránky katalogu není určená k předvídatelnosti a měla by být zjištěna pouze pomocí indexu katalogu.

Nové položky katalogu se přidají na stránku v indexu katalogu pouze s nejvyšším časovým razítkem potvrzení nebo na novou stránku. Po přidání stránky s vyšším časovým razítkem potvrzení do katalogu se starší stránky nikdy nepřidají ani nezmění.

Dokument stránky katalogu je objekt JSON s následujícími vlastnostmi:

Name Type Požaduje se Notes
commitId string ano Jedinečné ID přidružené k nejnovějšímu potvrzení na této stránce
commitTimeStamp string ano Časové razítko posledního potvrzení na této stránce
count integer ano Počet položek na stránce
položky pole objektů ano Položky katalogu na této stránce
parent string ano Adresa URL indexu katalogu

Každý prvek v items poli je objekt s několika minimálními podrobnostmi o položce katalogu. Tyto objekty položek neobsahují všechna data položky katalogu. Pořadí položek v poli stránky items není definováno. Položky mohou být objednány klientem v paměti pomocí jejich commitTimeStamp vlastnosti.

Počet položek katalogu na stránce je definován implementací serveru. U nuget.org je na každé stránce nejvýše 550 položek, i když skutečné číslo může být pro některé stránky menší v závislosti na velikosti další dávky potvrzení v okamžiku v čase.

Při zavádění count nových položek se zvýší a v poli se zobrazí items nové objekty položek katalogu.

Když se položky přidají na stránku, změní se commitId a zvýší se commitTimeStamp . Tyto dvě vlastnosti jsou v podstatě souhrnem všech commitId hodnot v commitTimeStampitems poli.

Objekt položky katalogu na stránce

Objekty položek katalogu nalezené ve vlastnosti stránky items katalogu mají následující vlastnosti:

Name Type Požaduje se Notes
@id string ano Adresa URL pro načtení položky katalogu
@type string ano Typ položky katalogu
commitId string ano ID potvrzení přidružené k této položce katalogu
commitTimeStamp string ano Časové razítko potvrzení této položky katalogu
nuget:id string ano ID balíčku, se kterým tento list souvisí
nuget:version string ano Verze balíčku, se kterou tento list souvisí

Hodnota @type bude jedna z následujících dvou hodnot:

  1. nuget:PackageDetails: Odpovídá PackageDetails typu v dokumentu typu list katalogu.
  2. nuget:PackageDelete: Odpovídá PackageDelete typu v dokumentu typu list katalogu.

Další podrobnosti o tom, co jednotlivé typy znamenají, najdete v následujícím typu odpovídajících položek.

Ukázkový požadavek

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

Ukázková odpověď

{
  "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"
    }
  ]
}

List katalogu

List katalogu obsahuje metadata o konkrétním ID a verzi balíčku v určitém okamžiku. Jedná se o dokument načtený pomocí @id hodnoty nalezené na stránce katalogu. Adresa URL listu katalogu není určená k předvídatelnosti a měla by být zjištěna pouze pomocí stránky katalogu.

Dokument typu list katalogu je objekt JSON s následujícími vlastnostmi:

Name Type Požaduje se Notes
@type řetězec nebo pole řetězců ano Typy položek katalogu
catalog:commitId string ano ID potvrzení přidružené k této položce katalogu
catalog:commitTimeStamp string ano Časové razítko potvrzení této položky katalogu
ID string ano ID balíčku položky katalogu
Zveřejněna string ano Datum publikování položky katalogu balíčků
version string ano Verze balíčku položky katalogu

Typy položek

Vlastnost @type je řetězec nebo pole řetězců. Pro usnadnění, pokud @type je hodnota řetězec, měla by být považována za libovolnou matici velikosti 1. Nejsou zdokumentované všechny možné hodnoty @type . Každá položka katalogu má však přesně jednu ze dvou následujících hodnot typu řetězce:

  1. PackageDetails: představuje snímek metadat balíčku.
  2. PackageDelete: představuje odstraněný balíček.

Položky katalogu podrobností balíčku

Položky katalogu s typem PackageDetails obsahují snímek metadat balíčku pro konkrétní balíček (id a kombinaci verzí). Položka katalogu podrobností balíčku se vytvoří, když zdroj balíčku narazí na některý z následujících scénářů:

  1. Balíček se nasdílí.
  2. Balíček se znovu vyčte.
  3. Balíček není v seznamu.
  4. Balíček je zastaralý.
  5. Balíček je nedeprecated.
  6. Balíček se přeformátuje.
  7. Aktualizuje se stav ohrožení zabezpečení balíčku.

Přeformátování balíčku je gesto správy, které v podstatě generuje falešné nasdílení existujícího balíčku beze změn samotného balíčku. Při nuget.org se po opravě chyby v některé z úloh na pozadí, které využívají katalog, použije přeformátování.

Klienti, kteří využívají položky katalogu, by se neměli pokoušet určit, které z těchto scénářů vytvořila položku katalogu. Místo toho by klient měl jednoduše aktualizovat jakékoli udržované zobrazení nebo index s metadaty obsaženými v položce katalogu. Duplicitní nebo redundantní položky katalogu by se měly zpracovávat elegantně (idempotentní).

Položky katalogu podrobností balíčku mají kromě těch, které jsou součástí všech listů katalogu, následující vlastnosti.

Name Type Požaduje se Notes
Autoři string ne
Vytvořen string ne Časové razítko prvního vytvoření balíčku. Náhradní vlastnost: published.
dependencyGroups pole objektů ne Závislosti balíčku seskupené podle cílové architektury (stejný formát jako prostředek metadat balíčku)
Odmítání objekt ne Vyřazení přidružené k balíčku (stejný formát jako prostředek metadat balíčku)
description string ne
iconUrl string ne
isPrerelease boolean ne Bez ohledu na to, jestli je verze balíčku předběžná. Lze zjistit z version.
jazyk string ne
licenseUrl string ne
uvedené v seznamu boolean ne Zda je balíček uveden nebo není uvedený
minClientVersion string ne
packageHash string ano Hodnota hash balíčku, kódování pomocí standardního základu 64
packageHashAlgorithm string ano
packageSize integer ano Velikost balíčku .nupkg v bajtech
packageTypes pole objektů ne Typy balíčků určené autorem.
projectUrl string ne
releaseNotes string ne
requireLicenseAgreement boolean ne Předpokládejme false , že je vyloučeno.
Souhrn string ne
značky pole řetězců ne
title string ne
doslovná verze string ne Řetězec verze, který byl původně nalezen v souboru .nuspec
Chyby zabezpečení pole objektů ne Ohrožení zabezpečení balíčku

Vlastnost balíčku version je řetězec úplné verze po normalizaci. To znamená, že semVer 2.0.0 může obsahovat data sestavení.

Časové created razítko je, když byl balíček poprvé přijat zdrojem balíčku, což je obvykle krátkou dobu před časovým razítkem potvrzení položky katalogu.

Jedná se packageHashAlgorithm o řetězec definovaný implementací serveru představující algoritmus hash použitý k vytvoření packageHash. nuget.org vždy použil packageHashAlgorithm hodnotu SHA512.

Vlastnost packageTypes bude k dispozici pouze v případě, že autor zadal typ balíčku. Pokud je k dispozici, bude mít vždy alespoň jednu (1) položku. Každá položka v packageTypes poli je objekt JSON s následujícími vlastnostmi:

Name Type Požaduje se Notes
name string ano Název typu balíčku.
version string ne Verze typu balíčku. Existuje pouze v případě, že autor explicitně zadal verzi v nuspec.

Časové razítko published je čas posledního uvedení balíčku.

Poznámka:

V nuget.org published je hodnota nastavena na rok 1900, pokud balíček není v seznamu.

Ohrožení zabezpečení

Pole vulnerability objektů. Každé ohrožení zabezpečení má následující vlastnosti:

Name Type Požaduje se Notes
advisoryUrl string ano Umístění poradce pro zabezpečení balíčku
závažnost string ano Závažnost poradenství: "0" = Nízká, "1" = Střední, "2" = Vysoká, "3" = Kritická

severity Pokud vlastnost obsahuje jiné hodnoty, než jsou zde uvedené, je závažnost doporučení považována za Nízkou.

Ukázkový požadavek

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

Ukázková odpověď

{
  "@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"
    }
  ]
}

Odstranění položek katalogu balíčku

Položky katalogu s typem PackageDelete obsahují minimální sadu informací označujících klientům katalogu, že balíček byl odstraněn ze zdroje balíčku a již není k dispozici pro žádnou operaci balíčku (například obnovení).

Poznámka:

Balíček je možné odstranit a později znovu publikovat pomocí stejného ID a verze balíčku. Na nuget.org je to velmi vzácný případ, protože porušuje předpoklad oficiálního klienta, že ID balíčku a verze naznačují konkrétní obsah balíčku. Další informace o odstraňování balíčků v nuget.org najdete v našich zásadách.

Kromě položek katalogu, které jsou součástí všech listů katalogu, nejsou k dispozici žádné další vlastnosti.

Vlastnost version je původní řetězec verze nalezen v balíčku .nuspec.

Vlastnost published je čas, kdy byl balíček odstraněn, což je obvykle krátký čas před časovým razítkem potvrzení položky katalogu.

Ukázkový požadavek

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

Ukázková odpověď

{
  "@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"
}

Kurzor

Přehled

Tato část popisuje koncept klienta, který sice nemusí nutně znamenat, že by měl být součástí jakékoli praktické implementace klienta katalogu.

Vzhledem k tomu, že katalog je datová struktura jen pro připojení indexovaná časem, klient by měl uložit kurzor místně, který představuje až do okamžiku, kdy klient zpracoval položky katalogu. Všimněte si, že tato hodnota kurzoru by neměla být nikdy generována pomocí hodin počítače klienta. Místo toho by hodnota měla pocházet z hodnoty objektu commitTimestamp katalogu.

Pokaždé, když klient chce zpracovat nové události ve zdroji balíčku, potřebuje dotazovat pouze katalog pro všechny položky katalogu s časovým razítkem potvrzení větší než jeho uložený kurzor. Jakmile klient úspěšně zpracuje všechny nové položky katalogu, zaznamená nejnovější časové razítko potvrzení položek katalogu, které se právě zpracuje jako nová hodnota kurzoru.

Pomocí tohoto přístupu si klient může být jist, že nikdy nezmešká žádné události balíčku, ke kterým došlo ve zdroji balíčku. Kromě toho klient nikdy nemusí znovu zpracovávat staré události před zaznamenaným časovým razítkem potvrzení kurzoru.

Tento výkonný koncept kurzorů se používá pro řadu úloh na pozadí nuget.org a slouží k udržování samotného rozhraní API V3 v aktualizovaném stavu.

Počáteční hodnota

Když se klient katalogu spouští poprvé (a proto nemá hodnotu kurzoru), měl by použít výchozí hodnotu kurzoru . System.DateTimeOffset.MinValue NET nebo nějaká podobná představa minimálního reprezentovatelného časového razítka.

Iterace položek katalogu

Pokud chcete zadat dotaz na další sadu položek katalogu ke zpracování, klient by měl:

  1. Načtěte zaznamenanou hodnotu kurzoru z místního úložiště.
  2. Stáhněte a deserializovat index katalogu.
  3. Vyhledá všechny stránky katalogu s časovým razítkem potvrzení větší než kurzor.
  4. Deklarujte prázdný seznam položek katalogu, které se mají zpracovat.
  5. Pro každou stránku katalogu, která odpovídá kroku 3:
    1. Stáhněte a deserializovali stránku katalogu.
    2. Vyhledejte všechny položky katalogu s časovým razítkem potvrzení větší než kurzor.
    3. Přidejte všechny odpovídající položky katalogu do seznamu deklarovaného v kroku 4.
  6. Seřaďte seznam položek katalogu podle časového razítka potvrzení.
  7. Zpracovat každou položku katalogu v posloupnosti:
    1. Stáhněte a deserializovat položku katalogu.
    2. Odpovídajícím způsobem reagovat na typ položky katalogu.
    3. Zpracovat dokument položky katalogu způsobem specifickým pro klienta.
  8. Poznamenejte si časové razítko potvrzení poslední položky katalogu jako novou hodnotu kurzoru.

Díky tomuto základnímu algoritmu může implementace klienta vytvořit kompletní zobrazení všech balíčků dostupných ve zdroji balíčku. Klient musí tento algoritmus spouštět jen pravidelně, aby vždy věděl o nejnovějších změnách zdroje balíčku.

Poznámka:

Jedná se o algoritmus, který nuget.org používá k udržování aktuálních prostředků metadat balíčku, obsahu balíčku, vyhledávání a automatického dokončování.

Závislé kurzory

Předpokládejme, že existují dva klienti katalogu, kteří mají vlastní závislost, kdy výstup jednoho klienta závisí na výstupu jiného klienta.

Příklad

Například na nuget.org nově publikovaný balíček by se neměl zobrazovat ve vyhledávacím prostředku předtím, než se objeví v prostředku metadat balíčku. Důvodem je to, že operace obnovení prováděná oficiálním klientem NuGet používá prostředek metadat balíčku. Pokud zákazník zjistí balíček pomocí vyhledávací služby, měl by být schopen tento balíček úspěšně obnovit pomocí prostředku metadat balíčku. Jinými slovy, vyhledávací prostředek závisí na prostředku metadat balíčku. Každý prostředek má úlohu na pozadí klienta katalogu, která tento prostředek aktualizuje. Každý klient má svůj vlastní kurzor.

Vzhledem k tomu, že oba prostředky jsou sestaveny z katalogu, kurzor klienta katalogu, který aktualizuje vyhledávací prostředek , nesmí jít za kurzor klienta katalogu metadat balíčku.

Algoritmus

Pokud chcete toto omezení implementovat, jednoduše upravte výše uvedený algoritmus takto:

  1. Načtěte zaznamenanou hodnotu kurzoru z místního úložiště.
  2. Stáhněte a deserializovat index katalogu.
  3. Vyhledá všechny stránky katalogu s časovým razítkem potvrzení, které je větší než kurzor menší nebo roven kurzoru závislosti.
  4. Deklarujte prázdný seznam položek katalogu, které se mají zpracovat.
  5. Pro každou stránku katalogu, která odpovídá kroku 3:
    1. Stáhněte a deserializovali stránku katalogu.
    2. Vyhledá všechny položky katalogu s časovým razítkem potvrzení, které je větší než kurzor menší nebo roven kurzoru závislosti.
    3. Přidejte všechny odpovídající položky katalogu do seznamu deklarovaného v kroku 4.
  6. Seřaďte seznam položek katalogu podle časového razítka potvrzení.
  7. Zpracovat každou položku katalogu v posloupnosti:
    1. Stáhněte a deserializovat položku katalogu.
    2. Odpovídajícím způsobem reagovat na typ položky katalogu.
    3. Zpracovat dokument položky katalogu způsobem specifickým pro klienta.
  8. Poznamenejte si časové razítko potvrzení poslední položky katalogu jako novou hodnotu kurzoru.

Pomocí tohoto upraveného algoritmu můžete vytvořit systém závislých klientů katalogu, kteří vytvářejí vlastní specifické indexy, artefakty atd.