Метаданные пакета
Вы можете получить метаданные о пакетах, доступных в источнике пакетов, с помощью API NuGet версии 3. Эти метаданные можно получить с помощью ресурса, найденного RegistrationsBaseUrl
в индексе службы.
Коллекция документов, найденных в разделе RegistrationsBaseUrl
, часто называются "регистрациями" или "большими двоичными объектами регистрации". Набор документов под одним RegistrationsBaseUrl
называется "hive регистрации". Куст регистрации содержит метаданные о каждом пакете, доступном в источнике пакета.
Примечание.
Ресурс метаданных пакета не содержит все метаданные для пакетов. Используйте ресурс поиска для поиска владельцев пакетов, загрузки или состояния резервирования префикса.
Управление версиями
Допустимы следующие значения @type
:
Значение @type | Примечания. |
---|---|
RegistrationsBaseUrl | Начальный выпуск |
RegistrationsBaseUrl/3.0.0-beta | Псевдоним RegistrationsBaseUrl |
RegistrationsBaseUrl/3.0.0-rc | Псевдоним RegistrationsBaseUrl |
RegistrationsBaseUrl/3.4.0 | Gzipped responses |
RegistrationsBaseUrl/3.6.0 | Включает пакеты SemVer 2.0.0 |
Это представляет три отдельных куста регистрации, доступных для различных версий клиента.
RegistrationsBaseUrl
Эти регистрации не сжимаются (это означает, что они используют подразумеваемый Content-Encoding: identity
). Пакеты SemVer 2.0.0 исключены из этого куста.
RegistrationsBaseUrl/3.4.0
Эти регистрации сжимаются с помощью Content-Encoding: gzip
. Пакеты SemVer 2.0.0 исключены из этого куста.
RegistrationsBaseUrl/3.6.0
Эти регистрации сжимаются с помощью Content-Encoding: gzip
. Пакеты SemVer 2.0.0 включены в этот hive.
Дополнительные сведения о поддержке SemVer 2.0.0 см. в статье о поддержке SemVer 2.0.0 для nuget.org.
Базовый URL-адрес
Базовый URL-адрес для следующих API — это значение свойства, связанного @id
с указанными выше значениями ресурсов @type
упоминание. В следующем документе будет использоваться базовый URL-адрес заполнителя {@id}
. Базовый URL-адрес может изменяться на основе изменений в реализации или инфраструктуре в источнике пакета, поэтому он должен быть динамически получен из индекса службы клиентским программным обеспечением.
Методы HTTP
Все URL-адреса, содержащиеся в ресурсе регистрации, поддерживают методы HTTP GET
и HEAD
.
Индекс регистрации
Метаданные пакета групп ресурсов регистрации по идентификатору пакета. Невозможно получить данные о нескольких идентификаторах пакета одновременно. Этот ресурс не позволяет обнаруживать идентификаторы пакетов. Вместо этого предполагается, что клиент уже знает нужный идентификатор пакета. Доступные метаданные о каждой версии пакета зависят от реализации сервера. Большие двоичные объекты регистрации пакетов имеют следующую иерархическую структуру:
- Индекс: точка входа для метаданных пакета, общая для всех пакетов в источнике с одинаковым идентификатором пакета.
- Страница: группирование версий пакетов. Количество версий пакетов на странице определяется реализацией сервера.
- Лист: документ, относяющийся к одной версии пакета.
URL-адрес индекса регистрации предсказуем и может быть определен клиентом с идентификатором пакета и значением ресурса @id
регистрации из индекса службы. URL-адреса страниц регистрации и листьев обнаруживаются путем проверки индекса регистрации.
Страницы регистрации и листья
Хотя для реализации сервера не требуется хранить конечные листы регистрации в отдельных документах страницы регистрации, рекомендуется сохранять память на стороне клиента. Вместо того чтобы встраивать все листья регистрации в индексе или немедленно хранить листья в документах страниц, рекомендуется, чтобы реализация сервера определила некоторые эвристические способы выбора между двумя подходами на основе количества версий пакета или накопительного размера листьев пакета.
Хранение всех версий пакетов (оставляет) в индексе регистрации экономит количество HTTP-запросов, необходимых для получения метаданных пакета, но означает, что необходимо скачать больший документ и выделить больше памяти клиента. С другой стороны, если реализация сервера немедленно сохраняет выходы регистрации в отдельных документах страниц, клиент должен выполнить дополнительные HTTP-запросы, чтобы получить необходимую информацию.
Эвристика, которая используется nuget.org, выглядит следующим образом: если существует 128 или более версий пакета, разорвать листья на страницы размером 64. Если существует менее 128 версий, все встраиваются в индекс регистрации. Обратите внимание, что это означает, что пакеты с 65-127 версиями будут иметь две страницы в индексе, но обе страницы будут встраиваться.
GET {@id}/{LOWER_ID}/index.json
Параметры запроса
Имя. | In | Тип | Обязательное поле | Примечания. |
---|---|---|---|---|
LOWER_ID | URL | строка | yes | Идентификатор пакета, нижний регистр |
Значение LOWER_ID
— это требуемый идентификатор пакета, нижний регистр с помощью правил, реализованных в . System.String.ToLowerInvariant()
Метод NET.
Response
Ответ — это документ JSON, имеющий корневой объект со следующими свойствами:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
count | integer | yes | Количество страниц регистрации в индексе |
items | массив объектов | yes | Массив страниц регистрации |
Каждый элемент в массиве объекта items
индекса представляет собой объект JSON, представляющий страницу регистрации.
Объект страницы регистрации
Объект страницы регистрации, найденный в индексе регистрации, имеет следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
@id | строка | yes | URL-адрес страницы регистрации |
count | integer | yes | Количество выходов регистрации на странице |
items | массив объектов | no | Массив отпусков регистрации и их сопоставленных метаданных |
lower | строка | yes | Самая низкая версия SemVer 2.0.0 на странице (включительно) |
parent | строка | no | URL-адрес индекса регистрации |
upper | строка | yes | Самая высокая версия SemVer 2.0.0 на странице (включительно) |
upper
Границы lower
объекта страницы полезны при необходимости метаданных для определенной версии страницы.
Эти границы можно использовать для получения только необходимой страницы регистрации. Строки версии соответствуют правилам версии NuGet. Строки версии нормализуются и не включают метаданные сборки. Как и во всех версиях экосистемы NuGet, сравнение строк версий реализуется с помощью правил приоритета версий SemVer 2.0.0.
Свойство parent
будет отображаться только в том случае, если объект страницы регистрации имеет items
свойство.
items
Если свойство отсутствует в объекте страницы регистрации, URL-адрес, указанный в @id
файле, должен использоваться для получения метаданных о отдельных версиях пакетов. Массив items
иногда исключается из объекта страницы в качестве оптимизации. Если количество версий одного идентификатора пакета очень велико, документ индекса регистрации будет массовым и расточительным для обработки для клиента, который заботится только о конкретной версии или небольшом диапазоне версий.
Обратите внимание, что если items
свойство присутствует, свойство не нужно использовать, @id
так как все данные страницы уже встраиваются в items
свойство.
Каждый элемент в массиве объекта items
страницы представляет собой объект JSON, представляющий лист регистрации, и он связан с метаданными.
Конечный объект регистрации на странице
Конечный объект регистрации, найденный на странице регистрации, имеет следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
@id | строка | yes | URL-адрес конечной точки регистрации |
catalogEntry | объект | yes | Запись каталога, содержащая метаданные пакета |
packageContent | строка | yes | URL-адрес содержимого пакета (NUPKG) |
Каждый конечный объект регистрации представляет данные, связанные с одной версией пакета.
Запись каталога
Свойство в конечном объекте catalogEntry
регистрации имеет следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
@id | строка | yes | URL-адрес документа, используемого для создания этого объекта |
authors | строка или массив строк | no | |
зависимостиGroups | массив объектов | no | Зависимости пакета, сгруппированные по целевой платформе |
Исключения | объект | no | Нерекомендуемая связь с пакетом |
описание | строка | no | |
iconUrl | строка | no | |
id | string | yes | Идентификатор пакета |
язык | string | no | |
licenseUrl | строка | no | |
licenseExpression | строка | no | |
регионе. | boolean | no | Следует рассматривать как указанный в списке, если отсутствует |
minClientVersion | строка | no | |
packageContent | строка | no | Дублирование того же свойства в родительском объекте, включенное только по устаревшим причинам |
projectUrl | строка | no | |
published | строка | no | Строка, содержащая метку времени ISO 8601 при публикации пакета |
readmeUrl | строка | no | URL-адрес представления отрисованной (HTML-веб-страницы) пакета README |
requireLicenseAcceptance | boolean | no | |
Итоги | строка | no | |
tags | строка или массив строк | no | |
title | string | no | |
версия | строка | yes | Полная строка версии после нормализации |
vulnerabilities | массив объектов | no | Уязвимости пакета безопасности |
Свойство пакета version
— это полная строка версии после нормализации. Это означает, что данные сборки SemVer 2.0.0 можно включить здесь.
Свойство dependencyGroups
представляет собой массив объектов, представляющих зависимости пакета, сгруппированные по целевой платформе. Если пакет не имеет зависимостей, свойство отсутствует, dependencyGroups
пустой массив или dependencies
свойство всех групп пусто или отсутствует.
Значение свойства соответствует синтаксису licenseExpression
выражения лицензии NuGet.
Примечание.
В nuget.org published
значение задается годом 1900, когда пакет не указан.
Группа зависимостей пакета
Каждый объект группы зависимостей имеет следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
targetFramework | строка | no | Целевая платформа, к которым применимы эти зависимости. |
dependencies | массив объектов | no |
Строка targetFramework
использует формат, реализованный библиотекой NuGet .NET NuGet.Frameworks. Если не targetFramework
указано, группа зависимостей применяется ко всем целевым платформам.
Свойство dependencies
представляет собой массив объектов, каждый из которых представляет зависимость пакета текущего пакета.
Зависимость пакета
Каждая зависимость пакета имеет следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
id | string | yes | Идентификатор зависимости пакета |
range | объект | no | Допустимый диапазон версий зависимости |
регистрация | строка | no | URL-адрес индекса регистрации для этой зависимости |
range
Если свойство исключается или пустая строка, клиент должен по умолчанию использовать диапазон (, )
версий. То есть разрешена любая версия зависимости. Значение *
не допускается для range
свойства.
Объявление пакетов нерекомендуемыми
У каждого пакета нерекомендуются следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
Причин | массив строк | yes | Причины, по которым пакет не рекомендуется |
message | строка | no | Дополнительные сведения об этом нерекомендуемом |
alternatePackage | объект | no | Альтернативный пакет, который следует использовать вместо него |
Свойство reasons
должно содержать по крайней мере одну строку и содержать только строки из следующей таблицы:
Причина | Description |
---|---|
Устарело | Пакет больше не поддерживается |
Критически важныеbugs | Пакет содержит ошибки, которые делают его непригодным для использования |
Другие | Пакет устарел из-за причины, не связанной с этим списком |
reasons
Если свойство содержит строки, которые не относятся к известному набору, их следует игнорировать. Строки не учитывает регистр, поэтому legacy
их следует рассматривать так же, как Legacy
. В массиве нет ограничений по упорядочению, поэтому строки могут упорядочиться в любом произвольном порядке. Кроме того, если свойство содержит только строки, которые не относятся к известному набору, он должен рассматриваться как если бы он содержал только строку "Other".
Альтернативный пакет
Альтернативный объект пакета имеет следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
id | string | yes | Идентификатор альтернативного пакета |
range | объект | no | Допустимый диапазон версий или * разрешенная версия |
Уязвимости
Массив объектов vulnerability
. Каждая уязвимость имеет следующие свойства:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
advisoryUrl | строка | yes | Расположение рекомендаций по безопасности пакета |
severity | строка | yes | Серьезность рекомендаций: "0" = низкий, "1" = умеренный, "2" = высокий, "3" = критическое |
Образец запроса
GET https://api.nuget.org/v3/registration-sample/nuget.server.core/index.json
Обязательно получите базовый URL-адрес (https://api.nuget.org/v3/registration-sample/
в этом примере) из индекса службы, как упоминание в разделе базового URL-адреса.
Пример ответа
{
"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"
}
]
}
В этом случае индекс регистрации содержит вложенную страницу регистрации, поэтому дополнительные запросы не требуются для получения метаданных о отдельных версиях пакетов.
Страница регистрации
Страница регистрации содержит листья регистрации. URL-адрес для получения страницы регистрации определяется @id
свойством в объекте страницы регистрации, упоминание выше. URL-адрес не должен быть предсказуемым и всегда должен быть обнаружен с помощью документа индекса.
Предупреждение
В nuget.org URL-адрес документа страницы регистрации совпадает с нижней и верхней границой страницы. Однако это предположение никогда не должно быть сделано клиентом, так как реализации сервера могут изменять форму URL-адреса до тех пор, пока документ индекса имеет допустимую ссылку.
items
Если массив не указан в индексе регистрации, http-запрос @id
GET значения вернет документ JSON, имеющий объект в качестве корневого элемента. Объект имеет следующие свойства.
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
@id | строка | yes | URL-адрес страницы регистрации |
count | integer | yes | Количество выходов регистрации на странице |
items | массив объектов | yes | Массив отпусков регистрации и их сопоставленных метаданных |
lower | строка | yes | Самая низкая версия SemVer 2.0.0 на странице (включительно) |
parent | строка | yes | URL-адрес индекса регистрации |
upper | строка | yes | Самая высокая версия SemVer 2.0.0 на странице (включительно) |
Форма конечных объектов регистрации аналогична приведенному выше индексу регистрации.
Образец запроса
GET https://api.nuget.org/v3/registration-sample/ravendb.client/page/1.0.531/1.0.729-unstable.json
Обязательно получите базовый URL-адрес (https://api.nuget.org/v3/registration-sample/
в этом примере) из индекса службы, как упоминание в разделе базового URL-адреса.
Пример ответа
{
"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"
}
]
}
Лист регистрации
Лист регистрации содержит сведения о конкретном идентификаторе пакета и версии. Метаданные конкретной версии могут быть недоступны в этом документе. Метаданные пакета следует получить из индекса регистрации или страницы регистрации (которая обнаружена с помощью индекса регистрации).
URL-адрес для получения конечной точки регистрации получен из @id
свойства конечного объекта регистрации в индексе регистрации или на странице регистрации. Как и в документе страницы. URL-адрес не должен быть предсказуемым и всегда должен быть обнаружен с помощью объекта страницы регистрации.
Предупреждение
В nuget.org URL-адрес для конечного документа регистрации случайно содержит версию пакета. Однако это предположение никогда не должно быть сделано клиентом, так как реализации сервера могут изменять форму URL-адреса, если родительский документ имеет действительную ссылку.
Лист регистрации — это документ JSON с корневым объектом со следующими свойствами:
Имя. | Type | Обязательное поле | Примечания. |
---|---|---|---|
@id | строка | yes | URL-адрес конечной точки регистрации |
catalogEntry | строка | no | URL-адрес записи каталога, создающей эти конечные страницы |
регионе. | boolean | no | Следует рассматривать как указанный в списке, если отсутствует |
packageContent | строка | no | URL-адрес содержимого пакета (NUPKG) |
published | строка | no | Строка, содержащая метку времени ISO 8601 при публикации пакета |
регистрация | строка | no | URL-адрес индекса регистрации |
Примечание.
В nuget.org published
значение задается годом 1900, когда пакет не указан.
Образец запроса
GET https://api.nuget.org/v3/registration-sample/nuget.versioning/4.3.0.json
Обязательно получите базовый URL-адрес (https://api.nuget.org/v3/registration-sample/
в этом примере) из индекса службы, как упоминание в разделе базового URL-адреса.
Пример ответа
{
"@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"
}