Condividi tramite


Metadati dei pacchetti

È possibile recuperare i metadati relativi ai pacchetti disponibili in un'origine del pacchetto usando l'API NuGet V3. Questi metadati possono essere recuperati usando la RegistrationsBaseUrl risorsa trovata nell'indice del servizio.

La raccolta dei documenti presenti in RegistrationsBaseUrl è spesso denominata "registrazioni" o "BLOB di registrazione". Il set di documenti in un singolo RegistrationsBaseUrl oggetto viene definito "hive di registrazione". Un hive di registrazione contiene metadati relativi a ogni pacchetto disponibile in un'origine del pacchetto.

Nota

La risorsa dei metadati del pacchetto non contiene tutti i metadati per i pacchetti. Usare la risorsa di ricerca per trovare i proprietari, i download o lo stato della prenotazione con prefisso dei pacchetti.

Controllo delle versioni

Vengono usati i valori seguenti @type :

Valore @type Note
RegistrationsBaseUrl Versione iniziale
RegistrationsBaseUrl/3.0.0-beta Alias di RegistrationsBaseUrl
RegistrationsBaseUrl/3.0.0-rc Alias di RegistrationsBaseUrl
RegistrationsBaseUrl/3.4.0 Risposte con gzipped
RegistrationsBaseUrl/3.6.0 Include pacchetti SemVer 2.0.0

Rappresenta tre hive di registrazione distinte disponibili per varie versioni client.

RegistrationsBaseUrl

Queste registrazioni non vengono compresse ( ovvero usano un implicito Content-Encoding: identity). I pacchetti SemVer 2.0.0 vengono esclusi da questo hive.

RegistrationsBaseUrl/3.4.0

Queste registrazioni vengono compresse tramite Content-Encoding: gzip. I pacchetti SemVer 2.0.0 vengono esclusi da questo hive.

RegistrationsBaseUrl/3.6.0

Queste registrazioni vengono compresse tramite Content-Encoding: gzip. I pacchetti SemVer 2.0.0 sono inclusi in questo hive. Per altre informazioni su SemVer 2.0.0, vedere Supporto semVer 2.0.0 per nuget.org.

URL di base

L'URL di base per le API seguenti è il valore della @id proprietà associata ai valori delle risorse menzionati in precedenza @type . Nel documento seguente verrà usato l'URL {@id} di base segnaposto. L'URL di base può cambiare in base alle modifiche dell'implementazione o dell'infrastruttura all'interno dell'origine del pacchetto, pertanto deve essere recuperato dinamicamente dall'indice del servizio dal software client.

Metodi HTTP

Tutti gli URL trovati nella risorsa di registrazione supportano i metodi GET HTTP e HEAD.

Indice di registrazione

I metadati del pacchetto dei gruppi di risorse di registrazione in base all'ID pacchetto. Non è possibile ottenere dati su più ID pacchetto alla volta. Questa risorsa non consente di individuare gli ID pacchetto. Si presuppone invece che il client conosca già l'ID del pacchetto desiderato. I metadati disponibili per ogni versione del pacchetto variano in base all'implementazione del server. I BLOB di registrazione del pacchetto hanno la struttura gerarchica seguente:

  • Indice: punto di ingresso per i metadati del pacchetto, condiviso da tutti i pacchetti in un'origine con lo stesso ID pacchetto.
  • Pagina: raggruppamento di versioni del pacchetto. Il numero di versioni del pacchetto in una pagina è definito dall'implementazione del server.
  • Foglia: documento specifico di una singola versione del pacchetto.

L'URL dell'indice di registrazione è prevedibile e può essere determinato dal client in base a un ID pacchetto e al valore della risorsa di registrazione dall'indice del @id servizio. Gli URL per le pagine di registrazione e le foglie vengono individuati controllando l'indice di registrazione.

Pagine di registrazione e foglie

Sebbene non sia strettamente necessario per un'implementazione del server archiviare le foglia di registrazione in documenti di pagina di registrazione separati, è consigliabile risparmiare memoria sul lato client. Invece di inlining di tutte le foglie di registrazione nell'indice o di archiviare immediatamente le foglie nei documenti di pagina, è consigliabile che l'implementazione del server definisci un'euristica tra i due approcci in base al numero di versioni del pacchetto o alla dimensione cumulativa delle foglie del pacchetto.

L'archiviazione di tutte le versioni del pacchetto (foglie) nell'indice di registrazione consente di risparmiare sul numero di richieste HTTP necessarie per recuperare i metadati del pacchetto, ma significa che è necessario scaricare un documento di dimensioni maggiori e allocare una quantità maggiore di memoria client. D'altra parte, se l'implementazione del server archivia immediatamente le foglie di registrazione in documenti di pagina separati, il client deve eseguire più richieste HTTP per ottenere le informazioni necessarie.

L'euristica utilizzata nuget.org è la seguente: se sono presenti 128 o più versioni di un pacchetto, suddividere le foglie in pagine di dimensioni 64. Se sono presenti meno di 128 versioni, inline tutte le foglie nell'indice di registrazione. Si noti che questo significa che i pacchetti con versioni da 65 a 127 avranno due pagine nell'indice, ma entrambe le pagine verranno inlinedi.

GET {@id}/{LOWER_ID}/index.json

Parametri della richiesta

Nome Tra Type Obbligatorio Note
LOWER_ID URL string yes ID pacchetto, in minuscolo

Il LOWER_ID valore è l'ID pacchetto desiderato in minuscolo usando le regole implementate da . Metodo di System.String.ToLowerInvariant() NET.

Response

La risposta è un documento JSON con un oggetto radice con le proprietà seguenti:

Nome Digita Obbligatorio Note
numero integer yes Numero di pagine di registrazione nell'indice
articoli matrice di oggetti yes Matrice di pagine di registrazione

Ogni elemento nella matrice dell'oggetto items index è un oggetto JSON che rappresenta una pagina di registrazione.

Oggetto pagina di registrazione

L'oggetto pagina di registrazione presente nell'indice di registrazione ha le proprietà seguenti:

Nome Digita Obbligatorio Note
@id string yes URL della pagina di registrazione
numero integer yes Numero di foglie di registrazione nella pagina
articoli matrice di oggetti no Matrice di foglie di registrazione e dei relativi metadati associati
lower string yes La versione più bassa di SemVer 2.0.0 nella pagina (inclusa)
parent string no URL dell'indice di registrazione
upper string yes Versione più alta di SemVer 2.0.0 nella pagina (inclusa)

I lower limiti e upper dell'oggetto pagina sono utili quando sono necessari i metadati per una versione di pagina specifica. Questi limiti possono essere usati per recuperare l'unica pagina di registrazione necessaria. Le stringhe di versione rispettano le regole di versione di NuGet. Le stringhe di versione vengono normalizzate e non includono i metadati di compilazione. Come per tutte le versioni nell'ecosistema NuGet, il confronto delle stringhe di versione viene implementato usando le regole di precedenza della versione di SemVer 2.0.0.

La parent proprietà verrà visualizzata solo se l'oggetto pagina di registrazione ha la items proprietà .

Se la items proprietà non è presente nell'oggetto pagina di registrazione, è necessario utilizzare l'URL specificato in @id per recuperare i metadati relativi alle singole versioni del pacchetto. La items matrice viene talvolta esclusa dall'oggetto pagina come ottimizzazione. Se il numero di versioni di un singolo ID pacchetto è molto grande, il documento di indice di registrazione sarà enorme e sprecato per elaborare per un client che si occupa solo di una versione specifica o di un intervallo ridotto di versioni.

Si noti che se la items proprietà è presente, la @id proprietà non deve essere utilizzata, poiché tutti i dati della pagina sono già inlined nella items proprietà .

Ogni elemento nella matrice dell'oggetto pagina items è un oggetto JSON che rappresenta una foglia di registrazione ed è associato ai metadati.

Oggetto foglia di registrazione in una pagina

L'oggetto foglia di registrazione trovato in una pagina di registrazione ha le proprietà seguenti:

Nome Digita Obbligatorio Note
@id string yes URL della foglia di registrazione
catalogEntry oggetto yes Voce del catalogo contenente i metadati del pacchetto
packageContent string yes URL del contenuto del pacchetto (.nupkg)

Ogni oggetto foglia di registrazione rappresenta i dati associati a una singola versione del pacchetto.

Voce del catalogo

La catalogEntry proprietà nell'oggetto foglia di registrazione ha le proprietà seguenti:

Nome Digita Obbligatorio Note
@id string yes URL del documento utilizzato per produrre questo oggetto
authors Stringa o matrice di stringhe no
dependencyGroups matrice di oggetti no Dipendenze del pacchetto, raggruppate per framework di destinazione
Disapprovazione object no Deprecazione associata al pacchetto
description stringa no
iconUrl string no
id string yes ID del pacchetto
lingua string no
licenseUrl string no
licenseExpression string no
disponibili boolean no Deve essere considerato come elencato se assente
minClientVersion string no
packageContent string no Duplicato della stessa proprietà nell'oggetto padre, incluso solo per motivi legacy
projectUrl string no
published string no Stringa contenente un timestamp ISO 8601 di quando il pacchetto è stato pubblicato
readmeUrl string no URL per la visualizzazione (pagina Web HTML) del pacchetto README
requireLicenseAcceptance boolean no
riepilogo string no
tag Stringa o matrice di stringhe no
title string no
versione string yes Stringa di versione completa dopo la normalizzazione
vulnerabilità matrice di oggetti no Vulnerabilità di sicurezza del pacchetto

La proprietà del pacchetto version è la stringa di versione completa dopo la normalizzazione. Ciò significa che i dati di compilazione semVer 2.0.0 possono essere inclusi qui.

La dependencyGroups proprietà è una matrice di oggetti che rappresentano le dipendenze del pacchetto, raggruppate per framework di destinazione. Se il pacchetto non ha dipendenze, la dependencyGroups proprietà è mancante, una matrice vuota o la dependencies proprietà di tutti i gruppi è vuota o mancante.

Il valore della licenseExpression proprietà è conforme alla sintassi dell'espressione di licenza NuGet.

Nota

In nuget.org, il valore viene impostato sull'anno published 1900 quando il pacchetto non è elencato.

Gruppo di dipendenze del pacchetto

Ogni oggetto gruppo di dipendenze ha le proprietà seguenti:

Nome Digita Obbligatorio Note
targetFramework string no Framework di destinazione a cui queste dipendenze sono applicabili
dipendenze matrice di oggetti no

La targetFramework stringa usa il formato implementato dalla libreria .NET di NuGet.Frameworks. Se non viene specificato alcun valore targetFramework , il gruppo di dipendenze si applica a tutti i framework di destinazione.

La dependencies proprietà è una matrice di oggetti, ognuno che rappresenta una dipendenza del pacchetto del pacchetto corrente.

Dipendenza del pacchetto

Ogni dipendenza del pacchetto ha le proprietà seguenti:

Nome Digita Obbligatorio Note
id string yes ID della dipendenza del pacchetto
range object no Intervallo di versioni consentito della dipendenza
registrazione string no URL dell'indice di registrazione per questa dipendenza

Se la range proprietà è esclusa o una stringa vuota, per impostazione predefinita il client deve essere impostato sull'intervallo (, )di versioni . Ovvero, è consentita qualsiasi versione della dipendenza. Il valore di * non è consentito per la range proprietà .

Deprecazione del pacchetto

Ogni deprecazione del pacchetto ha le proprietà seguenti:

Nome Digita Obbligatorio Note
Motivi matrice di stringhe yes I motivi per cui il pacchetto è stato deprecato
messaggio string no Dettagli aggiuntivi su questa deprecazione
alternatePackage object no Pacchetto alternativo da usare invece

La reasons proprietà deve contenere almeno una stringa e deve contenere solo stringhe della tabella seguente:

Motivo Descrizione
Legacy Il pacchetto non viene più gestito
CriticalBugs Il pacchetto presenta bug che lo rendono non adatto per l'utilizzo
Altro Il pacchetto è deprecato a causa di un motivo non incluso nell'elenco

Se la reasons proprietà contiene stringhe che non provengono dal set noto, devono essere ignorate. Le stringhe non fanno distinzione tra maiuscole e minuscole, quindi legacy devono essere considerate uguali a Legacy. Non esiste alcuna restrizione di ordinamento sulla matrice, quindi le stringhe possono essere disposte in qualsiasi ordine arbitrario. Inoltre, se la proprietà contiene solo stringhe che non provengono dal set noto, deve essere considerata come se conteneva solo la stringa "Other".

Pacchetto alternativo

L'oggetto pacchetto alternativo ha le proprietà seguenti:

Nome Digita Obbligatorio Note
id string yes ID del pacchetto alternativo
range object no Intervallo di versioni consentito o * se è consentita una versione

Vulnerabilità

Matrice di oggetti vulnerability. Ogni vulnerabilità ha le proprietà seguenti:

Nome Digita Obbligatorio Note
advisoryUrl string yes Posizione dell'avviso di sicurezza per il pacchetto
severity string yes Gravità dell'avviso: "0" = Basso, "1" = Moderato, "2" = Alto, "3" = Critico

Esempio di richiesta

GET https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json

Assicurarsi di recuperare l'URL di base (https://api.nuget.org/v3/registration-sample/ in questo esempio) dall'indice del servizio, come indicato nella sezione URL di base.

Risposta di esempio

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

In questo caso specifico, l'indice di registrazione ha la pagina di registrazione inlined in modo che non siano necessarie richieste aggiuntive per recuperare i metadati relativi alle singole versioni del pacchetto.

Pagina di registrazione

La pagina di registrazione contiene le foglie di registrazione. L'URL per recuperare una pagina di registrazione è determinato dalla @id proprietà nell'oggetto pagina di registrazione indicato in precedenza. L'URL non deve essere prevedibile e deve essere sempre individuato tramite il documento di indice.

Avviso

In nuget.org, l'URL del documento della pagina di registrazione contiene in modo casuale il limite inferiore e superiore della pagina. Tuttavia, questo presupposto non deve mai essere effettuato da un client poiché le implementazioni del server sono libere di modificare la forma dell'URL purché il documento di indice abbia un collegamento valido.

Quando la items matrice non viene specificata nell'indice di registrazione, una richiesta HTTP GET del @id valore restituirà un documento JSON con un oggetto come radice. Di seguito sono elencate le proprietà dell'oggetto :

Nome Digita Obbligatorio Note
@id string yes URL della pagina di registrazione
numero integer yes Numero di foglie di registrazione nella pagina
articoli matrice di oggetti yes Matrice di foglie di registrazione e dei relativi metadati associati
lower string yes La versione più bassa di SemVer 2.0.0 nella pagina (inclusa)
parent string yes URL dell'indice di registrazione
upper string yes Versione più alta di SemVer 2.0.0 nella pagina (inclusa)

La forma degli oggetti foglia di registrazione corrisponde a quella dell'indice di registrazione precedente.

Esempio di richiesta

GET https://api.nuget.org/v3/registration-sample/ravendb.client/page/1.0.531/1.0.729-unstable.json

Assicurarsi di recuperare l'URL di base (https://api.nuget.org/v3/registration-sample/ in questo esempio) dall'indice del servizio, come indicato nella sezione URL di base.

Risposta di esempio

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

Foglia di registrazione

La foglia di registrazione contiene informazioni su un ID pacchetto e una versione specifici. I metadati relativi alla versione specifica potrebbero non essere disponibili in questo documento. I metadati del pacchetto devono essere recuperati dall'indice di registrazione o dalla pagina di registrazione (individuata usando l'indice di registrazione).

L'URL per recuperare una foglia di registrazione viene ottenuto dalla @id proprietà di un oggetto foglia di registrazione in una pagina di registrazione o registrazione. Come per il documento della pagina. l'URL non deve essere prevedibile e deve essere sempre individuato tramite l'oggetto pagina di registrazione.

Avviso

In nuget.org, l'URL del documento foglia di registrazione contiene in modo casuale la versione del pacchetto. Tuttavia, questo presupposto non deve mai essere effettuato da un client perché le implementazioni del server sono libere di modificare la forma dell'URL purché il documento padre abbia un collegamento valido.

La foglia di registrazione è un documento JSON con un oggetto radice con le proprietà seguenti:

Nome Digita Obbligatorio Note
@id string yes URL della foglia di registrazione
catalogEntry string no URL della voce del catalogo che ha prodotto queste foglia
disponibili boolean no Deve essere considerato come elencato se assente
packageContent string no URL del contenuto del pacchetto (.nupkg)
published string no Stringa contenente un timestamp ISO 8601 di quando il pacchetto è stato pubblicato
registrazione string no URL dell'indice di registrazione

Nota

In nuget.org, il valore viene impostato sull'anno published 1900 quando il pacchetto non è elencato.

Esempio di richiesta

GET https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json

Assicurarsi di recuperare l'URL di base (https://api.nuget.org/v3/registration-sample/ in questo esempio) dall'indice del servizio, come indicato nella sezione URL di base.

Risposta di esempio

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