NuGet Server-API
Die NuGet Server-API ist eine Reihe von HTTP-Endpunkten, die verwendet werden können, um Pakete herunterzuladen, Metadaten abzurufen, neue Pakete zu veröffentlichen und die meisten anderen Vorgänge auszuführen, die in den offiziellen NuGet-Clients verfügbar sind.
Diese API wird vom NuGet-Client in Visual Studio, nuget.exeund der .NET CLI zum Ausführen von NuGet-Vorgängen wie dotnet restore
, Suchen in der Visual Studio-Benutzeroberfläche und nuget.exe push
verwendet.
Beachten Sie in einigen Fällen, dass nuget.org zusätzliche Anforderungen hat, die nicht von anderen Paketquellen erzwungen werden. Diese Unterschiede werden durch die nuget.org Protokolledokumentiert.
Eine einfache Aufzählung und das Herunterladen verfügbarer nuget.exe Versionen finden Sie im tools.json Endpunkt.
Wenn Sie ein NuGet-Paket-Repository implementieren, lesen Sie auch den Implementierungsleitfaden für zusätzliche Anforderungen und Empfehlungen.
Dienstindex
Der Einstiegspunkt für die API ist ein JSON-Dokument an einem bekannten Speicherort. Dieses Dokument wird als Dienstindexbezeichnet. Der Speicherort des Dienstindex für nuget.org ist https://api.nuget.org/v3/index.json
.
Dieses JSON-Dokument enthält eine Liste der Ressourcen, die unterschiedliche Funktionen bereitstellen und unterschiedliche Anwendungsfälle erfüllen.
Clients, die die API unterstützen, sollten eine oder mehrere dieser Dienstindex-URL als Verbindung mit den jeweiligen Paketquellen akzeptieren.
Weitere Informationen zum Dienstindex finden Sie der API-Referenz.
Versionsverwaltung
Die API ist Version 3 des HTTP-Protokolls von NuGet. Dieses Protokoll wird manchmal als "die V3-API" bezeichnet. Diese Referenzdokumente beziehen sich einfach auf diese Version des Protokolls als "die API".
Die Dienstindexschemaversion wird durch die eigenschaft version
im Dienstindex angegeben. Die API schreibt vor, dass die Versionszeichenfolge eine Hauptversionsnummer von 3
hat. Wenn änderungen am Dienstindexschema vorgenommen werden, wird die Nebenversion der Versionszeichenfolge erhöht.
Ältere Clients (z. B. nuget.exe 2.x) unterstützen die V3-API nicht und unterstützen nur die ältere V2-API, die hier nicht dokumentiert ist.
Die NuGet V3-API wird als solche bezeichnet, da sie der Nachfolger der V2-API ist, das das OData-basierte Protokoll war, das von der 2.x-Version des offiziellen NuGet-Clients implementiert wurde. Die V3-API wurde zuerst von der 3.0-Version des offiziellen NuGet-Clients unterstützt und ist weiterhin die neueste Hauptprotokollversion, die vom NuGet-Client, 4.0 und weiter unterstützt wird.
Seit der ersten Veröffentlichung wurden ungebrochene Protokolländerungen an der API vorgenommen.
Ressourcen und Schema
Der Dienstindex beschreibt eine Vielzahl von Ressourcen. Die aktuellen unterstützten Ressourcen sind wie folgt:
Ressourcenname | Erforderlich | Beschreibung |
---|---|---|
Katalog- | Nein | Vollständige Aufzeichnung aller Paketereignisse. |
PackageBaseAddress- | ja | Abrufen von Paketinhalten (.nupkg). |
PackageDetailsUriTemplate- | Nein | Erstellen Sie eine URL für den Zugriff auf eine Paketdetails-Webseite. |
PackagePublish- | ja | Push- und Löschpakete (oder Aufheben der Liste). |
ReadmeUriTemplate- | Nein | Erstellen Sie eine URL für den Zugriff auf die README-Datei eines Pakets. |
RegistrationsBaseUrl | ja | Abrufen von Paketmetadaten. |
ReportAbuseUriTemplate- | Nein | Erstellen Sie eine URL für den Zugriff auf eine Berichtsmissbrauchswebseite. |
RepositorySignatures | Nein | Abrufen von Zertifikaten, die für die Repositorysignierung verwendet werden. |
SearchAutocompleteService- | Nein | Entdecken Sie Paket-IDs und -Versionen nach Teilzeichenfolge. |
SearchQueryService- | ja | Filtern und suchen Sie nach Paketen nach Schlüsselwort. |
SymbolPackagePublish- | Nein | Pushsymbolpakete. |
VulnerabilityInfo- | Nein | Pakete mit bekannten Sicherheitsrisiken. |
Im Allgemeinen werden alle nicht binären Daten, die von einer API-Ressource zurückgegeben werden, mithilfe von JSON serialisiert. Das antwortschema, das von jeder Ressource im Dienstindex zurückgegeben wird, wird für diese Ressource einzeln definiert. Weitere Informationen zu den einzelnen Ressourcen finden Sie in den oben aufgeführten Themen.
Wenn sich das Protokoll weiterentwickelt, können zukünftig neue Eigenschaften zu JSON-Antworten hinzugefügt werden. Damit der Client zukunftssicher ist, sollte die Implementierung nicht davon ausgehen, dass das Antwortschema abgeschlossen ist und keine zusätzlichen Daten enthalten kann. Alle Eigenschaften, die die Implementierung nicht versteht, sollten ignoriert werden.
Anmerkung
Wenn eine Quelle SearchAutocompleteService
kein AutoVervollständigen-Verhalten implementiert, sollte dies ordnungsgemäß deaktiviert werden. Wenn ReportAbuseUriTemplate
nicht implementiert ist, greift der offizielle NuGet-Client auf die Url des Missbrauchsberichts von nuget.org zurück (nachverfolgt von NuGet/Home#4924). Andere Clients können sich dafür entscheiden, dem Benutzer einfach keine Berichtsmissbrauchs-URL anzuzeigen.
Nicht dokumentierte Ressourcen für nuget.org
Der V3-Dienstindex für nuget.org enthält einige Ressourcen, die oben nicht dokumentiert sind. Es gibt einige Gründe, eine Ressource nicht zu dokumentieren.
Zunächst dokumentieren wir keine Ressourcen, die als Implementierungsdetails von nuget.org verwendet werden. Die SearchGalleryQueryService
fällt in diese Kategorie.
NuGetGallery verwendet diese Ressource, um einige V2 (OData)-Abfragen an unseren Suchindex zu delegieren, anstatt die Datenbank zu verwenden. Diese Ressource wurde aus Skalierbarkeitsgründen eingeführt und ist nicht für die externe Verwendung vorgesehen.
Zweitens dokumentieren wir keine Ressourcen, die nie in einer RTM-Version des offiziellen Kunden ausgeliefert wurden.
PackageDisplayMetadataUriTemplate
und PackageVersionDisplayMetadataUriTemplate
fallen in diese Kategorie.
Drittens dokumentieren wir keine Ressourcen, die eng mit dem V2-Protokoll verbunden sind, das absichtlich nicht dokumentiert ist. Die LegacyGallery
Ressource fällt in diese Kategorie. Diese Ressource ermöglicht es einem V3-Dienstindex, auf eine entsprechende V2-Quell-URL zu verweisen. Diese Ressource unterstützt die nuget.exe list
.
Wenn eine Ressource hier nicht dokumentiert ist, wir dringend empfehlen, dass Sie keine Abhängigkeit davon nehmen. Wir können das Verhalten dieser nicht dokumentierten Ressourcen entfernen oder ändern, die Ihre Implementierung auf unerwartete Weise unterbrechen könnten.
Zeitstempel
Alle von der API zurückgegebenen Zeitstempel sind UTC oder werden anderweitig mit ISO 8601 Darstellung angegeben.
HTTP-Methoden
Verb | Gebrauchen |
---|---|
ERHALTEN | Führt einen schreibgeschützten Vorgang aus, der in der Regel Daten abruft. |
KOPF | Ruft die Antwortheader für die entsprechende GET Anforderung ab. |
STELLEN | Erstellt eine Ressource, die nicht vorhanden ist oder, falls vorhanden, aktualisiert sie. Einige Ressourcen unterstützen möglicherweise kein Update. |
LÖSCHEN | Löscht oder hebt die Liste einer Ressource auf. |
HTTP-Statuscodes
Code | Beschreibung |
---|---|
200 | Erfolg, und es gibt einen Antworttext. |
201 | Erfolg und Die Ressource wurde erstellt. |
202 | Erfolg, die Anforderung wurde akzeptiert, aber einige Arbeiten sind möglicherweise noch unvollständig und asynchron abgeschlossen. |
204 | Erfolg, aber es gibt keinen Antworttext. |
301 | Eine dauerhafte Umleitung. |
302 | Eine temporäre Umleitung. |
400 | Die Parameter in der URL oder im Anforderungstext sind ungültig. |
401 | Die bereitgestellten Anmeldeinformationen sind ungültig. |
403 | Die Aktion ist aufgrund der bereitgestellten Anmeldeinformationen nicht zulässig. |
404 | Die angeforderte Ressource ist nicht vorhanden. |
409 | Die Anforderung ist mit einer vorhandenen Ressource in Konflikt. |
500 | Beim Dienst ist ein unerwarteter Fehler aufgetreten. |
503 | Der Dienst ist vorübergehend nicht verfügbar. |
Jede GET
Anforderung an einen API-Endpunkt kann eine HTTP-Umleitung (301 oder 302) zurückgeben. Clients sollten solche Umleitungen ordnungsgemäß behandeln, indem Sie den Location
Header beobachten und eine nachfolgende GET
ausgeben. Dokumentation zu bestimmten Endpunkten wird nicht explizit aufgerufen, wo Umleitungen verwendet werden können.
Bei einem Statuscode der 500-Ebene kann der Client einen angemessenen Wiederholungsmechanismus implementieren. Der offizielle NuGet-Client wiederholt dreimal, wenn ein Statuscode auf 500 Ebenen oder ein TCP/DNS-Fehler auftritt.
HTTP-Anforderungsheader
Name | Beschreibung |
---|---|
X-NuGet-ApiKey | Erforderlich für Push- und Löschvorgang finden Sie unter PackagePublish Ressourcen- |
X-NuGet-Client-Version |
veraltete und ersetzt durch X-NuGet-Protocol-Version |
X-NuGet-Protocol-Version | In bestimmten Fällen nur für nuget.org erforderlich, lesen Sie nuget.org Protokolle |
X-NuGet-Session-Id | Optional. NuGet-Clients v4.7+ identifizieren HTTP-Anforderungen, die Teil derselben NuGet-Clientsitzung sind. |
Die X-NuGet-Session-Id
weist einen einzelnen Wert für alle Vorgänge im Zusammenhang mit einer einzelnen Wiederherstellung in PackageReference
auf. Für andere Szenarien wie AutoVervollständigen und packages.config
Wiederherstellen kann es mehrere verschiedene Sitzungs-IDs geben, da der Code faktoriert wird.
Authentifizierung
Die Authentifizierung bleibt bis zur Paketquellimplementierung, die definiert werden soll. Für nuget.org erfordert nur die PackagePublish
Ressource eine Authentifizierung über einen speziellen API-Schlüsselheader. Weitere Informationen finden Sie unter PackagePublish
Ressourcen-.