Udostępnij za pośrednictwem


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. Na przykład:

httprepl https://localhost:5001

Alternatywnie uruchom następujące polecenie w dowolnym momencie, gdy jest uruchomione narzędzie HttpRepl:

connect <ROOT URI>

Na 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>

Na 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

Na 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]

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. Na przykład:

https://localhost:5001/> ui

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:

%HOME%/.httpreplprefs

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. Na 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 formatu 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 dla formatu JSON. Domyślny rozmiar to dwie spacje. Na 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:

pref set editor.command.default "/usr/bin/code"

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. Na 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. Na 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. Na 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:

  1. 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>
    
  2. 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:

  1. 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 jest ustawiony tak, Content-Type aby wskazywał typ nośnika treści żądania w formacie JSON. Domyślny edytor tekstów otwiera plik .tmp z szablonem JSON reprezentującym treść żądania HTTP. Na przykład:

    {
      "id": 0,
      "name": ""
    }
    

    Napiwek

    Aby ustawić domyślny edytor tekstów, zobacz sekcję Ustawianie domyślnego edytora tekstów.

  2. Zmodyfikuj szablon JSON, aby spełnić wymagania dotyczące walidacji modelu:

    {
      "id": 0,
      "name": "Scott Addie"
    }
    
  3. 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:

  1. 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"
      }
    ]
    
  2. 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 jest ustawiony tak, Content-Type aby wskazywał typ nośnika treści żądania w formacie JSON. Domyślny edytor tekstów otwiera plik .tmp z szablonem JSON reprezentującym treść żądania HTTP. Na przykład:

    {
      "id": 0,
      "name": ""
    }
    

    Napiwek

    Aby ustawić domyślny edytor tekstów, zobacz sekcję Ustawianie domyślnego edytora tekstów.

  3. Zmodyfikuj szablon JSON, aby spełnić wymagania dotyczące walidacji modelu:

    {
      "id": 2,
      "name": "Cherry"
    }
    
  4. 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
    
  5. Opcjonalnie: wydaj polecenie get, aby wyświetlić modyfikacje. Jeśli na przykład w edytorze tekstów wpisano „Cherry”, polecenie get 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:

  1. 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"
      }
    ]
    
  2. 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
    
  3. Opcjonalnie: wydaj polecenie get, aby wyświetlić modyfikacje. W tym przykładzie polecenie get 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. Na 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. Na 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ść. Na 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:

  1. Ustaw dla preferencji httpClient.useDefaultCredentials wartość true:

    pref set httpClient.useDefaultCredentials true
    
  2. 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:

  1. Ustaw dla preferencji httpClient.proxy.useDefaultCredentials wartość true:

    pref set httpClient.proxy.useDefaultCredentials true
    
  2. 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.

  1. Zaloguj się do platformy Azure:

    az login
    
  2. Pobierz identyfikator subskrypcji za pomocą następującego polecenia:

    az account show --query id
    
  3. Skopiuj identyfikator subskrypcji i uruchom następujące polecenie:

    az account set --subscription "<SUBSCRIPTION ID>"
    
  4. Pobierz token elementu nośnego za pomocą następującego polecenia:

    az account get-access-token --query accessToken
    
  5. Połącz się z interfejsem API REST platformy Azure za pośrednictwem narzędzia HttpRepl:

    httprepl https://management.azure.com
    
  6. Ustaw nagłówek żądania HTTP Authorization:

    https://management.azure.com/> set header Authorization "bearer <ACCESS TOKEN>"
    
  7. Przejdź do subskrypcji:

    https://management.azure.com/> cd subscriptions/<SUBSCRIPTION ID>
    
  8. 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. Na przykład:

https://localhost:5001/people> echo on
Request echoing is on

Kolejne żądania HTTP w bieżącej sesji wyświetlają nagłówki żądań. Na 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. Na 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. Na przykład:

  1. 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
    
  2. Wykonaj polecenie run, przekazując ścieżkę pliku tekstowego. Na przykład:

    https://localhost:5001/> run C:\http-repl-scripts\people-script.txt
    

    Wyświetlane są 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