API del servidor de NuGet

La API del servidor NuGet es un conjunto de puntos de conexión HTTP que se pueden utilizar para descargar paquetes, capturar metadatos, publicar nuevos paquetes y realizar casi todas las operaciones disponibles en los clientes oficiales de NuGet.

El cliente NuGet utiliza esta API en Visual Studio, nuget.exe y la CLI de .NET para realizar operaciones de NuGet como dotnet restore, búsquedas en la UI de Visual Studio y nuget.exe push.

Nota: En algunos casos, nuget.org tiene requisitos adicionales que no aplican otros orígenes de paquetes. Estas diferencias se documentan mediante los protocolos de nuget.org.

Para obtener una enumeración simple y la descarga de las versiones disponibles de nuget.exe, consulta el punto de conexión tools.json.

Si vas a implementar un repositorio de paquetes de NuGet, consulta también la guía de implementación para conocer otros requisitos y recomendaciones.

Índice de servicio

El punto de entrada de la API es un documento JSON en una ubicación conocida. Este documento se llama índice de servicio. La ubicación del índice de servicio para nuget.org es https://api.nuget.org/v3/index.json.

Este documento JSON contiene una lista de recursos que proporcionan una funcionalidad diferente y cumplen distintos casos de uso.

Los clientes que admiten la API deben aceptar una o más de estas direcciones URL de índice de servicio como medio para conectarse a los orígenes de paquete respectivos.

Para obtener más información sobre el índice de servicio, consulta su referencia en la API.

Control de versiones

La API es la versión 3 del protocolo HTTP de NuGet. El protocolo se conoce a veces como “API V3”. Estos documentos de referencia se referirán a esta versión del protocolo simplemente como “la API”.

La versión del esquema de índice de servicio se indica mediante la propiedad version en el índice de servicio. La API exige que la cadena de versión tenga un número de versión principal de 3. A medida que se realicen cambios no importantes en el esquema del índice de servicio, se incrementará la versión secundaria de la cadena de versión.

Los clientes más antiguos (como nuget.exe 2.x) no admiten la API V3, solo la API V2 anterior, que no está documentada aquí.

La API de NuGet V3 se denomina como tal porque es la sucesora de la API V2, que era el protocolo basado en OData implementado por la versión 2.x del cliente NuGet oficial. La API V3 fue compatible por primera vez con la versión 3.0 del cliente NuGet oficial y sigue siendo la última versión del protocolo principal compatible con el cliente de NuGet de la versión 4.0 y superiores.

Desde que la API se publicó por primera vez, se le han realizado algunos cambios leves de protocolo.

Esquema y recursos

El índice de servicio describe una variedad de recursos. El conjunto actual de recursos admitidos es el siguiente:

Nombre del recurso Requerido Descripción
Catalog no Registro completo de todos los eventos de paquete.
PackageBaseAddress Obtención del contenido del paquete (.nupkg).
PackageDetailsUriTemplate no Construcción de una dirección URL para acceder a la página web de detalles de un paquete.
PackagePublish Inserción y eliminación (o anulación de la lista) de paquetes.
RegistrationsBaseUrl Obtención de metadatos de paquete.
ReportAbuseUriTemplate no Construcción de una dirección URL para acceder a una página web Notificar abuso.
RepositorySignatures no Obtención de certificados utilizados para la firma del repositorio.
SearchAutocompleteService no Descubrimiento de versiones e id. de paquete mediante la substring.
SearchQueryService Filtrado y búsqueda de paquetes por palabra clave.
SymbolPackagePublish no Paquetes de símbolos de inserción.
VulnerabilityInfo no Paquetes con vulnerabilidades conocidas.

En general, todos los datos no binarios devueltos por un recurso de API se serializan mediante JSON. El esquema de respuesta devuelto por cada recurso del índice de servicio se define individualmente para ese recurso. Para obtener más información sobre cada recurso, consulta los temas enumerados anteriormente.

Posteriormente, a medida que evoluciona el protocolo, se pueden agregar nuevas propiedades a las respuestas JSON. Para garantizar la eficacia futura del cliente, la implementación no debe suponer que el esquema de respuesta es final y no puede incluir datos adicionales. Debes ignorar todas las propiedades que la implementación no reconozca.

Nota:

Cuando un origen no implementa SearchAutocompleteService, cualquier comportamiento de autocompletar debe deshabilitarse correctamente. Si no se implementa ReportAbuseUriTemplate, el cliente de NuGet oficial vuelve a la dirección URL Notificar abuso de nuget.org (de la cual hace un seguimiento NuGet/Home#4924). Otros clientes pueden optar por no mostrar al usuario una dirección URL Notificar abuso.

Recursos no documentados en nuget.org

El índice de servicio V3 de nuget.org tiene algunos recursos que no están documentados arriba. Existen algunas razones para no documentar un recurso.

En primer lugar, no documentamos los recursos utilizados como detalle de implementación de nuget.org. SearchGalleryQueryService entra en esta categoría. NuGetGallery utiliza este recurso para delegar algunas consultas V2 (OData) en nuestro índice de búsqueda en lugar de utilizar la base de datos. Este recurso se introdujo por motivos de escalabilidad y no está pensado para uso externo.

En segundo lugar, no documentamos recursos que nunca se enviaron en una versión RTM del cliente oficial. PackageDisplayMetadataUriTemplate y PackageVersionDisplayMetadataUriTemplate entran en esta categoría.

En tercer lugar, no documentamos recursos que están estrechamente unidos al protocolo V2, que, a su vez, no se documenta intencionadamente. El recurso LegacyGallery entra en esta categoría. Este recurso permite al índice de servicio V3 apuntar a una dirección URL de origen V2 correspondiente. Este recurso admite la nuget.exe list.

Si un recurso no está documentado aquí, se recomienda encarecidamente no depender de él. Podemos eliminar o cambiar el comportamiento de estos recursos no documentados que podrían interrumpir la implementación de maneras inesperadas.

Marcas de tiempo

Todas las marcas de tiempo devueltas por la API son UTC o se especifican de otro modo mediante la manifestación ISO 8601.

Métodos HTTP

Verbo Usar
OBTENER Realiza una operación de solo lectura, normalmente recuperando datos.
HEAD Captura los encabezados de respuesta de la solicitud GET correspondiente.
PUT Crea un recurso que no existe o, si existe, lo actualiza. Es posible que algunos recursos no admitan la actualización.
Delete Elimina o anula un recurso de una lista.

Códigos de estado HTTP

Código Descripción
200 Correcto, y existe un cuerpo de la respuesta.
201 Correcto, y se ha creado el recurso.
202 Correcto, se ha aceptado la solicitud, pero es posible que algunos trabajos sigan estando incompletos y que se completen de forma asíncrona.
204 Correcto, pero no existe ningún cuerpo de la respuesta.
301 Redireccionamiento permanente.
302 Redireccionamiento temporal.
400 Los parámetros de la dirección URL o del cuerpo de la solicitud no son válidos.
401 Las credenciales proporcionadas no son válidas.
403 No se permite la acción dadas las credenciales proporcionadas.
404 El recurso solicitado no existe.
409 La solicitud entra en conflicto con un recurso existente.
500 El servicio ha detectado un error inesperado.
503 El servicio no está disponible temporalmente.

Cualquier solicitud GET realizada a un punto de conexión de API puede devolver un redireccionamiento HTTP (301 o 302). Los clientes deben manipular correctamente estos redireccionamientos observando el encabezado Location y emitiendo después un GET. La documentación relativa a puntos de conexión específicos no indicará explícitamente dónde se pueden utilizar los redireccionamientos.

En el caso de un código de estado de 500 niveles, el cliente puede implementar un mecanismo de reintento razonable. El cliente NuGet oficial vuelve a intentarlo tres veces al encontrar cualquier código de estado de 500 niveles o error TCP/DNS.

Encabezados de solicitud HTTP

Nombre Descripción
X-NuGet-ApiKey Obligatorio para la inserción y eliminación; consulta el recurso PackagePublish
X-NuGet-Client-Version En desuso y reemplazado por X-NuGet-Protocol-Version
X-NuGet-Protocol-Version Requerido en determinados casos solo en nuget.org; consulta los protocolos de nuget.org
X-NuGet-Session-Id Opcional. Los clientes NuGet v4.7+ identifican las solicitudes HTTP que forman parte de la misma sesión de cliente de NuGet.

El X-NuGet-Session-Id tiene un valor único para todas las operaciones relacionadas con una única restauración en PackageReference. En otros escenarios, como autocompletar y la restauración de packages.config, puede haber varios id. de sesión diferentes debido a cómo se factoriza el código.

Autenticación

La autenticación viene definida por la implementación del origen del paquete. Para nuget.org, solo el PackagePublish recurso requiere autenticación a través de un encabezado de clave de API especial. Consulta el recurso PackagePublish para obtener más información.