Udostępnij za pośrednictwem


Interfejs API serwera NuGet

Interfejs API serwera NuGet to zestaw punktów końcowych HTTP, które mogą służyć do pobierania pakietów, pobierania metadanych, publikowania nowych pakietów i wykonywania większości innych operacji dostępnych w oficjalnych klientach NuGet.

Ten interfejs API jest używany przez klienta NuGet w programie Visual Studio, nuget.exei interfejsie wiersza polecenia platformy .NET do wykonywania operacji NuGet, takich jak dotnet restore, wyszukiwanie w interfejsie użytkownika programu Visual Studio i nuget.exe push.

Należy pamiętać, że w niektórych przypadkach nuget.org ma dodatkowe wymagania, które nie są wymuszane przez inne źródła pakietów. Te różnice są udokumentowane przez protokoły nuget.org.

Aby uzyskać proste wyliczenie i pobieranie dostępnych wersji nuget.exe, zobacz punkt końcowy tools.json.

Jeśli implementujesz repozytorium pakietów NuGet, zobacz również przewodnik implementacji, aby uzyskać dodatkowe wymagania i zalecenia.

Indeks usługi

Punktem wejścia interfejsu API jest dokument JSON w dobrze znanej lokalizacji. Ten dokument jest nazywany indeksem usługi . Lokalizacja indeksu usługi dla nuget.org jest https://api.nuget.org/v3/index.json.

Ten dokument JSON zawiera listę zasobów , które zapewniają różne funkcje i spełniają różne przypadki użycia.

Klienci, którzy obsługują interfejs API, powinni zaakceptować co najmniej jeden z tych adresów URL indeksu usługi jako sposób nawiązywania połączenia z odpowiednimi źródłami pakietów.

Aby uzyskać więcej informacji na temat indeksu usługi, zobacz dokumentacji interfejsu API.

Przechowywanie wersji

Interfejs API jest w wersji 3 protokołu HTTP nuGet. Ten protokół jest czasami nazywany "interfejsem API w wersji 3". Te dokumenty referencyjne będą odwoływać się do tej wersji protokołu po prostu jako "interfejs API".

Wersja schematu indeksu usługi jest wskazywana przez właściwość version w indeksie usługi. Interfejs API nakazuje, aby ciąg wersji miał numer wersji głównej 3. W miarę wprowadzania zmian powodujących niezgodność w schemacie indeksu usługi wersja pomocnicza ciągu wersji zostanie zwiększona.

Starsi klienci (na przykład nuget.exe 2.x) nie obsługują interfejsu API w wersji 3 i obsługują tylko starszy interfejs API w wersji 2, który nie został opisany w tym miejscu.

Interfejs API NuGet v3 jest nazwany jako taki, ponieważ jest następcą interfejsu API w wersji 2, który był protokołem opartym na protokole OData zaimplementowanym przez wersję 2.x oficjalnego klienta NuGet. Interfejs API w wersji 3 został po raz pierwszy obsługiwany przez wersję 3.0 oficjalnego klienta NuGet i jest nadal najnowszą główną wersją protokołu obsługiwaną przez klienta NuGet, 4.0 i nowszego.

Zmiany protokołu powodujące niezgodność zostały wprowadzone w interfejsie API od czasu jej pierwszego wydania.

Zasoby i schemat

Indeks usługi opisuje różne zasoby. Bieżący zestaw obsługiwanych zasobów jest następujący:

Nazwa zasobu Wymagane Opis
katalogu Nie Pełny rekord wszystkich zdarzeń pakietu.
PackageBaseAddress tak Pobierz zawartość pakietu (nupkg).
PackageDetailsUriTemplate Nie Konstruowanie adresu URL w celu uzyskania dostępu do strony sieci Web szczegółów pakietu.
PackagePublish tak Wypychanie i usuwanie (lub usuwanie) pakietów.
ReadmeUriTemplate Nie Konstruowanie adresu URL w celu uzyskania dostępu do pliku README pakietu.
RegistrationsBaseUrl tak Pobieranie metadanych pakietu.
ReportAbuseUriTemplate Nie Skonstruuj adres URL umożliwiający dostęp do strony internetowej nadużyć w raporcie.
RepositorySignatures Nie Pobierz certyfikaty używane do podpisywania repozytorium.
SearchAutocompleteService Nie Odnajdź identyfikatory i wersje pakietów według podciągów.
SearchQueryService tak Filtruj i wyszukuj pakiety według słowa kluczowego.
SymbolPackagePublish Nie Wypychanie pakietów symboli.
VulnerabilityInfo Nie Pakiety ze znanymi lukami w zabezpieczeniach.

Ogólnie rzecz biorąc, wszystkie dane niebinarne zwracane przez zasób interfejsu API są serializowane przy użyciu formatu JSON. Schemat odpowiedzi zwracany przez każdy zasób w indeksie usługi jest definiowany indywidualnie dla tego zasobu. Aby uzyskać więcej informacji na temat każdego zasobu, zobacz tematy wymienione powyżej.

W przyszłości, w miarę rozwoju protokołu, nowe właściwości mogą zostać dodane do odpowiedzi JSON. Aby klient był odporny na przyszłość, implementacja nie powinna zakładać, że schemat odpowiedzi jest końcowy i nie może zawierać dodatkowych danych. Wszystkie właściwości, których implementacja nie rozumie, powinny być ignorowane.

Nuta

Jeśli źródło nie implementuje SearchAutocompleteService żadne zachowanie autouzupełniania powinno być bezpiecznie wyłączone. Gdy ReportAbuseUriTemplate nie jest zaimplementowana, oficjalny klient NuGet powraca do adresu URL nadużyć raportów nuget.org (śledzony przez NuGet/Home#4924). Inni klienci mogą zdecydować się po prostu nie pokazywać użytkownikowi adresu URL nadużyć w raporcie.

Zasoby nieudokumentowane w usłudze nuget.org

Indeks usługi w wersji 3 nuget.org zawiera pewne zasoby, które nie zostały udokumentowane powyżej. Istnieje kilka powodów, dla których nie można udokumentować zasobu.

Najpierw nie dokumentujemy zasobów używanych jako szczegóły implementacji nuget.org. SearchGalleryQueryService należy do tej kategorii. nuGetGallery używa tego zasobu do delegowania niektórych zapytań V2 (OData) do naszego indeksu wyszukiwania zamiast używania bazy danych. Ten zasób został wprowadzony ze względu na skalowalność i nie jest przeznaczony do użytku zewnętrznego.

Po drugie, nie dokumentujemy zasobów, które nigdy nie zostały wysłane w wersji RTM oficjalnego klienta. PackageDisplayMetadataUriTemplate i PackageVersionDisplayMetadataUriTemplate należą do tej kategorii.

Po trzecie, nie dokumentujemy zasobów ściśle powiązanych z protokołem V2, który jest celowo nieudokumentowany. Zasób LegacyGallery należy do tej kategorii. Ten zasób umożliwia indeksowi usługi w wersji 3 wskazanie odpowiedniego źródłowego adresu URL wersji 2. Ten zasób obsługuje nuget.exe list.

Jeśli zasób nie jest udokumentowany w tym miejscu, zdecydowanie zaleca się, aby nie przyjmować zależności od nich. Możemy usunąć lub zmienić zachowanie tych nieudokumentowanych zasobów, co może spowodować awarię implementacji w nieoczekiwany sposób.

Sygnatury czasowe

Wszystkie znaczniki czasu zwracane przez interfejs API są utc lub w inny sposób określone przy użyciu reprezentacji ISO 8601.

Metody HTTP

Czasownik Używać
POBIERZ Wykonuje operację tylko do odczytu, zazwyczaj pobiera dane.
GŁOWA Pobiera nagłówki odpowiedzi dla odpowiedniego żądania GET.
KŁAŚĆ Tworzy zasób, który nie istnieje lub, jeśli istnieje, aktualizuje go. Niektóre zasoby mogą nie obsługiwać aktualizacji.
USUNĄĆ Usuwa lub usuwa listę zasobu.

Kody stanu HTTP

Kod Opis
200 Powodzenie i istnieje treść odpowiedzi.
201 Powodzenie i utworzono zasób.
202 Żądanie zostało zaakceptowane, ale niektóre prace mogą być nadal niekompletne i ukończone asynchronicznie.
204 Sukces, ale nie ma treści odpowiedzi.
301 Trwałe przekierowanie.
302 Tymczasowe przekierowanie.
400 Parametry w adresie URL lub w treści żądania są nieprawidłowe.
401 Podane poświadczenia są nieprawidłowe.
403 Akcja nie jest dozwolona, biorąc pod uwagę podane poświadczenia.
404 Żądany zasób nie istnieje.
409 Żądanie powoduje konflikt z istniejącym zasobem.
500 Usługa napotkała nieoczekiwany błąd.
503 Usługa jest tymczasowo niedostępna.

Każde żądanie GET do punktu końcowego interfejsu API może zwrócić przekierowanie HTTP (301 lub 302). Klienci powinni bezpiecznie obsługiwać takie przekierowania, obserwując nagłówek Location i wydając kolejne GET. Dokumentacja dotycząca określonych punktów końcowych nie będzie jawnie określać, gdzie mogą być używane przekierowania.

W przypadku kodu stanu na poziomie 500 klient może zaimplementować rozsądny mechanizm ponawiania prób. Oficjalny klient NuGet ponawia próbę trzy razy podczas napotkania dowolnego kodu stanu na poziomie 500 lub błędu TCP/DNS.

Nagłówki żądań HTTP

Nazwa Opis
X-NuGet-ApiKey Wymagane do wypychania i usuwania zobacz zasobówPackagePublish
X-NuGet —Client-Version przestarzałe i zastąpione przez X-NuGet-Protocol-Version
X-NuGet —Protocol-Version Wymagane w niektórych przypadkach tylko w przypadku nuget.org zobacz protokoły nuget.org
X-NuGet —Session-Id opcjonalne. Klienci NuGet w wersji 4.7 lub nowszej identyfikują żądania HTTP będące częścią tej samej sesji klienta NuGet.

X-NuGet-Session-Id ma jedną wartość dla wszystkich operacji związanych z pojedynczym przywracaniem w PackageReference. W przypadku innych scenariuszy, takich jak autouzupełnianie i packages.config przywracanie, może istnieć kilka różnych identyfikatorów sesji ze względu na fakt, jak jest uwzględniany kod.

Uwierzytelnianie

Uwierzytelnianie jest pozostawione do implementacji źródła pakietu do zdefiniowania. W przypadku nuget.org tylko zasób PackagePublish wymaga uwierzytelniania za pośrednictwem specjalnego nagłówka klucza interfejsu API. Aby uzyskać szczegółowe informacje, zobacz PackagePublish resource.