Metadados de pacote
É possível buscar metadados sobre os pacotes disponíveis em uma origem de pacote usando a API do NuGet V3. Esses metadados podem ser obtidos usando o recurso RegistrationsBaseUrl
encontrado no índice de serviço.
A coleção dos documentos encontrados em RegistrationsBaseUrl
são muitas vezes chamados de “registros” ou “blobs de registro”. O conjunto de documentos sob um único RegistrationsBaseUrl
é chamado de “hive de registro”. Um hive de registro contém metadados sobre cada pacote disponível em uma origem do pacote.
Observação
O recurso de metadados do pacote não contém todos os metadados para pacotes. Use o recurso de pesquisa para localizar proprietários, downloads ou status de reserva de prefixo de pacotes.
Controle de versão
Os seguintes valores de @type
são usados:
@type valor | Observações |
---|---|
RegistrationsBaseUrl | O lançamento inicial |
RegistrationsBaseUrl/3.0.0-beta | Alias de RegistrationsBaseUrl |
RegistrationsBaseUrl/3.0.0-rc | Alias de RegistrationsBaseUrl |
RegistrationsBaseUrl/3.4.0 | Respostas do gzip |
RegistrationsBaseUrl/3.6.0 | Inclui pacotes do SemVer 2.0.0 |
Isso representa três hives de registro distintos disponíveis para várias versões de clientes.
RegistrationsBaseUrl
Esses registros não são compactados (o que significa que eles usam um Content-Encoding: identity
implícito). Os pacotes do SemVer 2.0.0 estão excluídos deste hive.
RegistrationsBaseUrl/3.4.0
Esses registros são compactados usando Content-Encoding: gzip
. Os pacotes do SemVer 2.0.0 estão excluídos deste hive.
RegistrationsBaseUrl/3.6.0
Esses registros são compactados usando Content-Encoding: gzip
. Os pacotes SemVer 2.0.0 estão incluídos neste hive.
Para obter mais informações sobre o SemVer 2.0.0, consulte Suporte do SemVer 2.0.0 para nuget.org.
URL base
A URL base para as APIs a seguir é o valor da propriedade @id
associada aos valores de @type
de recurso mencionados anteriormente. No documento a seguir, a URL base {@id}
do espaço reservado será usada. A URL base pode ser alterada com base na implementação ou nas alterações de infraestrutura dentro da origem do pacote, portanto, ela deve ser buscada dinamicamente no índice de serviço pelo software cliente.
Métodos HTTP
Todos os URLs encontrados no recurso de registro são compatíveis com os métodos HTTP GET
e HEAD
.
Índice de registro
Os grupos de recursos de registro empacotam metadados por ID do pacote. Não é possível obter dados sobre mais de uma ID de pacote ao mesmo tempo. Esse recurso não fornece nenhuma maneira de descobrir IDs de pacote. Em vez disso, presume-se que o cliente já saiba a ID do pacote desejado. Os metadados disponíveis sobre cada versão do pacote variam de acordo com a implementação do servidor. Os blobs de registro de pacote têm a seguinte estrutura hierárquica:
- Índice: o ponto de entrada para os metadados do pacote, compartilhado por todos os pacotes em uma origem com a mesma ID de pacote.
- Página: um agrupamento de versões de pacotes. O número de versões de pacote em uma página é definido pela implementação do servidor.
- Folha: um documento específico para uma única versão do pacote.
A URL do índice de registro é previsível e pode ser determinada pelo cliente que recebe uma ID de pacote e o valor de @id
do recurso de registro do índice de serviço. As URLs das páginas e folhas de registro são descobertas inspecionando o índice de registro.
Páginas e folhas de registro
Embora não seja estritamente necessário para uma implementação de servidor armazenar folhas de registro em documentos de página de registro separados, é uma prática recomendada para conservar a memória do lado do cliente. Em vez de embutir todas as folhas de registro no índice ou armazenar imediatamente as folhas em documentos de página, é recomendável que a implementação do servidor defina alguma heurística para escolher entre as duas abordagens com base no número de versões de pacote ou no tamanho cumulativo de folhas de pacote.
Armazenar todas as versões do pacote (folhas) no índice de registro gera economia no número de solicitações HTTP necessárias para buscar metadados do pacote, mas significa que um documento maior deve ser baixado e mais memória do cliente deve ser alocada. Por outro lado, se a implementação do servidor armazena imediatamente folhas de registro em documentos de página separados, o cliente deve executar mais solicitações HTTP para obter as informações necessárias.
A heurística que o nuget.org usa é a seguinte: se houver 128 ou mais versões de um pacote, quebre as folhas em páginas de tamanho 64. Se houver menos de 128 versões, insira todas as folhas no índice de registro. Observe que isso significa que pacotes de 65 a 127 versões terão duas páginas no índice, mas ambas as páginas serão embutidas.
GET {@id}/{LOWER_ID}/index.json
Parâmetros da solicitação
Nome | Em | Tipo | Obrigatória | Observações |
---|---|---|---|---|
LOWER_ID | URL | string | sim | A ID do pacote, em minúsculas |
O valor LOWER_ID
é a ID do pacote desejado em minúsculas usando as regras implementadas pelo método System.String.ToLowerInvariant()
da .NET.
Resposta
A resposta é um documento JSON que tem um objeto raiz com as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
contagem | inteiro | sim | O número de páginas de registro no índice |
itens | matriz de objetos | sim | A matriz de páginas de registro |
Cada item na matriz items
do objeto de índice é um objeto JSON que representa uma página de registro.
Objeto da página de registro
O objeto da página de registro encontrado no índice de registro tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
@id | string | sim | A URL para a página de registro |
contagem | inteiro | sim | O número de folhas de registro na página |
itens | matriz de objetos | não | A matriz de folhas de registro e seus metadados associados |
lower | string | sim | A versão mais antiga do SemVer 2.0.0 na página (inclusive) |
primário | string | não | A URL para o índice de registro |
upper | string | sim | A versão mais alta do SemVer 2.0.0 na página (inclusive) |
Os limites lower
e upper
do objeto de página são úteis quando os metadados para uma versão de página específica são necessários.
Esses limites podem ser usados para buscar a única página de registro necessária. As cadeias de caracteres de versão seguem as regras de versão do NuGet. As cadeias de caracteres de versão são normalizadas e não incluem metadados de compilação. Como acontece com todas as versões no ecossistema do NuGet, a comparação de cadeias de caracteres da versão é implementada usando as regras de precedência de versão do SemVer 2.0.0.
A propriedade parent
só aparecerá se o objeto de página de registro tiver a propriedade items
.
Se a propriedade items
não estiver presente no objeto de página de registro, a URL especificada em @id
deve ser usada para buscar metadados sobre versões de pacotes individuais. Às vezes, a matriz items
é excluída do objeto de página como uma otimização. Se o número de versões de uma única ID de pacote for muito grande, o documento de índice de registro será enorme e desperdiçado para processar para um cliente que só se preocupa com uma versão específica ou um pequeno intervalo de versões.
Observe que, se a propriedade items
estiver presente, a propriedade @id
não precisará ser usada, pois todos os dados da página já estão embutidos na propriedade items
.
Cada item na matriz items
do objeto de página é um objeto JSON que representa uma folha de registro e seus metadados associados.
Objeto folha de registro em uma página
O objeto folha de registro encontrado em uma página de registro tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
@id | string | sim | A URL para a folha de registro |
catalogEntry | objeto | sim | A entrada de catálogo que contém os metadados do pacote |
packageContent | string | sim | A URL para o conteúdo do pacote (.nupkg) |
Cada objeto folha de registro representa dados associados a uma única versão do pacote.
Entrada do catálogo
A propriedade catalogEntry
no objeto folha de registro tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
@id | string | sim | A URL do documento usado para produzir esse objeto |
authors | cadeia de caracteres ou matriz de cadeias de caracteres | não | |
dependencyGroups | matriz de objetos | não | As dependências do pacote, agrupadas por estrutura de destino |
depreciação | objeto | não | A depreciação associada ao pacote |
descrição | string | não | |
iconUrl | string | não | |
ID | cadeia de caracteres | sim | A ID do pacote |
linguagem | string | não | |
licenseUrl | string | não | |
licenseExpression | string | não | |
listados | boolean | não | Deve ser considerado como listado se ausente |
minClientVersion | string | não | |
packageContent | string | não | Duplicata da mesma propriedade no objeto pai, incluída apenas por ser herdada |
projectUrl | string | não | |
published | string | não | Uma cadeia de caracteres que contém um carimbo de data/hora ISO 8601 de quando o pacote foi publicado |
readmeUrl | string | não | Uma URL para a exibição renderizada (página da Web HTML) do pacote README |
requireLicenseAcceptance | boolean | não | |
summary | string | não | |
marcas | cadeia de caracteres ou matriz de cadeias de caracteres | não | |
title | string | não | |
version | string | sim | A cadeia de caracteres da versão completa após a normalização |
vulnerabilities | matriz de objetos | não | As vulnerabilidades de segurança do pacote |
A propriedade version
do pacote é a cadeia de caracteres de versão completa após a normalização. Isso significa que os dados de compilação do SemVer 2.0.0 podem ser incluídos aqui.
A propriedade dependencyGroups
é uma matriz de objetos que representa as dependências do pacote, agrupadas por estrutura de destino. Se o pacote não tiver dependências, a propriedade dependencyGroups
está ausente, uma matriz vazia ou a propriedade dependencies
de todos os grupos está vazia ou ausente.
O valor da propriedade licenseExpression
está em conformidade com a sintaxe da expressão de licença do NuGet.
Observação
Em nuget.org, o valor de published
é definido como ano 1900 quando o pacote não está listado.
Grupo de dependência de pacote
Cada objeto de grupo de dependência tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
targetFramework | string | não | A estrutura de destino à qual essas dependências são aplicáveis |
dependencies | matriz de objetos | não |
A cadeia de caracteres targetFramework
usa o formato implementado pela biblioteca do .NET NuGet.Frameworks do NuGet. Se nenhum targetFramework
for especificado, o grupo de dependência se aplicará a todas as estruturas de destino.
A propriedade dependencies
é uma matriz de objetos, cada um representando uma dependência de pacote do pacote atual.
Dependência de pacote
Cada dependência de pacote tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
ID | cadeia de caracteres | sim | A ID da dependência de pacote |
range | objeto | não | O intervalo de versão permitido da dependência |
registro | string | não | A URL para o índice de registro para essa dependência |
Se a propriedade range
for excluída ou uma cadeia de caracteres vazia, o cliente deverá usar como padrão o intervalo de versão (, )
. Ou seja, qualquer versão da dependência é permitida. O valor de *
não é permitido para a propriedade range
.
Reprovação de pacote
Cada depreciação de pacote tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
Motivos | matriz de cadeias de caracteres | sim | As razões pelas quais o pacote foi preterido |
message | string | não | Os detalhes adicionais sobre essa depreciação |
alternatePackage | objeto | não | O pacote alternativo que deve ser usado em vez disso |
A propriedade reasons
deve conter pelo menos uma cadeia de caracteres e deve conter apenas cadeias de caracteres da tabela a seguir:
Motivo | Descrição |
---|---|
Herdada | O pacote não recebe mais manutenção |
CriticalBugs | O pacote tem bugs que o tornam inadequado para uso |
Outro | O pacote foi preterido devido a um motivo que não está nesta lista |
Se a propriedade reasons
contiver cadeias de caracteres que não são do conjunto conhecido, elas deverão ser ignoradas. As cadeias de caracteres não diferenciam maiúsculas de minúsculas, portanto legacy
devem ser tratado da mesma forma que Legacy
. Não há restrição de ordenação na matriz, portanto, as cadeias de caracteres podem ser organizadas em qualquer ordem arbitrária. Além disso, se a propriedade contiver apenas cadeias de caracteres que não são do conjunto conhecido, ela deverá ser tratada como se contivesse apenas a cadeia de caracteres “Outra”.
Pacote alternativo
O objeto do pacote alternativo tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
ID | cadeia de caracteres | sim | A ID do pacote alternativo |
range | objeto | não | O intervalo de versões permitido, ou * , se qualquer versão for permitida |
Vulnerabilidades
Uma matriz de objetos vulnerability
. Cada vulnerabilidade tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
advisoryUrl | string | sim | Localização do aviso de segurança para o pacote |
severidade | string | sim | Gravidade do aviso: “0” = Baixa, “1” = Moderada, “2” = Alta, “3” = Crítica |
Solicitação de exemplo
GET https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json
Efetue fetch do URL base (https://api.nuget.org/v3/registration-sample/
neste exemplo) do índice de serviço, conforme mencionado na seção URL base.
Resposta de exemplo
{
"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"
}
]
}
Nesse caso específico, o índice de registro tem a página de registro embutida para que nenhuma solicitação extra seja necessária para buscar metadados sobre versões de pacotes individuais.
Página de registro
A página de registro contém folhas de registro. A URL para buscar uma página de registro é determinada pela propriedade @id
no objeto da página de registro mencionado acima. A URL não deve ser previsível e sempre deve ser descoberta por meio do documento de índice.
Aviso
Em nuget.org, a URL do documento da página de registro contém coincidentemente o limite inferior e superior da página. No entanto, essa pressuposição nunca deve ser feita por um cliente, uma vez que as implementações de servidor são livres para alterar a forma da URL, desde que o documento de índice tenha um link válido.
Quando a matriz items
não é fornecida no índice de registro, uma solicitação HTTP GET do valor @id
retornará um documento JSON que tem um objeto como raiz. O objeto tem as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
@id | string | sim | A URL para a página de registro |
contagem | inteiro | sim | O número de folhas de registro na página |
itens | matriz de objetos | sim | A matriz de folhas de registro e seus metadados associados |
lower | string | sim | A versão mais antiga do SemVer 2.0.0 na página (inclusive) |
primário | string | sim | A URL para o índice de registro |
upper | string | sim | A versão mais alta do SemVer 2.0.0 na página (inclusive) |
A forma dos objetos da folha de registro é a mesma do índice de registro acima.
Solicitação de exemplo
GET https://api.nuget.org/v3/registration-sample/ravendb.client/page/1.0.531/1.0.729-unstable.json
Efetue fetch do URL base (https://api.nuget.org/v3/registration-sample/
neste exemplo) do índice de serviço, conforme mencionado na seção URL base.
Resposta de exemplo
{
"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"
}
]
}
Folha de registro
A folha de registro contém informações sobre uma ID e versão de pacote específicas. Os metadados sobre a versão específica podem não estar disponíveis neste documento. Os metadados do pacote devem ser obtidos no índice de registro ou na página de registro (que é descoberta usando o índice de registro).
A URL para buscar uma folha de registro é obtida da propriedade @id
de um objeto de folha de registro em um índice de registro ou página de registro. Tal como acontece com o documento de página. a URL não deve ser previsível e deve sempre ser descoberta por meio do objeto da página de registro.
Aviso
Em nuget.org, a URL do documento de folha de registro coincidentemente contém a versão do pacote. No entanto, essa pressuposição nunca deve ser feita por um cliente, uma vez que as implementações de servidor são livres para alterar a forma da URL, desde que o documento pai tenha um link válido.
A folha de registro é um documento JSON com um objeto raiz com as seguintes propriedades:
Nome | Digitar | Obrigatória | Observações |
---|---|---|---|
@id | string | sim | A URL para a folha de registro |
catalogEntry | string | não | A URL para a entrada de catálogo que produziu essas folhas |
listados | boolean | não | Deve ser considerado como listado se ausente |
packageContent | string | não | A URL para o conteúdo do pacote (.nupkg) |
published | string | não | Uma cadeia de caracteres que contém um carimbo de data/hora ISO 8601 de quando o pacote foi publicado |
registro | string | não | A URL para o índice de registro |
Observação
Em nuget.org, o valor de published
é definido como ano 1900 quando o pacote não está listado.
Solicitação de exemplo
GET https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json
Efetue fetch do URL base (https://api.nuget.org/v3/registration-sample/
neste exemplo) do índice de serviço, conforme mencionado na seção URL base.
Resposta de exemplo
{
"@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"
}