Metadata balíčků
Pomocí rozhraní API NuGet v3 je možné načíst metadata o balíčcích dostupných ve zdroji balíčku. Tato metadata lze načíst pomocí RegistrationsBaseUrl
prostředku nalezeného v indexu služby.
Kolekce nalezených dokumentů RegistrationsBaseUrl
se často označuje jako "registrace" nebo "objekty blob registrace". Sada dokumentů pod jedním RegistrationsBaseUrl
se označuje jako "hive registrace". Registrační podregistr obsahuje metadata o každém balíčku, který je k dispozici ve zdroji balíčku.
Poznámka:
Prostředek metadat balíčku neobsahuje všechna metadata pro balíčky. Pomocí vyhledávacího prostředku můžete vyhledat vlastníky balíčků, soubory ke stažení nebo stav rezervace předpony.
Vytváření verzí
Používají se následující @type
hodnoty:
@type Hodnotu | Notes |
---|---|
RegistrationsBaseUrl | Počáteční verze |
RegistrationsBaseUrl/3.0.0-beta | Alias of RegistrationsBaseUrl |
RegistrationsBaseUrl/3.0.0-rc | Alias of RegistrationsBaseUrl |
RegistrationsBaseUrl/3.4.0 | Odpovědi s Gzipped |
RegistrationsBaseUrl/3.6.0 | Obsahuje balíčky SemVer 2.0.0. |
Představuje tři různé podregistry registrace, které jsou k dispozici pro různé verze klienta.
RegistrationsBaseUrl
Tyto registrace nejsou komprimované (což znamená, že používají implicitní Content-Encoding: identity
). Balíčky SemVer 2.0.0 jsou z tohoto hivu vyloučené .
RegistrationsBaseUrl/3.4.0
Tyto registrace jsou komprimovány pomocí Content-Encoding: gzip
. Balíčky SemVer 2.0.0 jsou z tohoto hivu vyloučené .
RegistrationsBaseUrl/3.6.0
Tyto registrace jsou komprimovány pomocí Content-Encoding: gzip
. Balíčky SemVer 2.0.0 jsou součástí tohoto hivu.
Další informace o semVer 2.0.0 naleznete v tématu SemVer 2.0.0 podpora pro nuget.org.
Základní adresa URL
Základní adresa URL pro následující rozhraní API je hodnota @id
vlastnosti přidružené k výše uvedeným hodnotám prostředků @type
. V následujícím dokumentu se použije zástupná základní adresa URL {@id}
. Základní adresa URL se může změnit na základě změn implementace nebo infrastruktury ve zdroji balíčku, takže se musí dynamicky načítat z indexu služby klientským softwarem.
Metody HTTP
Všechny adresy URL nalezené v prostředku registrace podporují metody GET
HTTP a HEAD
.
Index registrace
Registrační prostředky seskupují metadata balíčku podle ID balíčku. Není možné získat data o více než jednom ID balíčku najednou. Tento prostředek neposkytuje žádný způsob, jak zjistit ID balíčků. Místo toho se předpokládá, že klient už zná id požadovaného balíčku. Dostupná metadata o jednotlivých verzích balíčků se liší podle implementace serveru. Objekty blob registrace balíčku mají následující hierarchickou strukturu:
- Index: vstupní bod metadat balíčku, který sdílí všechny balíčky ve zdroji se stejným ID balíčku.
- Stránka: seskupení verzí balíčků. Počet verzí balíčků na stránce je definován implementací serveru.
- List: dokument specifický pro jednu verzi balíčku.
Adresa URL indexu registrace je předvídatelná a klient může určit ID balíčku a hodnotu registračního prostředku @id
z indexu služby. Adresy URL registračních stránek a listů se zjistí kontrolou indexu registrace.
Registrační stránky a listy
I když není nezbytně nutné, aby implementace serveru ukládala listy registrace do samostatných registračních stránek dokumentů, doporučuje se šetřit paměť na straně klienta. Místo vložení všech registrací do indexu nebo okamžitého uložení listů do stránkových dokumentů se doporučuje, aby implementace serveru definovala několik heuristických metod, aby si zvolila mezi těmito dvěma přístupy na základě počtu verzí balíčku nebo kumulativní velikosti listů balíčku.
Uložení všech verzí balíčků (ponechá) v indexu registrace šetří počet požadavků HTTP potřebných k načtení metadat balíčku, ale znamená to, že se musí stáhnout větší dokument a musí být přiděleno více paměti klienta. Na druhou stranu, pokud implementace serveru okamžitě ukládá registrace listy v samostatných stránkových dokumentech, klient musí provádět více požadavků HTTP, aby získal informace, které potřebuje.
Heuristika, kterou nuget.org používá, je následující: pokud existuje 128 nebo více verzí balíčku, rozdělte listy na stránky velikosti 64. Pokud existuje méně než 128 verzí, vložte všechny listy do indexu registrace. Všimněte si, že to znamená, že balíčky s verzí 65 až 127 budou mít v indexu dvě stránky, ale obě stránky budou vloženy.
GET {@id}/{LOWER_ID}/index.json
Parametry požadavku
Název | V | Typ | Požaduje se | Notes |
---|---|---|---|---|
LOWER_ID | URL | string | ano | ID balíčku, s nižšími písmeny |
Hodnota LOWER_ID
je ID požadovaného balíčku s dolními písmeny pomocí pravidel implementovaných . System.String.ToLowerInvariant()
Metoda NET.
Response
Odpověď je dokument JSON, který má kořenový objekt s následujícími vlastnostmi:
Name | Type | Požaduje se | Notes |
---|---|---|---|
count | integer | ano | Počet registračních stránek v indexu |
položky | pole objektů | ano | Pole registračních stránek |
Každá položka v poli indexového objektu items
je objekt JSON představující registrační stránku.
Objekt registrační stránky
Objekt registrační stránky nalezený v indexu registrace má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
@id | string | ano | Adresa URL registrační stránky |
count | integer | ano | Počet opuštění registrace na stránce |
položky | pole objektů | ne | Pole registrací opustí a jejich přidružená metadata. |
Nižší | string | ano | Nejnižší verze SemVer 2.0.0 na stránce (včetně) |
parent | string | ne | Adresa URL indexu registrace |
Horní | string | ano | Nejvyšší verze SemVer 2.0.0 na stránce (včetně) |
Hranice lower
objektu upper
stránky jsou užitečné, když jsou potřebná metadata pro konkrétní verzi stránky.
Tyto hranice lze použít k načtení jediné požadované registrační stránky. Řetězce verzí dodržují pravidla verzí NuGetu. Řetězce verzí se normalizují a neobsahují metadata sestavení. Stejně jako u všech verzí v ekosystému NuGet se porovnávání řetězců verzí implementuje pomocí pravidel priority verzí se systémem SemVer 2.0.0.
Vlastnost parent
se zobrazí pouze v případě, že objekt registrační stránky má items
vlastnost.
items
Pokud vlastnost není přítomna v objektu registrační stránky, adresa URL zadaná v souboru @id
musí být použita k načtení metadat o jednotlivých verzích balíčků. Pole items
je někdy vyloučeno z objektu stránky jako optimalizace. Pokud je počet verzí jednoho ID balíčku velmi velký, bude dokument indexu registrace obrovský a plýtvání procesem pro klienta, který se stará pouze o konkrétní verzi nebo malý rozsah verzí.
Všimněte si, že pokud items
je vlastnost přítomna, @id
nemusí být použita, protože všechna data stránky jsou již vložena do items
vlastnosti.
Každá položka v poli objektu items
stránky je objekt JSON představující list registrace a přidružená metadata.
Objekt list registrace na stránce
Objekt list registrace nalezený na stránce registrace má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
@id | string | ano | Adresa URL registračního listu |
catalogEntry | objekt | ano | Položka katalogu obsahující metadata balíčku |
packageContent | string | ano | Adresa URL obsahu balíčku (.nupkg) |
Každý objekt typu list registrace představuje data přidružená k jedné verzi balíčku.
Položka katalogu
Vlastnost catalogEntry
v objektu list registrace má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
@id | string | ano | Adresa URL dokumentu použitého k vytvoření tohoto objektu |
Autoři | řetězec nebo pole řetězců | ne | |
dependencyGroups | pole objektů | ne | Závislosti balíčku seskupené podle cílové architektury |
Odmítání | objekt | ne | Vyřazení přidružené k balíčku |
description | string | ne | |
iconUrl | string | ne | |
ID | string | ano | ID balíčku |
jazyk | string | ne | |
licenseUrl | string | ne | |
licenseExpression | string | ne | |
uvedené v seznamu | boolean | ne | Měla by být považována za uvedená, pokud chybí |
minClientVersion | string | ne | |
packageContent | string | ne | Duplikát stejné vlastnosti v nadřazeného objektu, zahrnutý pouze z důvodu starší verze |
projectUrl | string | ne | |
Zveřejněna | string | ne | Řetězec obsahující časové razítko ISO 8601 při publikování balíčku |
readmeUrl | string | ne | Adresa URL vykresleného zobrazení (webová stránka HTML) souboru README balíčku |
requireLicenseAcceptance | boolean | ne | |
Souhrn | string | ne | |
značky | řetězec nebo pole řetězců | ne | |
title | string | ne | |
version | string | ano | Řetězec úplné verze po normalizaci |
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í.
Vlastnost dependencyGroups
je pole objektů představujících závislosti balíčku seskupené podle cílové architektury. Pokud balíček nemá žádné závislosti, dependencyGroups
vlastnost chybí, prázdné pole nebo dependencies
vlastnost všech skupin je prázdná nebo chybí.
Hodnota vlastnosti odpovídá syntaxi výrazu licenseExpression
licence NuGet.
Poznámka:
Při nuget.org je hodnota nastavena na rok 1900, published
pokud balíček není v seznamu.
Skupina závislostí balíčků
Každý objekt skupiny závislostí má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
Targetframework | string | ne | Cílová architektura, na kterou se tyto závislosti vztahují |
závislosti | pole objektů | ne |
Řetězec targetFramework
používá formát implementovaný knihovnou NuGet.Frameworks knihovny NuGet.Framework nuGet. Pokud není zadána žádná targetFramework
hodnota, skupina závislostí se vztahuje na všechny cílové architektury.
Vlastnost dependencies
je pole objektů, z nichž každý představuje závislost balíčku aktuálního balíčku.
Závislost balíčku
Každá závislost balíčku má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
ID | string | ano | ID závislosti balíčku |
range | objekt | ne | Povolený rozsah verzí závislosti |
registrace | string | ne | Adresa URL indexu registrace pro tuto závislost |
range
Pokud je vlastnost vyloučena nebo prázdný řetězec, měl by klient výchozí hodnotu rozsahu (, )
verzí . To znamená, že je povolená jakákoli verze závislosti. Hodnota *
vlastnosti není povolena range
.
Vyřazení balíčku
Vyřazení každého balíčku má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
Důvodů | pole řetězců | ano | Důvody, proč byl balíček zastaralý |
zpráva | string | ne | Další podrobnosti o tomto vyřazení |
alternatePackage | objekt | ne | Alternativní balíček, který by se měl použít |
Vlastnost reasons
musí obsahovat alespoň jeden řetězec a měla by obsahovat pouze řetězce z následující tabulky:
Důvod | Popis |
---|---|
Starší verze | Balíček se už neudržuje. |
CriticalBugs | Balíček obsahuje chyby, kvůli kterým není vhodné pro použití. |
Jiný důvod | Balíček je zastaralý kvůli důvodu, který není v tomto seznamu. |
reasons
Pokud vlastnost obsahuje řetězce, které nejsou ze známé sady, měly by být ignorovány. Řetězce nerozlišují malá a velká písmena, takže legacy
by měly být považovány za stejné jako Legacy
. U pole neexistuje žádné omezení řazení, takže řetězce mohou být uspořádány v libovolném pořadí. Navíc pokud vlastnost obsahuje pouze řetězce, které nejsou ze známé sady, měla by být považována za to, že obsahovala pouze řetězec "Jiné".
Alternativní balíček
Alternativní objekt balíčku má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
ID | string | ano | ID alternativního balíčku |
range | objekt | ne | Povolený rozsah verzí nebo * pokud je povolená nějaká verze |
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á |
Ukázkový požadavek
GET https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json
Nezapomeňte načíst základní adresu URL (https://api.nuget.org/v3/registration-sample/
v této ukázce) z indexu služby, jak je uvedeno v části základní adresy URL .
Ukázková odpověď
{
"count": 1,
"items": [
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json#page/3.0.0-beta/3.0.0-beta",
"count": 1,
"items": [
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.server.core/3.0.0-beta.json",
"catalogEntry": {
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json",
"authors": ".NET Foundation",
"dependencyGroups": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json#dependencygroup",
"dependencies": [
{
"@id": "https://api.nuget.org/v3/catalog0/data/2017.10.05.18.41.33/nuget.server.core.3.0.0-beta.json#dependencygroup/nuget.core",
"id": "NuGet.Core",
"range": "[2.14.0, )",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.core/index.json"
}
]
}
],
"description": "Core library for creating a Web Application used to host a simple NuGet feed",
"iconUrl": "",
"id": "NuGet.Server.Core",
"language": "",
"licenseUrl": "https://raw.githubusercontent.com/NuGet/NuGet.Server/dev/LICENSE.txt",
"listed": true,
"minClientVersion": "2.6",
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.server.core/3.0.0-beta/nuget.server.core.3.0.0-beta.nupkg",
"projectUrl": "https://github.com/NuGet/NuGet.Server",
"published": "2017-10-05T18:40:32.43+00:00",
"requireLicenseAcceptance": false,
"summary": "",
"tags": [ "" ],
"title": "",
"version": "3.0.0-beta",
"vulnerabilities": [
{
"advisoryUrl": "https://github.com/advisories/ABCD-1234-5678-9012",
"severity": "2"
}
]
},
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.server.core/3.0.0-beta/nuget.server.core.3.0.0-beta.nupkg",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json"
}
],
"lower": "3.0.0-beta",
"upper": "3.0.0-beta"
}
]
}
V tomto konkrétním případě má index registrace stránku registrace vloženou, takže k načtení metadat o jednotlivých verzích balíčků nejsou potřeba žádné další požadavky.
Registrační stránka
Registrační stránka obsahuje listy registrace. Adresa URL pro načtení registrační stránky je určena @id
vlastností v objektu registrační stránky uvedené výše. Adresa URL není předvídatelná a měla by být vždy zjištěna pomocí indexového dokumentu.
Upozorňující
V nuget.org adresa URL dokumentu registrační stránky shodou okolností obsahuje dolní a horní mez stránky. Tento předpoklad by však nikdy neměl provádět klient, protože implementace serveru mohou změnit tvar adresy URL, pokud má indexový dokument platný odkaz.
items
Pokud pole není k dispozici v indexu registrace, požadavek HTTP GET hodnoty @id
vrátí dokument JSON, který má objekt jako jeho kořen. Objekt má následující vlastnosti:
Name | Type | Požaduje se | Notes |
---|---|---|---|
@id | string | ano | Adresa URL registrační stránky |
count | integer | ano | Počet opuštění registrace na stránce |
položky | pole objektů | ano | Pole registrací opustí a jejich přidružená metadata. |
Nižší | string | ano | Nejnižší verze SemVer 2.0.0 na stránce (včetně) |
parent | string | ano | Adresa URL indexu registrace |
Horní | string | ano | Nejvyšší verze SemVer 2.0.0 na stránce (včetně) |
Tvar registračních objektů typu list je stejný jako v indexu registrace výše.
Ukázkový požadavek
GET https://api.nuget.org/v3/registration-sample/ravendb.client/page/1.0.531/1.0.729-unstable.json
Nezapomeňte načíst základní adresu URL (https://api.nuget.org/v3/registration-sample/
v této ukázce) z indexu služby, jak je uvedeno v části základní adresy URL .
Ukázková odpověď
{
"count": 2,
"lower": "1.0.531",
"parent": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json",
"upper": "1.0.729-unstable",
"items": [
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/1.0.531.json",
"@type": "Package",
"commitId": "e0b9ca79-75b5-414f-9e3e-de9534b5cfd1",
"commitTimeStamp": "2017-10-26T14:12:19.3439088Z",
"catalogEntry": {
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.11.38.37/nuget.protocol.v3.example.1.0.531.json",
"@type": "PackageDetails",
"authors": "NuGet.org Team",
"iconUrl": "https://www.nuget.org/Content/gallery/img/default-package-icon.svg",
"id": "NuGet.Protocol.V3.Example",
"licenseUrl": "http://www.opensource.org/licenses/ms-pl",
"listed": false,
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.531/nuget.protocol.v3.example.1.0.531.nupkg",
"projectUrl": "https://github.com/NuGet/NuGetGallery",
"published": "1900-01-01T00:00:00+00:00",
"requireLicenseAcceptance": true,
"title": "NuGet V3 Protocol Example",
"version": "1.0.531"
},
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.531/nuget.protocol.v3.example.1.0.531.nupkg",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json"
},
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/1.0.729-unstable.json",
"@type": "Package",
"commitId": "e0b9ca79-75b5-414f-9e3e-de9534b5cfd1",
"commitTimeStamp": "2017-10-26T14:12:19.3439088Z",
"catalogEntry": {
"@id": "https://api.nuget.org/v3/catalog0/data/2015.02.01.18.22.05/nuget.protocol.v3.example.1.0.729-unstable.json",
"@type": "PackageDetails",
"authors": "NuGet.org Team",
"deprecation": {
"reasons": [
"CriticalBugs"
],
"message": "This package is unstable and broken!",
"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",
"licenseUrl": "http://www.opensource.org/licenses/ms-pl",
"listed": false,
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.729-unstable/nuget.protocol.v3.example.1.0.729-unstable.nupkg",
"projectUrl": "https://github.com/NuGet/NuGetGallery",
"published": "1900-01-01T00:00:00+00:00",
"requireLicenseAcceptance": true,
"summary": "This package is an example for the V3 protocol.",
"title": "NuGet V3 Protocol Example",
"version": "1.0.729-Unstable"
},
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.protocol.v3.example/1.0.729-unstable/nuget.protocol.v3.example.1.0.729-unstable.nupkg",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.protocol.v3.example/index.json"
}
]
}
List registrace
List registrace obsahuje informace o konkrétním ID a verzi balíčku. Metadata o konkrétní verzi nemusí být v tomto dokumentu dostupná. Metadata balíčku by se měla načíst z indexu registrace nebo ze stránky registrace (která se zjistí pomocí indexu registrace).
Adresa URL pro načtení registračního listu se získá z @id
vlastnosti objektu typu list registrace na registračním indexu nebo registrační stránce. Stejně jako u dokumentu stránky. adresa URL není předvídatelná a měla by být vždy zjištěna pomocí objektu registrační stránky.
Upozorňující
V nuget.org adresa URL dokumentu typu list registrace obsahuje shodou okolností verzi balíčku. Tento předpoklad by však nikdy neměl provádět klient, protože implementace serveru mohou změnit tvar adresy URL, pokud má nadřazený dokument platný odkaz.
List registrace je dokument JSON s kořenovým objektem s následujícími vlastnostmi:
Name | Type | Požaduje se | Notes |
---|---|---|---|
@id | string | ano | Adresa URL registračního listu |
catalogEntry | string | ne | Adresa URL položky katalogu, která vytvořila tento list |
uvedené v seznamu | boolean | ne | Měla by být považována za uvedená, pokud chybí |
packageContent | string | ne | Adresa URL obsahu balíčku (.nupkg) |
Zveřejněna | string | ne | Řetězec obsahující časové razítko ISO 8601 při publikování balíčku |
registrace | string | ne | Adresa URL indexu registrace |
Poznámka:
Při nuget.org je hodnota nastavena na rok 1900, published
pokud balíček není v seznamu.
Ukázkový požadavek
GET https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json
Nezapomeňte načíst základní adresu URL (https://api.nuget.org/v3/registration-sample/
v této ukázce) z indexu služby, jak je uvedeno v části základní adresy URL .
Ukázková odpověď
{
"@id": "https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json",
"catalogEntry": "https://api.nuget.org/v3/catalog0/data/2017.08.11.18.24.22/nuget.versioning.4.3.0.json",
"listed": true,
"packageContent": "https://api.nuget.org/v3-flatcontainer/nuget.versioning/4.3.0/nuget.versioning.4.3.0.nupkg",
"published": "2017-08-11T18:24:14.36+00:00",
"registration": "https://api.nuget.org/v3/registration-sample/nuget.versioning/index.json"
}