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.exe und der .NET CLI verwendet, um NuGet-Vorgänge auszuführen, z dotnet restore
. B. die Suche in der Visual Studio-Benutzeroberfläche und nuget.exe push
.
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 Protokolle dokumentiert.
Eine einfache Aufzählung und einen Download der verfügbaren Nuget.exe-Versionen finden Sie im tools.json-Endpunkt .
Wenn Sie ein NuGet-Paket-Repository implementieren, lesen Sie auch das Implementierungshandbuch für zusätzliche Anforderungen und Empfehlungen.
Der Einstiegspunkt für die API ist ein JSON-Dokument an einem bekannten Speicherort. Dieses Dokument wird als Dienstindex bezeichnet. Der Dienstindexspeicherort für nuget.org ist https://api.nuget.org/v3/index.json
.
Dieses JSON-Dokument enthält eine Liste von 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 finden Sie in der Referenz zur API zur Indexerstellung.
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 version
Eigenschaft im Dienstindex angegeben. Die API verlangt, dass die Versionszeichenfolge die Hauptversionsnummer 3
aufweist. Da am Dienstindexschema keine Breaking Changes 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.
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). |
RegistrationsBaseUrl | ja | Paketmetadaten abrufen. |
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 nach Paketen nach Schlüsselwort (keyword). |
SymbolPackagePublish | Nein | Push-Symbolpakete. |
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.
Hinweis
Wenn eine Quelle kein AutoVervollständigen-Verhalten implementiertSearchAutocompleteService
, sollte ordnungsgemäß deaktiviert werden. Wenn ReportAbuseUriTemplate
sie nicht implementiert ist, greift der offizielle NuGet-Client auf die Missbrauchs-URL 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.
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. Der SearchGalleryQueryService
Fall 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
in diese Kategorie fallen.
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, empfehlen wir dringend, 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.
Alle von der API zurückgegebenen Zeitstempel sind UTC oder werden anderweitig mit ISO 8601-Darstellung angegeben.
Verb | Einsetzen |
---|---|
GET | Führt einen schreibgeschützten Vorgang aus, der in der Regel Daten abruft. |
HEAD | Ruft die Antwortheader für die entsprechende GET -Anforderung ab. |
PUT | Erstellt eine Ressource, die nicht vorhanden ist oder, falls vorhanden, aktualisiert sie. Einige Ressourcen unterstützen möglicherweise kein Update. |
DELETE | Löscht oder hebt die Liste einer Ressource auf. |
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 | Permanente Umleitung. |
302 | Temporäre Umleitung. |
400 | Die Parameter in der URL oder im Anforderungstext sind ungültig. |
401 | Die bereitgestellten Anmeldeinformationen sind falsch. |
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 | Der Server hat einen unerwarteten Fehler erkannt. |
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äß verarbeiten, indem Sie den Location
Header beobachten und eine nachfolgende GET
Ausgabe 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.
Name | Beschreibung |
---|---|
X-NuGet-ApiKey | Erforderlich für Push- und Löschvorgang, siehe PackagePublish Ressource |
X-NuGet-Client-Version | Veraltet und ersetzt durch X-NuGet-Protocol-Version |
X-NuGet-Protokollversion | Erforderlich in bestimmten Fällen nur für nuget.org, siehe nuget.org Protokolle |
X-NuGet-Session-ID | Optional. NuGet-Clients v4.7+ identifizieren HTTP-Anforderungen, die Teil derselben NuGet-Clientsitzung sind. |
Der X-NuGet-Session-Id
Wert weist einen einzelnen Wert für alle Vorgänge auf, die sich auf eine einzelne Wiederherstellung beziehen PackageReference
. Für andere Szenarien wie AutoVervollständigen und packages.config
Wiederherstellen gibt es möglicherweise mehrere verschiedene Sitzungs-IDs, da der Code faktoriert wird.
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. Details finden Sie PackagePublish
in der Ressource .