Testowanie internetowych interfejsów API przy użyciu narzędzia HttpRepl
Pętla odczyt-ewaluacja-drukowanie (REPL, Read-Eval-Print Loop) to:
- Uproszczone, wieloplatformowe narzędzie wiersza polecenia obsługiwane wszędzie, gdzie jest obsługiwana platforma .NET Core.
- Służy do wykonywania żądań HTTP w celu testowania internetowych interfejsów API platformy ASP.NET Core (i internetowych interfejsów API spoza platformy ASP.NET Core) oraz wyświetlania ich wyników.
- Zapewnia możliwość testowania internetowych interfejsów API hostowanych w dowolnym środowisku, w tym hosta lokalnego i usługi Azure App Service.
Obsługiwane są następujące czasowniki HTTP:
Aby wykonać poniższe czynności, wyświetl lub pobierz przykładowy internetowy interfejs API platformy ASP.NET Core (jak pobrać).
Wymagania wstępne
Instalacja
Aby zainstalować narzędzie HttpRepl, uruchom następujące polecenie:
dotnet tool install -g Microsoft.dotnet-httprepl
Narzędzie globalne platformy .NET Core jest instalowane z pakietu NuGet Microsoft.dotnet-httprepl.
Uwaga
Domyślnie architektura plików binarnych platformy .NET do zainstalowania reprezentuje obecnie uruchomioną architekturę systemu operacyjnego. Aby określić inną architekturę systemu operacyjnego, zobacz dotnet tool install, --arch option(Instalacja narzędzia dotnet). Aby uzyskać więcej informacji, zobacz problem z usługą GitHub dotnet/AspNetCore.Docs #29262.
W systemie macOS zaktualizuj ścieżkę:
export PATH="$HOME/.dotnet/tools:$PATH"
Użycie
Po pomyślnej instalacji narzędzia uruchom następujące polecenie, aby uruchomić narzędzie HttpRepl:
httprepl
Aby wyświetlić dostępne polecenia narzędzia HttpRepl, uruchom jedno z następujących poleceń:
httprepl -h
httprepl --help
Zostaną wyświetlone następujące dane wyjściowe:
Usage:
httprepl [<BASE_ADDRESS>] [options]
Arguments:
<BASE_ADDRESS> - The initial base address for the REPL.
Options:
-h|--help - Show help information.
Once the REPL starts, these commands are valid:
Setup Commands:
Use these commands to configure the tool for your API server
connect Configures the directory structure and base address of the api server
set header Sets or clears a header for all requests. e.g. `set header content-type application/json`
HTTP Commands:
Use these commands to execute requests against your application.
GET get - Issues a GET request
POST post - Issues a POST request
PUT put - Issues a PUT request
DELETE delete - Issues a DELETE request
PATCH patch - Issues a PATCH request
HEAD head - Issues a HEAD request
OPTIONS options - Issues a OPTIONS request
Navigation Commands:
The REPL allows you to navigate your URL space and focus on specific APIs that you are working on.
ls Show all endpoints for the current path
cd Append the given directory to the currently selected path, or move up a path when using `cd ..`
Shell Commands:
Use these commands to interact with the REPL shell.
clear Removes all text from the shell
echo [on/off] Turns request echoing on or off, show the request that was made when using request commands
exit Exit the shell
REPL Customization Commands:
Use these commands to customize the REPL behavior.
pref [get/set] Allows viewing or changing preferences, e.g. 'pref set editor.command.default 'C:\\Program Files\\Microsoft VS Code\\Code.exe'`
run Runs the script at the given path. A script is a set of commands that can be typed with one command per line
ui Displays the Swagger UI page, if available, in the default browser
Use `help <COMMAND>` for more detail on an individual command. e.g. `help get`.
For detailed tool info, see https://aka.ms/http-repl-doc.
Narzędzie HttpRepl oferuje uzupełnianie poleceń. Naciśnięcie klawisza Tab powoduje iteracyjne przechodzenie przez listę poleceń, w których uzupełniono wpisane znaki lub punkt końcowy interfejsu API. W poniższych sekcjach opisano dostępne polecenia interfejsu wiersza polecenia.
Nawiązywanie połączenia z internetowym interfejsem API
Połącz się z internetowym interfejsem API, uruchamiając następujące polecenie:
httprepl <ROOT URI>
<ROOT URI>
to podstawowy identyfikator URI internetowego interfejsu API. Przykład:
httprepl https://localhost:5001
Alternatywnie uruchom następujące polecenie w dowolnym momencie, gdy jest uruchomione narzędzie HttpRepl:
connect <ROOT URI>
Przykład:
(Disconnected)> connect https://localhost:5001
Ręczne wskazywanie opisu interfejsu OpenAPI dla internetowego interfejsu API
Powyższe polecenie connect spróbuje automatycznie znaleźć opis interfejsu OpenAPI. Jeśli z jakiegoś powodu nie może tego zrobić, możesz podać identyfikator URI opisu interfejsu OpenAPI dla internetowego interfejsu API przy użyciu opcji --openapi
:
connect <ROOT URI> --openapi <OPENAPI DESCRIPTION ADDRESS>
Przykład:
(Disconnected)> connect https://localhost:5001 --openapi /swagger/v1/swagger.json
Włączanie pełnych danych wyjściowych w celu uzyskania szczegółowych informacji na temat wyszukiwania, analizy i walidacji opisu interfejsu OpenAPI
Określenie opcji --verbose
w poleceniu connect
spowoduje wygenerowanie dodatkowych szczegółów, gdy narzędzie wyszukuje opis interfejsu OpenAPI, analizuje go i waliduje.
connect <ROOT URI> --verbose
Przykład:
(Disconnected)> connect https://localhost:5001 --verbose
Checking https://localhost:5001/swagger.json... 404 NotFound
Checking https://localhost:5001/swagger/v1/swagger.json... 404 NotFound
Checking https://localhost:5001/openapi.json... Found
Parsing... Successful (with warnings)
The field 'info' in 'document' object is REQUIRED [#/info]
The field 'paths' in 'document' object is REQUIRED [#/paths]
Nawigowanie po internetowym interfejsie API
Wyświetlanie dostępnych punktów końcowych
Aby wyświetlić listę różnych punktów końcowych (kontrolerów) w bieżącej ścieżce adresu internetowego interfejsu API, uruchom polecenie ls
lub dir
:
https://localhost:5001/> ls
Zostanie wyświetlony następujący format wyjściowy:
. []
Fruits [get|post]
People [get|post]
https://localhost:5001/>
Poprzednie dane wyjściowe wskazują, że dostępne są dwa kontrolery: Fruits
i People
. Oba kontrolery obsługują bezparametrowe operacje HTTP GET i POST.
Przejście do konkretnego kontrolera ujawni więcej szczegółów. Na przykład następujące dane wyjściowe polecenia pokazują, że kontroler Fruits
obsługuje również operacje HTTP GET, PUT i DELETE. Każda z tych operacji oczekuje parametru id
w trasie:
https://localhost:5001/fruits> ls
. [get|post]
.. []
{id} [get|put|delete]
https://localhost:5001/fruits>
Alternatywnie uruchom polecenie ui
, aby otworzyć stronę interfejsu użytkownika struktury Swagger internetowego interfejsu API w przeglądarce. Przykład:
https://localhost:5001/> ui
Przechodzenie do punktu końcowego
Aby przejść do innego punktu końcowego w internetowym interfejsie API, uruchom polecenie cd
:
https://localhost:5001/> cd people
Ścieżka po poleceniu cd
jest niewrażliwa na wielkość liter. Zostanie wyświetlony następujący format wyjściowy:
/people [get|post]
https://localhost:5001/people>
Dostosowywanie narzędzia HttpRepl
Domyślne kolory narzędzia HttpRepl można dostosować. Ponadto można zdefiniować domyślny edytor tekstów. Preferencje narzędzia HttpRepl są utrwalane w bieżącej sesji i są honorowane w przyszłych sesjach. Po zmodyfikowaniu preferencje są przechowywane w następującym pliku:
Plik HTTPREPLPREFS jest ładowany podczas uruchamiania i nie jest monitorowany pod kątem zmian w czasie wykonywania. Ręczne modyfikacje pliku zostają uwzględnione dopiero po ponownym uruchomieniu narzędzia.
Wyświetlanie ustawień
Aby wyświetlić dostępne ustawienia, uruchom polecenie pref get
. Przykład:
https://localhost:5001/> pref get
Poprzednie polecenie powoduje wyświetlenie dostępnych par klucz-wartość:
colors.json=Green
colors.json.arrayBrace=BoldCyan
colors.json.comma=BoldYellow
colors.json.name=BoldMagenta
colors.json.nameSeparator=BoldWhite
colors.json.objectBrace=Cyan
colors.protocol=BoldGreen
colors.status=BoldYellow
Ustawianie preferencji kolorów
Kolorowanie odpowiedzi jest obecnie obsługiwane tylko w przypadku kodu JSON. Aby dostosować domyślne kolorowanie narzędzia HttpRepl, znajdź klucz odpowiadający kolorowi, który ma zostać zmieniony. Aby uzyskać instrukcje dotyczące znajdowania kluczy, zobacz sekcję Wyświetlanie ustawień. Na przykład zmień wartość klucza colors.json
z Green
na White
w następujący sposób:
https://localhost:5001/people> pref set colors.json White
Mogą być używane tylko dozwolone kolory. W kolejnych żądaniach HTTP dane wyjściowe są wyświetlane z nowym kolorowaniem.
Jeśli określone klucze kolorów nie są ustawione, są uwzględniane bardziej ogólne klucze. Aby zademonstrować to awaryjne zachowanie, rozważmy następujący przykład:
- Jeśli klucz
colors.json.name
nie ma wartości, jest używana wartośćcolors.json.string
. - Jeśli klucz
colors.json.string
nie ma wartości, jest używana wartośćcolors.json.literal
. - Jeśli klucz
colors.json.literal
nie ma wartości, jest używana wartośćcolors.json
. - Jeśli klucz
colors.json
nie ma wartości, zostanie użyty domyślny kolor tekstu powłoki poleceń (AllowedColors.None
).
Ustawianie rozmiaru wcięcia
Dostosowywanie rozmiaru wcięcia odpowiedzi jest obecnie obsługiwane tylko w przypadku kodu JSON. Domyślny rozmiar to dwie spacje. Przykład:
[
{
"id": 1,
"name": "Apple"
},
{
"id": 2,
"name": "Orange"
},
{
"id": 3,
"name": "Strawberry"
}
]
Aby zmienić domyślny rozmiar, ustaw klucz formatting.json.indentSize
. Aby na przykład zawsze używać czterech spacji:
pref set formatting.json.indentSize 4
Kolejne odpowiedzi honorują ustawienie czterech spacji:
[
{
"id": 1,
"name": "Apple"
},
{
"id": 2,
"name": "Orange"
},
{
"id": 3,
"name": "Strawberry"
}
]
Ustawianie domyślnego edytora tekstów
Domyślnie protokół HttpRepl nie ma skonfigurowanego edytora tekstów do używania. Aby przetestować metody internetowego interfejsu API wymagające treści żądania HTTP, należy ustawić domyślny edytor tekstów. Narzędzie HttpRepl uruchamia skonfigurowany edytor tekstów jedynie w celu redagowania treści żądania. Uruchom następujące polecenie, aby ustawić preferowany edytor tekstów jako domyślny:
pref set editor.command.default "<EXECUTABLE>"
W poprzednim poleceniu <EXECUTABLE>
to pełna ścieżka do pliku wykonywalnego edytora tekstów. Na przykład uruchom następujące polecenie, aby ustawić program Visual Studio Code jako domyślny edytor tekstów:
Aby uruchomić domyślny edytor tekstów z określonymi argumentami interfejsu wiersza polecenia, ustaw klucz editor.command.default.arguments
. Załóżmy na przykład, że program Visual Studio Code jest domyślnym edytorem tekstów i że zawsze chcesz, aby narzędzie HttpRepl otwierało program Visual Studio Code w nowej sesji z wyłączonymi rozszerzeniami. Uruchom następujące polecenie:
pref set editor.command.default.arguments "--disable-extensions --new-window"
Napiwek
Jeśli domyślnym edytorem jest program Visual Studio Code, zazwyczaj należy przekazać argument -w
lub --wait
, aby wymusić poczekanie programu Visual Studio Code na zamknięcie pliku przed powróceniem.
Ustawianie ścieżek wyszukiwania opisu interfejsu OpenAPI
Domyślnie narzędzie HttpRepl ma zestaw ścieżek względnych używanych do znajdowania opisu interfejsu OpenAPI podczas wykonywania polecenia connect
bez opcji --openapi
. Te ścieżki względne są łączone ze ścieżkami głównymi i podstawowymi określonymi w poleceniu connect
. Domyślne ścieżki względne to:
swagger.json
swagger/v1/swagger.json
/swagger.json
/swagger/v1/swagger.json
openapi.json
/openapi.json
Aby użyć innego zestawu ścieżek wyszukiwania w środowisku, ustaw preferencję swagger.searchPaths
. Wartość musi być listą ścieżek względnych rozdzielonych potokami. Przykład:
pref set swagger.searchPaths "swagger/v2/swagger.json|swagger/v3/swagger.json"
Zamiast całkowicie zastępować listę domyślną, można również zmodyfikować listę przez dodanie lub usunięcie ścieżek.
Aby dodać co najmniej jedną ścieżkę wyszukiwania do listy domyślnej, ustaw preferencję swagger.addToSearchPaths
. Wartość musi być listą ścieżek względnych rozdzielonych potokami. Przykład:
pref set swagger.addToSearchPaths "openapi/v2/openapi.json|openapi/v3/openapi.json"
Aby usunąć co najmniej jedną ścieżkę wyszukiwania z listy domyślnej, ustaw preferencję swagger.addToSearchPaths
. Wartość musi być listą ścieżek względnych rozdzielonych potokami. Przykład:
pref set swagger.removeFromSearchPaths "swagger.json|/swagger.json"
Testowanie żądań HTTP GET
Streszczenie
get <PARAMETER> [-F|--no-formatting] [-h|--header] [--response:body] [--response:headers] [-s|--streaming]
Argumenty
PARAMETER
Parametr trasy, jeśli istnieje, oczekiwany przez skojarzoną metodę akcji kontrolera.
Opcje
Dla polecenia get
są dostępne następujące opcje:
-F|--no-formatting
Flaga, której obecność pomija formatowanie odpowiedzi HTTP.
-h|--header
Ustawia nagłówek żądania HTTP. Obsługiwane są dwa następujące formaty wartości:
{header}={value}
{header}:{value}
--response:body
Określa plik, w którym ma być zapisywana treść odpowiedzi HTTP. Na przykład
--response:body "C:\response.json"
. Plik zostanie utworzony, jeśli nie istnieje.--response:headers
Określa plik, w którym mają być zapisywane nagłówki odpowiedzi HTTP. Na przykład
--response:headers "C:\response.txt"
. Plik zostanie utworzony, jeśli nie istnieje.-s|--streaming
Flaga, której obecność umożliwia przesyłanie strumieniowe odpowiedzi HTTP.
Przykład
Aby wydać żądanie HTTP GET:
Uruchom polecenie
get
w punkcie końcowym, który je obsługuje:https://localhost:5001/people> get
Poprzednie polecenie powoduje wyświetlenie następującego formatu danych wyjściowych:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 21 Jun 2019 03:38:45 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Scott Hunter" }, { "id": 2, "name": "Scott Hanselman" }, { "id": 3, "name": "Scott Guthrie" } ] https://localhost:5001/people>
Pobierz określony rekord, przekazując parametr do polecenia
get
:https://localhost:5001/people> get 2
Poprzednie polecenie powoduje wyświetlenie następującego formatu danych wyjściowych:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 21 Jun 2019 06:17:57 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 2, "name": "Scott Hanselman" } ] https://localhost:5001/people>
Testowanie żądań HTTP POST
Streszczenie
post <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumenty
PARAMETER
Parametr trasy, jeśli istnieje, oczekiwany przez skojarzoną metodę akcji kontrolera.
Opcje
-F|--no-formatting
Flaga, której obecność pomija formatowanie odpowiedzi HTTP.
-h|--header
Ustawia nagłówek żądania HTTP. Obsługiwane są dwa następujące formaty wartości:
{header}={value}
{header}:{value}
--response:body
Określa plik, w którym ma być zapisywana treść odpowiedzi HTTP. Na przykład
--response:body "C:\response.json"
. Plik zostanie utworzony, jeśli nie istnieje.--response:headers
Określa plik, w którym mają być zapisywane nagłówki odpowiedzi HTTP. Na przykład
--response:headers "C:\response.txt"
. Plik zostanie utworzony, jeśli nie istnieje.-s|--streaming
Flaga, której obecność umożliwia przesyłanie strumieniowe odpowiedzi HTTP.
-c|--content
Udostępnia śródwierszową treść żądania HTTP. Na przykład
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Udostępnia ścieżkę do pliku zawierającego treść żądania HTTP. Na przykład
-f "C:\request.json"
.--no-body
Wskazuje, że nie jest wymagana żadna treść żądania HTTP.
Przykład
Aby wydać żądanie HTTP POST:
Uruchom polecenie
post
w punkcie końcowym, który je obsługuje:https://localhost:5001/people> post -h Content-Type=application/json
W poprzednim poleceniu nagłówek żądania HTTP
Content-Type
jest ustawiony tak, aby wskazywał nośnik treści żądania typu JSON. Domyślny edytor tekstów otwiera plik TMP z szablonem JSON reprezentującym treść żądania HTTP. Przykład:{ "id": 0, "name": "" }
Napiwek
Aby ustawić domyślny edytor tekstów, zobacz sekcję Ustawianie domyślnego edytora tekstów.
Zmodyfikuj szablon JSON aby spełniał wymagania dotyczące walidacji modelu:
{ "id": 0, "name": "Scott Addie" }
Zapisz plik TMP i zamknij edytor tekstów. W powłoce poleceń zostaną wyświetlone następujące dane wyjściowe:
HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Date: Thu, 27 Jun 2019 21:24:18 GMT Location: https://localhost:5001/people/4 Server: Kestrel Transfer-Encoding: chunked { "id": 4, "name": "Scott Addie" } https://localhost:5001/people>
Testowanie żądań HTTP PUT
Streszczenie
put <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumenty
PARAMETER
Parametr trasy, jeśli istnieje, oczekiwany przez skojarzoną metodę akcji kontrolera.
Opcje
-F|--no-formatting
Flaga, której obecność pomija formatowanie odpowiedzi HTTP.
-h|--header
Ustawia nagłówek żądania HTTP. Obsługiwane są dwa następujące formaty wartości:
{header}={value}
{header}:{value}
--response:body
Określa plik, w którym ma być zapisywana treść odpowiedzi HTTP. Na przykład
--response:body "C:\response.json"
. Plik zostanie utworzony, jeśli nie istnieje.--response:headers
Określa plik, w którym mają być zapisywane nagłówki odpowiedzi HTTP. Na przykład
--response:headers "C:\response.txt"
. Plik zostanie utworzony, jeśli nie istnieje.-s|--streaming
Flaga, której obecność umożliwia przesyłanie strumieniowe odpowiedzi HTTP.
-c|--content
Udostępnia śródwierszową treść żądania HTTP. Na przykład
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Udostępnia ścieżkę do pliku zawierającego treść żądania HTTP. Na przykład
-f "C:\request.json"
.--no-body
Wskazuje, że nie jest wymagana żadna treść żądania HTTP.
Przykład
Aby wydać żądanie HTTP PUT:
Opcjonalnie: uruchom polecenie
get
, aby wyświetlić dane przed ich zmodyfikowaniem:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:07:32 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 2, "data": "Orange" }, { "id": 3, "data": "Strawberry" } ]
Uruchom polecenie
put
w punkcie końcowym, który je obsługuje:https://localhost:5001/fruits> put 2 -h Content-Type=application/json
W poprzednim poleceniu nagłówek żądania HTTP
Content-Type
jest ustawiony tak, aby wskazywał nośnik treści żądania typu JSON. Domyślny edytor tekstów otwiera plik TMP z szablonem JSON reprezentującym treść żądania HTTP. Przykład:{ "id": 0, "name": "" }
Napiwek
Aby ustawić domyślny edytor tekstów, zobacz sekcję Ustawianie domyślnego edytora tekstów.
Zmodyfikuj szablon JSON aby spełniał wymagania dotyczące walidacji modelu:
{ "id": 2, "name": "Cherry" }
Zapisz plik TMP i zamknij edytor tekstów. W powłoce poleceń zostaną wyświetlone następujące dane wyjściowe:
[main 2019-06-28T17:27:01.805Z] update#setState idle HTTP/1.1 204 No Content Date: Fri, 28 Jun 2019 17:28:21 GMT Server: Kestrel
Opcjonalnie: wydaj polecenie
get
, aby wyświetlić modyfikacje. Jeśli na przykład w edytorze tekstów wpisano „Cherry”, polecenieget
zwróci następujące dane wyjściowe:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:08:20 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 2, "data": "Cherry" }, { "id": 3, "data": "Strawberry" } ] https://localhost:5001/fruits>
Testowanie żądań HTTP DELETE
Streszczenie
delete <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumenty
PARAMETER
Parametr trasy, jeśli istnieje, oczekiwany przez skojarzoną metodę akcji kontrolera.
Opcje
-F|--no-formatting
Flaga, której obecność pomija formatowanie odpowiedzi HTTP.
-h|--header
Ustawia nagłówek żądania HTTP. Obsługiwane są dwa następujące formaty wartości:
{header}={value}
{header}:{value}
--response:body
Określa plik, w którym ma być zapisywana treść odpowiedzi HTTP. Na przykład
--response:body "C:\response.json"
. Plik zostanie utworzony, jeśli nie istnieje.--response:headers
Określa plik, w którym mają być zapisywane nagłówki odpowiedzi HTTP. Na przykład
--response:headers "C:\response.txt"
. Plik zostanie utworzony, jeśli nie istnieje.-s|--streaming
Flaga, której obecność umożliwia przesyłanie strumieniowe odpowiedzi HTTP.
Przykład
Aby wydać żądanie HTTP DELETE:
Opcjonalnie: uruchom polecenie
get
, aby wyświetlić dane przed ich zmodyfikowaniem:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:07:32 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 2, "data": "Orange" }, { "id": 3, "data": "Strawberry" } ]
Uruchom polecenie
delete
w punkcie końcowym, który je obsługuje:https://localhost:5001/fruits> delete 2
Poprzednie polecenie powoduje wyświetlenie następującego formatu danych wyjściowych:
HTTP/1.1 204 No Content Date: Fri, 28 Jun 2019 17:36:42 GMT Server: Kestrel
Opcjonalnie: wydaj polecenie
get
, aby wyświetlić modyfikacje. W tym przykładzie polecenieget
zwraca następujące dane wyjściowe:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:16:30 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 3, "data": "Strawberry" } ] https://localhost:5001/fruits>
Testowanie żądań HTTP PATCH
Streszczenie
patch <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumenty
PARAMETER
Parametr trasy, jeśli istnieje, oczekiwany przez skojarzoną metodę akcji kontrolera.
Opcje
-F|--no-formatting
Flaga, której obecność pomija formatowanie odpowiedzi HTTP.
-h|--header
Ustawia nagłówek żądania HTTP. Obsługiwane są dwa następujące formaty wartości:
{header}={value}
{header}:{value}
--response:body
Określa plik, w którym ma być zapisywana treść odpowiedzi HTTP. Na przykład
--response:body "C:\response.json"
. Plik zostanie utworzony, jeśli nie istnieje.--response:headers
Określa plik, w którym mają być zapisywane nagłówki odpowiedzi HTTP. Na przykład
--response:headers "C:\response.txt"
. Plik zostanie utworzony, jeśli nie istnieje.-s|--streaming
Flaga, której obecność umożliwia przesyłanie strumieniowe odpowiedzi HTTP.
-c|--content
Udostępnia śródwierszową treść żądania HTTP. Na przykład
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Udostępnia ścieżkę do pliku zawierającego treść żądania HTTP. Na przykład
-f "C:\request.json"
.--no-body
Wskazuje, że nie jest wymagana żadna treść żądania HTTP.
Testowanie żądań HTTP HEAD
Streszczenie
head <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumenty
PARAMETER
Parametr trasy, jeśli istnieje, oczekiwany przez skojarzoną metodę akcji kontrolera.
Opcje
-F|--no-formatting
Flaga, której obecność pomija formatowanie odpowiedzi HTTP.
-h|--header
Ustawia nagłówek żądania HTTP. Obsługiwane są dwa następujące formaty wartości:
{header}={value}
{header}:{value}
--response:body
Określa plik, w którym ma być zapisywana treść odpowiedzi HTTP. Na przykład
--response:body "C:\response.json"
. Plik zostanie utworzony, jeśli nie istnieje.--response:headers
Określa plik, w którym mają być zapisywane nagłówki odpowiedzi HTTP. Na przykład
--response:headers "C:\response.txt"
. Plik zostanie utworzony, jeśli nie istnieje.-s|--streaming
Flaga, której obecność umożliwia przesyłanie strumieniowe odpowiedzi HTTP.
Testowanie żądań HTTP OPTIONS
Streszczenie
options <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumenty
PARAMETER
Parametr trasy, jeśli istnieje, oczekiwany przez skojarzoną metodę akcji kontrolera.
Opcje
-F|--no-formatting
Flaga, której obecność pomija formatowanie odpowiedzi HTTP.
-h|--header
Ustawia nagłówek żądania HTTP. Obsługiwane są dwa następujące formaty wartości:
{header}={value}
{header}:{value}
--response:body
Określa plik, w którym ma być zapisywana treść odpowiedzi HTTP. Na przykład
--response:body "C:\response.json"
. Plik zostanie utworzony, jeśli nie istnieje.--response:headers
Określa plik, w którym mają być zapisywane nagłówki odpowiedzi HTTP. Na przykład
--response:headers "C:\response.txt"
. Plik zostanie utworzony, jeśli nie istnieje.-s|--streaming
Flaga, której obecność umożliwia przesyłanie strumieniowe odpowiedzi HTTP.
Ustawianie nagłówków żądania HTTP
Aby ustawić nagłówek żądania HTTP, użyj jednej z następujących metod:
Ustaw wartość śródwierszowo z żądaniem HTTP. Przykład:
https://localhost:5001/people> post -h Content-Type=application/json
W przypadku powyższej metody każdy odrębny nagłówek żądania HTTP wymaga własnej opcji
-h
.Ustaw wartość przed wysłaniem żądania HTTP. Przykład:
https://localhost:5001/people> set header Content-Type application/json
Podczas ustawiania nagłówka przed wysłaniem żądania nagłówek pozostaje ustawiony na czas trwania sesji powłoki poleceń. Aby wyczyścić nagłówek, podaj pustą wartość. Przykład:
https://localhost:5001/people> set header Content-Type
Testowanie zabezpieczonych punktów końcowych
Narzędzie HttpRepl obsługuje testowanie zabezpieczonych punktów końcowych przy użyciu następujących sposobów:
- Za pomocą domyślnych poświadczeń zalogowanego użytkownika.
- Przez użycie nagłówków żądania HTTP.
Poświadczenia domyślne
Rozważ testowany internetowy interfejs API, który jest hostowany w usługach IIS i zabezpieczony przy użyciu uwierzytelniania systemu Windows. Chcesz, aby poświadczenia użytkownika uruchamiającego narzędzie przepływały do testowanych punktów końcowych HTTP. Aby przekazać poświadczenia domyślne zalogowanego użytkownika:
Ustaw dla preferencji
httpClient.useDefaultCredentials
wartośćtrue
:pref set httpClient.useDefaultCredentials true
Zamknij i uruchom ponownie narzędzie przed wysłaniem kolejnego żądania do internetowego interfejsu API.
Domyślne poświadczenia serwera proxy
Rozważmy scenariusz, w którym testowany internetowy interfejs API znajduje się za serwerem proxy zabezpieczonym przez uwierzytelnianie systemu Windows. Chcesz, aby poświadczenia użytkownika uruchamiającego narzędzie przepływały do serwera proxy. Aby przekazać poświadczenia domyślne zalogowanego użytkownika:
Ustaw dla preferencji
httpClient.proxy.useDefaultCredentials
wartośćtrue
:pref set httpClient.proxy.useDefaultCredentials true
Zamknij i uruchom ponownie narzędzie przed wysłaniem kolejnego żądania do internetowego interfejsu API.
Nagłówki żądań HTTP
Przykłady obsługiwanych schematów uwierzytelniania i autoryzacji obejmują:
- uwierzytelnianie podstawowe
- tokeny elementu nośnego JWT
- uwierzytelnianie szyfrowane
Możesz na przykład wysłać token elementu nośnego do punktu końcowego przy użyciu następującego polecenia:
set header Authorization "bearer <TOKEN VALUE>"
Aby uzyskać dostęp do punktu końcowego hostowanego na platformie Azure lub użyć interfejsu API REST platformy Azure, potrzebujesz tokenu elementu nośnego. Wykonaj poniższe kroki, aby uzyskać token elementu nośnego dla subskrypcji platformy Azure za pośrednictwem interfejsu wiersza polecenia platformy Azure. Narzędzie HttpRepl ustawia token elementu nośnego w nagłówku żądania HTTP. Zostanie pobrana lista usług Azure App Service Web Apps.
Zaloguj się do platformy Azure:
az login
Pobierz identyfikator subskrypcji za pomocą następującego polecenia:
az account show --query id
Skopiuj identyfikator subskrypcji i uruchom następujące polecenie:
az account set --subscription "<SUBSCRIPTION ID>"
Pobierz token elementu nośnego za pomocą następującego polecenia:
az account get-access-token --query accessToken
Połącz się z interfejsem API REST platformy Azure za pośrednictwem narzędzia HttpRepl:
httprepl https://management.azure.com
Ustaw nagłówek żądania HTTP
Authorization
:https://management.azure.com/> set header Authorization "bearer <ACCESS TOKEN>"
Przejdź do subskrypcji:
https://management.azure.com/> cd subscriptions/<SUBSCRIPTION ID>
Pobierz listę usług Azure App Service Web Apps subskrypcji:
https://management.azure.com/subscriptions/{SUBSCRIPTION ID}> get providers/Microsoft.Web/sites?api-version=2016-08-01
Zostanie wyświetlona następująca odpowiedź:
HTTP/1.1 200 OK Cache-Control: no-cache Content-Length: 35948 Content-Type: application/json; charset=utf-8 Date: Thu, 19 Sep 2019 23:04:03 GMT Expires: -1 Pragma: no-cache Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff x-ms-correlation-request-id: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em> x-ms-original-request-ids: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em> x-ms-ratelimit-remaining-subscription-reads: 11999 x-ms-request-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx x-ms-routing-request-id: WESTUS:xxxxxxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx { "value": [ <AZURE RESOURCES LIST> ] }
Przełączanie wyświetlania żądania HTTP
Domyślnie wyświetlanie wysyłanego żądania HTTP jest pomijane. Istnieje możliwość zmiany odpowiedniego ustawienia na czas trwania sesji powłoki poleceń.
Włączanie wyświetlania żądania
Wyświetl wysyłane żądanie HTTP, uruchamiając polecenie echo on
. Przykład:
https://localhost:5001/people> echo on
Request echoing is on
Kolejne żądania HTTP w bieżącej sesji wyświetlają nagłówki żądań. Przykład:
https://localhost:5001/people> post
[main 2019-06-28T18:50:11.930Z] update#setState idle
Request to https://localhost:5001...
POST /people HTTP/1.1
Content-Length: 41
Content-Type: application/json
User-Agent: HTTP-REPL
{
"id": 0,
"name": "Scott Addie"
}
Response from https://localhost:5001...
HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Date: Fri, 28 Jun 2019 18:50:21 GMT
Location: https://localhost:5001/people/4
Server: Kestrel
Transfer-Encoding: chunked
{
"id": 4,
"name": "Scott Addie"
}
https://localhost:5001/people>
Wyłączanie wyświetlania żądania
Pomiń wyświetlanie wysyłanego żądania HTTP, uruchamiając polecenie echo off
. Przykład:
https://localhost:5001/people> echo off
Request echoing is off
Uruchamianie skryptu
Jeśli często wykonujesz ten sam zestaw poleceń narzędzia HttpRepl, rozważ zapisanie ich w pliku tekstowym. Polecenia w pliku mają taką samą formę jak polecenia wykonywane ręcznie w wierszu polecenia. Polecenia można wykonywać partiami przy użyciu polecenia run
. Przykład:
Utwórz plik tekstowy zawierający zestaw poleceń rozdzielanych nowymi wierszami. Aby to zilustrować, rozważ plik people-script.txt zawierający następujące polecenia:
set base https://localhost:5001 ls cd People ls get 1
Wykonaj polecenie
run
, przekazując ścieżkę pliku tekstowego. Przykład:https://localhost:5001/> run C:\http-repl-scripts\people-script.txt
Zostaną wyświetlone następujące dane wyjściowe:
https://localhost:5001/> set base https://localhost:5001 Using OpenAPI description at https://localhost:5001/swagger/v1/swagger.json https://localhost:5001/> ls . [] Fruits [get|post] People [get|post] https://localhost:5001/> cd People /People [get|post] https://localhost:5001/People> ls . [get|post] .. [] {id} [get|put|delete] https://localhost:5001/People> get 1 HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 12 Jul 2019 19:20:10 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 1, "name": "Scott Hunter" } https://localhost:5001/People>
Czyszczenie danych wyjściowych
Aby usunąć wszystkie dane wyjściowe zapisane w powłoce poleceń przez narzędzie HttpRepl, uruchom polecenie clear
lub cls
. Aby to zilustrować, wyobraź sobie, że powłoka poleceń zawiera następujące dane wyjściowe:
httprepl https://localhost:5001
(Disconnected)> set base "https://localhost:5001"
Using OpenAPI description at https://localhost:5001/swagger/v1/swagger.json
https://localhost:5001/> ls
. []
Fruits [get|post]
People [get|post]
https://localhost:5001/>
Uruchom następujące polecenie, aby wyczyścić dane wyjściowe:
https://localhost:5001/> clear
Po uruchomieniu poprzedniego polecenia powłoka poleceń zawiera tylko następujące dane wyjściowe:
https://localhost:5001/>
Dodatkowe zasoby
- Żądania interfejsu API REST
- Repozytorium GitHub narzędzia HttpRepl
- Konfigurowanie programu Visual Studio w celu uruchamiania narzędzia HttpRepl
- Konfigurowanie programu Visual Studio Code w celu uruchamiania narzędzia HttpRepl
- Konfigurowanie programu Visual Studio dla komputerów Mac w celu uruchamiania narzędzia HttpRepl